使用GDB调试设备驱动程序



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

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

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

该设备正常工作。但是没有任何解决方案来调试设备驱动程序

我所知道的是,如何使用Linux中的GDB调试C程序(Fedora20)。我得到了一个与我的问题相似的链接,但也没有任何知识。

任何人都可以分享您的想法,即如何从头开始。我非常具体地了解Linux中的调试设备驱动程序。尤其是 INIT probe 在驱动程序中我需要知道流程。

gdb调试器对于调试用户空间应用程序级别程序很有用(因为它使用ptrace(2))。

对于内核代码,情况有所不同。考虑使用kgdb(我不知道详细信息)。您还可以添加调试打印。

我建议至少阅读有关操作系统的更多信息,例如操作系统:三个简单的作品(可自由下载),并阅读有关Linux编程的内容(也许是旧的ALP,以及Intro(2),Syscalls(2)(2)和相关内容)。在不熟悉Linux编程的情况下(在用户领域),不要敢编码Linux可加载的内核模块。另请参见kernelnewbies。

顺便说一句,您应该比内核模块更喜欢编写用户地代码。一个非常简单的经验法则是避免在可能的情况下编写内核代码。

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

调试的非常基本的方法可以使用printk。通常,可以通过编译标志启用调试日志。如果存在,请启用它,以便它可以给出重要的指示,您可能需要自己添加它。

从验证驱动程序注册和驾驶员加载验证(根据您的要求静态或可加载模块)开始。检查它是被列为SYSFS的一部分还是PROC的适用。检查探针是否成功,随后根据您的驱动程序/设备功能进行适当的读/写/打开/关闭/其他呼叫。

DMESG对于查看内核消息非常有帮助。还有一些工具,例如KDB,LTT,Strace,可以根据情况有用。

相关内容

  • 没有找到相关文章

最新更新