使用GDB调试设备驱动程序

问题描述 投票:2回答:2

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

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

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

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

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

任何人都可以分享你的想法,我怎么能从头开始。我非常具体了解Linux中的调试设备驱动程序。特别是我的驱动程序中的init或probe函数我需要知道流程。

linux debugging gdb linux-device-driver device-driver
2个回答
3
投票

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

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

我建议至少阅读有关操作系统的更多信息,例如: debug prints(可免费下载),阅读有关Linux编程的内容(也许是旧的Operating Systems: Three Easy Pieces,以及ALPintro(2)及相关内容)。如果不熟悉Linux编程(在用户区),不要急于编写Linux syscalls(2)。另见loadable kernel modules

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


1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.