使用GDB调试设备驱动程序

时间:2017-12-14 10:02:25

标签: linux debugging gdb linux-device-driver device-driver

我是Linux新手设备驱动程序。我的第一天任务是在Linux中使用GDB调试驱动程序。

  • 我需要调试一些XYZ(PCIe设备驱动程序支持以太网)设备驱动程序,以了解流程以及设备寄存器和所有内容的运行情况。

我已经使用补丁文件和 insmod 命令安装了驱动程序。

设备正常运行。但没有得到任何调试设备驱动程序的解决方案

我所知道的是如何在Linux(Fedora20)中使用GDB调试C程序。我得到了一个link类似于我的问题但是从那时起我也没有任何知识。

任何人都可以分享您的想法我如何从头开始。 我非常具体了解Linux中的调试设备驱动程序。特别是我的驱动程序中的 init 探测功能我需要知道流程。

2 个答案:

答案 0 :(得分:3)

gdb debugger is useful调试user-space应用程序级程序(因为它使用ptrace(2))。

对于内核代码,情况有所不同。考虑using kgdb(我不知道细节)。您也可以添加debug prints ....

我建议至少阅读有关操作系统的更多信息,例如: Operating Systems: Three Easy Pieces(可免费下载),阅读有关Linux编程的内容(可能是旧ALP,还有intro(2)syscalls(2)及相关内容。如果不熟悉Linux编程(在用户区),不要编写Linux loadable kernel modules编码。另请参阅kernelnewbies

顺便说一句,你应该更喜欢编写用户区代码而不是内核模块。一个非常简单的经验法则是尽可能避免编写内核代码。

答案 1 :(得分:1)

首先,您可能需要了解linux中设备驱动程序和内核的基础知识。随后根据手中的驾驶员类型进行关注。您还需要了解正在使用的设备的功能(规格/手册/数据表)。

调试的基本方法可以是使用printk。通常会有通过编译标志启用的调试日志。如果它存在,启用它以便它可以提供重要的指针,否则你可能需要自己添加它。

首先验证驱动程序注册和验证驱动程序的加载(根据您的要求,静态或可加载模块)。检查它是否作为sysfs或proc的一部分列为适用的。根据您的驱动程序/设备功能检查探针是否成功,然后检查相应的读/写/打开/关闭/其他调用。

dmesg对于查看内核消息非常有帮助。还有像kdb,LTT,strace这样的工具可以根据场景使用。