嵌入式Linux调试(Farsight).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式Linux调试(Farsight)

写在前面 Linux内核或设备驱动程序的调试远比应用程序的调试繁琐、复杂! 调试内核的关键是对内核的深刻理解 要有汇编基础! 要有耐心! 要有好运! 2.4内核中对调试的支持 2.6内核中对调试的支持 使用printk进行调试 printk的记录等级 printk( KERN_WARNING “This is a warning\n”); printk( KERN_DEBUG “This is a warning!\n” ); printk( “No LogLevel is specified!\n” ); 可供使用的记录等级 用户空间的守护进程--klogd 用来从记录缓冲区获取内核消息; 只有日记级别小于console_loglevel,消息才能显示出来, console_loglevel的值可以通过sys_syslogd系统调用进行修改; 载入klogd时,可以使用-c标志改变终端的记录等级; 运行klogd后,消息将追加到/var/log/messages; 没有运行klogd,消息不会传递到用户空间,此时可以查看/proc/kmsg文件。 syslogd进程 保存klogd进程获取的内核消息到系统日志文件中; 默认的文件是/var/log/messages; 可通过/etc/syslog.conf文件重新配置; 如果没有运行klogd进程,数据将保留在循环缓冲区中,直到某个进程读取和缓冲区溢出为止。 调试信息数据流传递流程图 提高日志级别 要查看调试信息,必须提高日志级别; 读写/proc/sys/kernel/printk文件 [root@vm-2.6]#cat /proc/sys/kernel/printk 6 4 1 7 设置当前日志级别的命令 [root@vm-2.6]#echo 8 /proc/sys/kernel/printk strace命令 显示程序调用的所有系统调用 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 -t:显示调用发生的时间 -T:显示调用花费的时间 -e:限定被跟踪的调用类型 -o:将输出定向到一个文件中 oops 产生oops的原因: 内存访问越界 非法指令 使用了NULL指针 使用了不正确的指针值 oops的内容: CPU寄存器内容 页描述符表的位置 其他信息 有问题的write程序 ssize_t faulty_write ( struct file *filp, const char __user *buf, size_t count, loff_t *pos ) { *(int *)0 = 0; return 0; } 有问题的read程序 ssize_t faulty_read ( struct file *filp, const char __user *buf, size_t count, loff_t *pos ) { int ret; char stack_buf[4]; memset(stack_buf,0xff,20); if(count 4) count=4; ret = copy_to_user(buf,stack_buf,count); if(!ret) return count; return ret; } oops产生时的转储信息 EIP: 0010: Unable to handle kerel paging request at virtual address ffffffff printing eip: ffffffff Oops: 0000[#5] SMP CPU: 0 EIP: 0060:[ffffffff] Not tainted EFLAGS:(2.6.6) EIP is at 0xfffffff eax:0000000c ebx:ffffffff ecxedx:bfffda7c esi:cf434f00 edi:ffffffff ebpesp:c27fff78 ds:007b es:007b ss:0068 oops产生时的转储信息(2) Process Head (pid:2331,threadinfo=c27fe000 task=c3226150)

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档