- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux 设备驱动程序调试方法
国防科技大学 计算机学院 张一鸣
由于设备驱动程序运行于内核空间,因此有着与用户空间程序不同的调试方法。
1.1 简介
设备驱动程序的调试需要内核的支持,因此通常应该根据需要对内核进行重编译。下面
以2.6.11 版的Linux 内核为例进行介绍,其他版本的内核编译方法与此类似。
1. 进入编译选项配置界面。
(1)如果不清楚当前正在运行的内核源代码的目录,可以通过如下方法查看。
(2 )进入内核源代码所在目录,通过make menuconfig 命令进入编译选项配置环境,
如图1.1 所示。
调试内核
图1.1 编译选项配置环境
在选项配置环境中每个选项有 “*”(编译进内核)、“M ”(以模块方式编译)和 “”(不
编译)三种状态,可以分别使用 “Y ”、“M ”和 “N ”键来设置。
2 .配置编译选项
如图1.2 所示,在Kernel hacking 下有很多选项,分别对应不同的内核调试功能。
图1.2 内核调试选项
其中需要注意的有如下几点。
(1)Kernel debugging 选项 (对应于CONFIG_DEBUG_KERNEL )应设为 “*”,只有
把该选项选为 “*”,才能够使其他内核调试选项可见。
(2 )使用gdb 调试内核需要在编译内核的时候应选中Compile the kernel with debug info
选项 (CONFIG_DEBUG_INFO),否则gdb 将无法对内核符号进行解析。(?是这样吗)
(2 )Spinlock debugging 选项 (对应于 CONFIG_DEBUG_SPINLOCK)应设为 “*”,
这样系统将检查到例如对没有初始化的spinlock 的操作、对同一个锁解锁多次等类似错误。
(3 )Sleep-inside-spinlock checking 选项 (对应于CONFIG_DEBUG_SPINLOC_SLEEP )
通常可不选。选中该选项将使系统检查到占有 spinlock 的进程进入sleep 状态的错误,但是系
统在进程只是有可能sleep 的情况下也会发出警告,从而可能在正常情况下产生大量无用信
息。在使用VMware 虚拟机的时候这种现象尤为明显。
(4 )Kprobes 选项 (对应于 CONFIG_KPROBES )通常可不选。该选项的作用是使人们
能够通过 register_kprobe() 函数在内核中适当的位置设置自定义的回调函数。但是选中该选项
将会定义一个和kdb 中同名的函数 (用于产生int3 中断),造成冲突。如果希望使用kdb ,则
不应选中Kprobes 选项。
(5 )如果打了kdb 的patch,那么在最后将会有Built-in Kernel Debugger support 选项,
我们将在1.8 节 “使用kdb ”中进行介绍。
(6 )在顶层选项的Loadable module support 中只有选中Module versioning support 选项,
才能够为模块添加版本支持机制。(通常可以不选)。
设置完成后保存并退出编译选项配置环境,通过make install 命令编译内核。(或者使用
make bzImage ,make modules,make modules_install,make install)。编译完成后即可对内核进
行调试了。
1.2 使用printk()
1.2.1 简介
通常认为真正的高手和初学者都只使用printk() 来调试内核。从某种程度上说,printk()就
是内核里的printf()。
如果 klogd 和 syslogd 都已经运行,那么 printk() 将把消息打印到 console 或者
/var/log/messages 文件中。
例如
消息通常会打印到console 上或者/var/log/messages
您可能关注的文档
- Linux的SSH服务的开启与应用.doc
- linux的vim编辑器使用详解.docx
- Linux服务器环境搭建(设置).pdf
- linux服务器下yum源的搭建.doc
- Linux-高可用(HA)集群之Corosync-详解.docx
- Linux核心应用命令速查.pdf
- Linux环境Apache服务器配置与管理.doc
- Linux环境下hadoop运行平台的搭建.docx
- Linux环境下Qt4图形界面与MySQL编程.pdf
- linux环境下安装、部署weblogic8.1.5.docx
- 四川省雅安市2024届高三下学期三诊考试物理试卷(含答案).docx
- 河南省新乡市2024届高三下学期第三次模拟考试数学试卷(含答案).docx
- 广东省肇庆市2024年中考一模英语试卷(含答案).docx
- 安徽省六安市霍山县多校联考2024届九年级下学期5月中考三模物理试卷(含答案).docx
- 山西省临汾市古县多校2023-2024学年八年级下学期期中考试数学试卷(含答案).docx
- 海南省海口市2024年中考一模数学试卷(含答案).docx
- 河南省三门峡市2024年中考二模物理试卷(含答案).docx
- 广西桂林市2024年中考一模英语试卷(含答案).docx
- 浙江省宁波市”十校“2024届高三下学期3月份适应性考试英语试卷(含答案).docx
- 吉林省长春市2024年初中学业水平考试(二模)生物试卷(含答案).docx
文档评论(0)