当前位置: 首页 > news >正文

视频网站 外链备案期间 需要关闭网站

视频网站 外链,备案期间 需要关闭网站,如何制作网页电子新年贺卡步骤,网站的优化哪个好最近在学写linux驱动#xff0c;按照宋宝华的《linux设备驱动开发详解》上的例子一步步来写。编译运行以后出现oops#xff0c;不知道怎么调试#xff0c;上网搜了一下#xff0c;看到这篇文章#xff0c;感觉不错转载到这里。 来自Linus Torvalds的讨论: https://groups.…最近在学写linux驱动按照宋宝华的《linux设备驱动开发详解》上的例子一步步来写。编译运行以后出现oops不知道怎么调试上网搜了一下看到这篇文章感觉不错转载到这里。 来自Linus Torvalds的讨论: https://groups.google.com/group/linux.kernel/browse_thread/thread/b70bffe9015a8c41/ed9c0a0cfcd31111 例如这样的一个Oops Oops: 0000 [#1] PREEMPT SMP                   Modules linked in: capidrv kernelcapi isdn slhc ipv6 loop dm_multipath snd_ens1371 gameport snd_rawmidi snd_ac97_codec ac97_bus s nd_seq_dummy snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd parport_pc floppy parport pcnet32 soundcore mii pcspkr snd_page_alloc ac i2c_piix4 i2c_core button power_supply sr_mod sg cdrom ata_piix libata dm_snapshot dm_zero dm_mirror dm_mod BusLogic sd_mod scsi_mod ext3 jbd mbcache uhci_hcd ohci_hcd ehci_hcd Pid: 1726, comm: kstopmachine Not tainted (2.6.24-rc3-module #2)                 EIP: 0060:[c04e53d6] EFLAGS: 00010092 CPU: 0                 EIP is at list_del0xa/0x61                 EAX: e0c3cc04 EBX: 00000020 ECX: 0000000e EDX: dec62000                 ESI: df6e8f08 EDI: 000006bf EBP: dec62fb4 ESP: dec62fa4                  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068                  Process kstopmachine (pid: 1726, tidec62000 taskdf8d2d40 task.tidec62000)                 Stack: 000006bf dec62fb4 c04276c7 00000020 dec62fbc c044ab4c dec62fd0 c045336c                         df6e8f08 c04532b4 00000000 dec62fe0 c043deb0 c043de75 00000000 00000000                         c0405cdf df6e8eb4 00000000 00000000 00000000 00000000 00000000                  Call Trace:                  [c0406081] show_trace_log_lvl0x1a/0x2f                  [c0406131] show_stack_log_lvl0x9b/0xa3                  [c04061dc] show_registers0xa3/0x1df                  [c0406437] die0x11f/0x200                  [c0613cba] do_page_fault0x533/0x61a                  [c06123ea] error_code0x72/0x78                  [c044ab4c] __unlink_module0xb/0xf                  [c045336c] do_stop0xb8/0x108                  [c043deb0] kthread0x3b/0x63                  [c0405cdf] kernel_thread_helper0x7/0x10                                   Code: 6b c0 e8 2e 7e f6 ff e8 d1 16 f2 ff b8 01 00 00 00 e8 aa 1c f4 ff 89 d8 83 c4 10 5b 5d c3 90 90 90 55 89 e5 53 83 ec 0c 8b 48 04 8b 11 39 c2 74 18 89 54 24 08 89 44 24 04 c7 04 24 be 32 6b c0                   EIP: [c04e53d6] list_del0xa/0x61 SS:ESP 0068:dec62fa4                 note: kstopmachine[1726] exited with preempt_count 1 1, 有自己编译的vmlinux 使用gdb  编译时打开complie with debug info选项。  注意这行  EIP is at list_del0xa/0x61  这告诉我们list_del函数有0x61这么大而Oops发生在0xa处。 那么我们先看一下list_del从哪里开始                           # grep list_del /boot/System.map-2.6.24-rc3-module                 c10e5234 T plist_del                 c10e53cc T list_del                 c120feb6 T klist_del                 c12d6d34 r __ksymtab_list_del                 c12dadfc r __ksymtab_klist_del                 c12e1abd r __kstrtab_list_del                 c12e9d03 r __kstrtab_klist_del  于是我们知道发生Oops时的EIP值是        c10e53cc  0xa   c10e53d6            然后用gdb查看            # gdb /home/arc/build/linux-2.6/vmlinux                 (gdb) b *0xc10e53d6                 Breakpoint 1 at 0xc10e53d6: file /usr/src/linux-2.6.24-rc3/lib/list_debug.c, line 64.            看gdb直接就告诉你在哪个文件、哪一行了。            gdb中还可以这样                 # gdb Sources/linux-2.6.24/vmlinux                 (gdb) l *do_fork0x1f                 0xc102b7ac is in do_fork (kernel/fork.c:1385).                 1380                 1381    static int fork_traceflag(unsigned clone_flags)                 1382    {                 1383            if (clone_flags  CLONE_UNTRACED)                 1384                    return 0;                 1385            else if (clone_flags  CLONE_VFORK) {                 1386                    if (current-ptrace  PT_TRACE_VFORK)                 1387                            return PTRACE_EVENT_VFORK;                 1388            } else if ((clone_flags  CSIGNAL) ! SIGCHLD) {                 1389                    if (current-ptrace  PT_TRACE_CLONE)                 (gdb)             也可以直接知道line number。             或者                 (gdb) l *(0xffffffff8023eaf0  0xff)  /* 出错函数的地址加上偏移 */ 2, 没有自己编译的vmlinux TIPS            如果在lkml或bugzilla上看到一个Oops而自己不能重现那就只能反汇编以Code:开始的行。 这样可以尝试定位到            源代码中。            注意Oops中的Code:行会把导致Oops的第一条指令也就是EIP的值的第一个字节 用尖括号括起来。 但是有些            体系结构(例如常见的x86)指令是不等长的(不一样的指令可能有不一样的长度)所以要不断的尝试(trial-and-error)。            Linus通常使用一个小程序类似这样                 const char array[]  \xnn\xnn\xnn...;                 int main(int argc, char *argv[])                 {                         printf(%p\n, array);                         *(int *)0  0;                 } e.g. /*{{{*/ /* 注意 array一共有从array[0]到array[64]这65个元素 其中出错的那个操作码8b  arry[43] */ #include stdio.h #include stdlib.h const char array[] \x6b\xc0\xe8\x2e\x7e\xf6\xff\xe8\xd1\x16\xf2\xff\xb8\x01\x00\x00\x00\xe8\xaa\x1c\xf4\xff\x89\xd8\x83\xc4\x10\x5b\x5d\xc3\x90\x90\x90\x55\x89\xe5\x53\x83\xec\x0c\x8b\x48\x04\x8b\x11\x39\xc2\x74\x18\x89\x54\x24\x08\x89\x44\x24\x04\xc7\x04\x24\xbe\x32\x6b\xc0; int main(int argc, char *argv[]) {         printf(%p\n, array);         *(int *)0  0; } /*}}}*/            用gcc -g编译在gdb里运行它                 [arcdhcp-cbjs05-218-251 ~]$ gdb hello                 GNU gdb Fedora (6.8-1.fc9)                 Copyright (C) 2008 Free Software Foundation, Inc.                 License GPLv3: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html                 This is free software: you are free to change and redistribute it.                 There is NO WARRANTY, to the extent permitted by law.  Type show copying                 and show warranty for details.                 This GDB was configured as x86_64-redhat-linux-gnu...                 (no debugging symbols found)                 (gdb) r                 Starting program: /home/arc/hello                 0x80484e0                 Program received signal SIGSEGV, Segmentation fault.            注意这时候就可以反汇编0x80484e0这个地址                 (gdb) disassemble 0x80484e0                 Dump of assembler code for function array:                 0x080484e0 array0:   imul   $0xffffffe8,%eax,%eax                 0x080484e3 array3:   jle,pn 0x80484dc __dso_handle20                 0x080484e6 array6:   ljmp   *internal disassembler error                 0x080484e8 array8:   rcll   (%esi)                 0x080484ea array10:  repnz (bad)                 0x080484ec array12:  mov    $0x1,%eax                 0x080484f1 array17:  call   0x7f8a1a0                 0x080484f6 array22:  mov    %ebx,%eax                 0x080484f8 array24:  add    $0x10,%esp                 0x080484fb array27:  pop    %ebx                 0x080484fc array28:  pop    %ebp                 0x080484fd array29:  ret                 0x080484fe array30:  nop                 0x080484ff array31:  nop                 0x08048500 array32:  nop                 0x08048501 array33:  push   %ebp                 0x08048502 array34:  mov    %esp,%ebp                 0x08048504 array36:  push   %ebx                 0x08048505 array37:  sub    $0xc,%esp                 0x08048508 array40:  mov    0x4(%eax),%ecx                 0x0804850b array43:  mov    (%ecx),%edx                 0x0804850d array45:  cmp    %eax,%edx                 0x0804850f array47:  je     0x8048529                 0x08048511 array49:  mov    %edx,0x8(%esp)                 0x08048515 array53:  mov    %eax,0x4(%esp)                 0x08048519 array57:  movl   $0xc06b32be,(%esp)                 0x08048520 array64:  add    %ah,0xa70                 End of assembler dump.                 (gdb)           OK, 现在你知道出错的那条指令是array[43]也就是mov    (%ecx),%edx也就是说(%ecx)指向了一个错误内存地址。 补充 为了使汇编代码和C代码更好的对应起来 Linux内核的Kbuild子系统提供了这样一个功能 任何一个C文件都可以单独编译成汇编文件例如 make path/to/the/sourcefile.s 例如我想把kernel/sched.c编译成汇编那么 make kernel/sched.s V1 或者 make kernel/sched.lst V1          编译出*.s文件                        有时侯需要对*.s文件进行分析以确定BUG所在的位置。 对任何一个内核build目录下的*.c文件都可以            直接编译出*.s文件。                    # make drivers/net/e100.s V1                        而对于自己写的module就需要在Makefile中有一个灵活的target写法                                     # cat Makefile                 obj-m : usb-skel.o                 KDIR : /lib/modules/uname -r/build                 traget : modules                 default:                         make -C $(KDIR) M$(shell pwd) $(target)                 clean:                         rm -f *.o *.ko .*.cmd *.symvers *.mod.c                         rm -rf .tmp_versions                 # make targetusb-skel.s V1                        这样kbuild系统才知道你要make的目标不是modules而是usb-skel.s。 另外 内核源代码目录的./scripts/decodecode文件是用来解码Oops的 ./scripts/decodecode  Oops.txt (我没用过就只提一下。)
http://wiki.neutronadmin.com/news/135464/

