调试linux内核的工具是什么?

调试linux内核的工具是什么?,linux,linux-kernel,linux-device-driver,boot,bootloader,Linux,Linux Kernel,Linux Device Driver,Boot,Bootloader,我是linux内核的新手。 徘徊如何浏览完整的流程,从权力的CPU了。 BIOS/ROM代码的基本思想 我可以用一些工具来调试整个内核吗? 或 最好是浏览原始代码 首先,参见相关问题。尝试使用或。如果您的目的是了解Linux内核的整个流程,那么在上运行Linux内核可以很容易地了解Linux的工作原理。特别是,您可以模拟许多CPU类型,而不需要实际的H/W。或者呢 可以帮助在QEMU上调试内核。只需添加,Linux内核不太适合调试。Linus Torvalds曾表示,他不支持Linux中的内核调

我是linux内核的新手。 徘徊如何浏览完整的流程,从权力的CPU了。 BIOS/ROM代码的基本思想

我可以用一些工具来调试整个内核吗? 或
最好是浏览原始代码

首先,参见相关问题。尝试使用或。

如果您的目的是了解Linux内核的整个流程,那么在上运行Linux内核可以很容易地了解Linux的工作原理。特别是,您可以模拟许多CPU类型,而不需要实际的H/W。或者呢


可以帮助在QEMU上调试内核。

只需添加,Linux内核不太适合调试。Linus Torvalds曾表示,他不支持Linux中的内核调试,因为这会导致编写糟糕的代码。
我使用了kdbg,但是我觉得它不是很有用,我建议用老式的方式调试内核,使用printk。

以下工具可能会帮助您调试Linux内核

是IBM开发的一种流行的Linux调试工具。这个工具允许在系统中几乎任何地方放置“探测器”,包括用户空间和内核空间。探测由一些代码(用专门的、面向堆栈的语言编写)组成,这些代码在控件到达给定点时执行。关于dprobes/kprobes的资源如下所列

是一个内核补丁和一组相关实用程序,允许跟踪内核中的事件。跟踪包括时间信息,可以创建给定时间段内发生的事情的合理完整图片。LTT、LTT查看器和LTT下一代资源

是一个开源的内存错误检测工具。它的工作原理是在gcc语句中定义MEMWATCH,并向代码中添加头文件。通过它,我们可以跟踪内存泄漏和内存损坏。关于MEMWATCH的资源

是一个很好的Linux内核跟踪框架。ftrace跟踪内核的内部操作。此工具包含在2.6.27版本的Linux内核中。通过各种跟踪插件,ftrace可以针对不同的静态跟踪点,例如调度事件、中断、内存映射I/O、CPU电源状态转换以及与文件系统和虚拟化相关的操作。此外,内核函数调用的动态跟踪是可用的,可以选择使用globs限制为函数的子集,并且可以生成调用图并提供堆栈使用。你可以在以下网站找到一个很好的ftrace教程:

是Linux中的一个调试实用程序,用于显示用户空间应用程序对共享库的调用。此工具可用于跟踪任何动态库函数调用。它拦截并记录已执行进程调用的动态库调用以及该进程接收到的信号。它还可以拦截并打印程序执行的系统调用

KDB是Linux内核的内核内调试器。KDB遵循简单的shell样式接口。我们可以使用它来检查内存、寄存器、进程列表、dmesg,甚至设置断点以在某个位置停止。通过KDB,我们可以设置断点并执行一些基本的内核运行控制(尽管KDB不是源代码级调试器)。关于KDB的几个方便的资源

KGDB旨在用作Linux内核的源代码级调试器。它与gdb一起用于调试Linux内核。使用kgdb需要两台机器。其中一台是开发机器,另一台是目标机器。要调试的内核在目标计算机上运行。我们的期望是,gdb可以用来“闯入”内核,以检查内存、变量和调用堆栈信息,类似于应用程序开发人员使用gdb调试应用程序的方式。可以在内核代码中放置断点并执行一些有限的执行步骤。关于KGDB的几个方便的资源


也请阅读,这是否符合最新的内核要求?可能是的。为什么不呢?我不确定,但有一次我发现一些文件名和API不匹配。谢谢如果您的平台上有JTAG可用,那么这也是进行源代码级调试的一种方法。