首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用GDB调试设备驱动程序

使用GDB调试设备驱动程序
EN

Stack Overflow用户
提问于 2017-12-14 10:02:24
回答 2查看 1.8K关注 0票数 2

我对Linux中的设备驱动程序很陌生。我的第一天任务是在Linux中使用GDB调试驱动程序。

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

我已经安装了带有补丁文件和insmod命令的驱动程序。

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

我只知道如何在Linux(fedora20)中使用GDB调试C程序。我得到了一个类似于我的问题的链接,但也没有任何知识。

请大家分享你的想法,,如何从零开始,。我非常具体地了解有关在Linux中调试设备驱动程序的知识。特别是我的驱动程序中的init、探测函数,我需要知道流程。

EN

回答 2

Stack Overflow用户

发布于 2017-12-14 10:07:54

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

对于内核代码,情况就不同了。以kgdb为例(我不知道细节)。您还可以添加调试打印 ..。

我建议至少阅读更多关于操作系统的内容,例如http://pages.cs.wisc.edu/~remzi/OSTEP/ (可免费下载),并阅读一些关于Linux编程的内容(可能是旧的碱性磷酸酶,以及介绍(2)系统(2)等相关内容)。如果不熟悉Linux编程(用户地),就不敢编写Linux 可加载内核模块。另见核菜鸟

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

票数 4
EN

Stack Overflow用户

发布于 2017-12-19 17:30:43

首先,您可能需要了解linux中设备驱动程序和内核的基本知识。随后,根据手边司机的类型集中注意力.您还需要了解正在使用的设备的功能(规范/手动/数据表)。

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

从验证驱动程序注册和验证您的驱动程序的加载开始(根据您的需求,静态或可加载模块)。检查它是否被列为sysfs或proc的一部分。检查探测是否成功,并随后根据驱动程序/设备功能进行适当的读/写/打开/关闭/其他调用。

dmesg对于查看内核消息非常有帮助。还有一些工具,如kdb、LTT、strace,可以根据场景使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47810552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档