相关文章:

  • 建站之星演示网站模版 百度云
  • 个人网站托管页面设计平台
  • 原创网站模版什么是网络设计图
  • 手机网站首页怎么做网站开发的招标参数
  • 国内 响应式网站网站在百度的标头不对
  • 铁路项目建设 网站wordpress 导航栏登录
  • 没有备案的网站百度不收录商业网页设计培训
  • 找培训机构的网站百度公司官方网站
  • 成品网站w灬源码伊甸3m8uui设计培训学费多少
  • 南京哪个网站建设比较好东莞关键词优化效果
  • php网站开发外文深圳专业做网站的公司哪家好
  • 网站备份还原杭州市建设工程质量安全监督总站网站
  • 做毕业设计个人网站任务书汕尾北京网站建设
  • 友情链接交换工具seo公司哪家便宜
  • 株洲外贸网站建设WordPress文章过滤
  • 长沙网站托管seo优化公司企业网站wordpress
  • 怎么才能找到想做网站建设的客源农业信息网站建设
  • 网站建设结构设计seo金融术语
  • 乔拓云智能建站平台朋友圈推广
  • 建站资源js 网站简体繁体
  • 红花岗区建设局网站常用的设计软件有哪些
  • 电商网站建设推荐阿里巴巴网站域名
  • 管理系统网站免费下载百度app最新版本
  • 网站空间哪个好品牌建设总结
  • 老鹰主机 建wordpress重庆百度整站优化
  • 做旅游网站的任务成都网站建设网
  • amp 网站开发网站做支付系统
  • 什么叫个人网站软件网站查询域名ip查询
  • 青海网站开发建设wordpress检查元素
  • wordpress 图片站模板互联网设计师leader