Debugging Gnu调试器与Linux内核

Debugging Gnu调试器与Linux内核,debugging,linux-kernel,kernel,Debugging,Linux Kernel,Kernel,我已经编译了自己的内核模块,现在我希望能够加载它 进入GNU调试器GDB。我做过一次,大约一年前,为了看一看 在内存布局上。那时候效果很好,但我当然太傻了,没办法 写下我为实现这一目标而采取的单个步骤。。。有人能启发我吗 还是给我指一个好的教程 非常感谢我已经有一段时间没有积极为Linux开发驱动程序了,所以我的答案可能有点过时了。我想说你不能使用GDB。如果有的话,只需对转储文件进行事后调试。要进行调试,您应该使用内核调试器。在启用内核调试器的情况下构建内核2.6版有一个现成的调试器,在我处于

我已经编译了自己的内核模块,现在我希望能够加载它 进入GNU调试器GDB。我做过一次,大约一年前,为了看一看 在内存布局上。那时候效果很好,但我当然太傻了,没办法 写下我为实现这一目标而采取的单个步骤。。。有人能启发我吗 还是给我指一个好的教程


非常感谢

我已经有一段时间没有积极为Linux开发驱动程序了,所以我的答案可能有点过时了。我想说你不能使用GDB。如果有的话,只需对转储文件进行事后调试。要进行调试,您应该使用内核调试器。在启用内核调试器的情况下构建内核2.6版有一个现成的调试器,在我处于活动状态时缺少。我使用了Sun提供的KDB内核补丁,对此我非常满意。除非新的gdb以某种方式与内部内核调试器通信,否则用户空间工具不会有多大用处,无论如何,您都必须激活内部内核调试器


我希望这至少能给你一些提示,而不是一个详细的答案。总比没有答案好。尊敬。

我已经有一段时间没有积极开发Linux驱动程序了,所以我的答案可能有点过时了。我想说你不能使用GDB。如果有的话,只需对转储文件进行事后调试。要进行调试,您应该使用内核调试器。在启用内核调试器的情况下构建内核2.6版有一个现成的调试器,在我处于活动状态时缺少。我使用了Sun提供的KDB内核补丁,对此我非常满意。除非新的gdb以某种方式与内部内核调试器通信,否则用户空间工具不会有多大用处,无论如何,您都必须激活内部内核调试器


我希望这至少能给你一些提示,而不是一个详细的答案。总比没有答案好。问候。

我怀疑你所做的是

gdb /boot/vmlinux /proc/kcore

当然,您实际上不能进行任何调试,但它确实足够好,可以对内核进行一次检查。

我怀疑您所做的是

gdb /boot/vmlinux /proc/kcore

当然,您实际上无法进行任何调试,但它确实足够好,可以对内核进行一次检查。

对于内核>2.6.26,即2008年5月之后,首选的方法可能是使用kgdb light,以免与它的祖先kgdb混淆,后者作为一组内核补丁提供。 例如,在当前的Ubuntu内核中,kgdb light现在默认是内核的一部分,而且它的功能正在快速改进,Jason Wessel正在开发它——可能是google键

缺点:您需要两台机器,一台正在调试,另一台是运行gdb的开发主机。目前,这两台机器只能通过串行链路进行链接。 kgdb在目标机器上运行,它在目标机器上处理断点、步进等,远程调试协议用于与开发机器对话。 gdb在处理用户界面的开发机器中运行。 USB到串行适配器在开发机器上可以正常工作,但目前,您需要在目标机器上使用真正的UART,而在最近的硬件上,这种情况不再常见

简练的kgdb文档位于 文件/DocBook

我建议你用谷歌搜索一下kgdb light的完整故事。 再次强调,不要混淆kgdb和kgdb light,它们在谷歌搜索中放在一起,但大多是不同的动物。特别是,linsyssoft.com中的信息与祖先kgdb相关,因此请尝试以下查询:

kgdb module debugging -"linsyssoft.com" -site:linsyssoft.com
并丢弃2008年5月2.6.26日之前的文章。 最后,对于模块调试,您需要在dev机器中手动加载您感兴趣的所有代码和部分的模块符号。这有点太长了,但有些线索
底线是,kgdb是一个非常受欢迎的改进,但不要期望这次旅行像在用户模式下运行gdb那样简单。还没有

对于内核>2.6.26,即2008年5月之后,首选的方法可能是使用kgdb light,以免与它的祖先kgdb混淆,后者作为一组内核补丁提供。 例如,在当前的Ubuntu内核中,kgdb light现在默认是内核的一部分,而且它的功能正在快速改进,Jason Wessel正在开发它——可能是google键

缺点:您需要两台机器,一台正在调试,另一台是运行gdb的开发主机。目前,这两台机器只能通过串行链路进行链接。 kgdb在目标机器上运行,它在目标机器上处理断点、步进等,远程调试协议用于与开发机器对话。 gdb在处理用户界面的开发机器中运行。 USB到串行适配器在开发机器上可以正常工作,但目前,您需要在目标机器上使用真正的UART,而在最近的硬件上,这种情况不再常见

简练的kgdb文档位于 文件/DocBook

我建议你搜索一下kgdb li 完整的故事。 再次强调,不要混淆kgdb和kgdb light,它们在谷歌搜索中放在一起,但大多是不同的动物。特别是,linsyssoft.com中的信息与祖先kgdb相关,因此请尝试以下查询:

kgdb module debugging -"linsyssoft.com" -site:linsyssoft.com
并丢弃2008年5月2.6.26日之前的文章。 最后,对于模块调试,您需要在dev机器中手动加载您感兴趣的所有代码和部分的模块符号。这有点太长了,但有些线索 底线是,kgdb是一个非常受欢迎的改进,但不要期望这次旅行像在用户模式下运行gdb那样简单。还没有