使用GDB调试设备驱动程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用GDB调试设备驱动程序相关的知识,希望对你有一定的参考价值。
我是Linux中设备驱动程序的新手。我的第一天任务是在Linux中使用GDB调试驱动程序。
- 我需要调试一些XYZ(PCIe设备驱动程序支持以太网)设备驱动程序,以了解流程以及设备寄存器和所有内容的运行情况。
我已经用patch文件和insmod命令安装了驱动程序。
设备运行正常。但我没有得到任何调试设备驱动程序的解决方案。
我所知道的是如何在Linux中使用GDB调试C程序(fedora 20)。我得到了一个类似于我的问题的qazxsw poi但是从那时起我也没有任何知识。
任何人都可以分享你的想法,我怎么能从头开始。我非常具体了解Linux中的调试设备驱动程序。特别是我的驱动程序中的init或probe函数我需要知道流程。
link调试gdb
debugger is useful应用程序级程序(因为它使用user-space)。
对于内核代码,情况有所不同。考虑ptrace(2)(我不知道细节)。你也可以添加using kgdb
....
我建议至少阅读有关操作系统的更多信息,例如: debug prints(可免费下载),阅读有关Linux编程的内容(也许是旧的Operating Systems: Three Easy Pieces,以及ALP,intro(2)及相关内容)。如果不熟悉Linux编程(在用户区),不要急于编写Linux syscalls(2)。另见loadable kernel modules。
顺便说一句,你应该更喜欢编写用户区代码而不是内核模块。一个非常简单的经验法则是尽可能避免编写内核代码。
首先,您可能需要了解linux中设备驱动程序和内核的基础知识。随后根据手中的驾驶员类型进行关注。您还需要了解正在使用的设备的功能(规格/手册/数据表)。
调试的基本方法可以是使用printk。通常会有通过编译标志启用的调试日志。如果它存在,启用它以便它可以提供重要的指针,否则您可能需要自己添加它。
首先验证驱动程序注册和验证驱动程序的加载(根据您的要求,静态或可加载模块)。检查它是否作为sysfs或proc的一部分列为适用的。根据您的驱动程序/设备功能检查探针是否成功,然后检查相应的读/写/打开/关闭/其他调用。
dmesg对查看内核消息非常有帮助。还有像kdb,LTT,strace这样的工具,根据场景可能很有用。
以上是关于使用GDB调试设备驱动程序的主要内容,如果未能解决你的问题,请参考以下文章