我是linux内核的新手。想知道如何浏览完整的流程,直接从 CPU 上电开始。BIOS/ROM 代码的基本概念。
我可以有一些工具来调试完整的内核吗?还是原始代码浏览更可取?
我是linux内核的新手。想知道如何浏览完整的流程,直接从 CPU 上电开始。BIOS/ROM 代码的基本概念。
我可以有一些工具来调试完整的内核吗?还是原始代码浏览更可取?
以下工具可以帮助您调试 Linux 内核
Dynamic Probes是 IBM 开发的一种流行的 Linux 调试工具。该工具允许在系统中的几乎任何位置放置“探针”,包括用户空间和内核空间。探针由一些代码(用专门的、面向堆栈的语言编写)组成,这些代码在控制到达给定点时执行。下面列出了有关 dprobes / kprobes的资源
Linux Trace Toolkit是一个内核补丁和一组相关的实用程序,允许跟踪内核中的事件。跟踪包括时间信息,并且可以创建在给定时间段内发生的事情的合理完整图片。LTT、LTT Viewer 和 LTT Next Generation 的资源
MEMWATCH是一个开源的内存错误检测工具。它通过在 gcc 语句中定义 MEMWATCH 并将头文件添加到我们的代码中来工作。通过这个我们可以跟踪内存泄漏和内存损坏。关于 MEMWATCH 的资源
ftrace是一个很好的 Linux 内核跟踪框架。ftrace 跟踪内核的内部操作。该工具包含在 2.6.27 的 Linux 内核中。借助其各种跟踪器插件,ftrace 可以针对不同的静态跟踪点,例如调度事件、中断、内存映射 I/O、CPU 电源状态转换以及与文件系统和虚拟化相关的操作。此外,内核函数调用的动态跟踪是可用的,可选地通过使用 glob 限制到函数的子集,并且可以生成调用图并提供堆栈使用。你可以在https://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_rostedt.pdf找到一个很好的 ftrace 教程
ltrace是 Linux 中的一个调试工具,用于显示用户空间应用程序对共享库的调用。该工具可用于跟踪任何动态库函数调用。它截获并记录被执行进程调用的动态库调用以及该进程接收到的信号。它还可以拦截和打印程序执行的系统调用。
KDB是 Linux 内核的内核调试器。KDB 遵循简单的 shell 风格的界面。我们可以使用它来检查内存、寄存器、进程列表、dmesg,甚至可以设置断点以在某个位置停止。通过 KDB,我们可以设置断点并执行一些基本的内核运行控制(虽然 KDB 不是源级调试器)。关于 KDB 的几个方便的资源
KGDB旨在用作 Linux 内核的源代码级调试器。它与 gdb 一起用于调试 Linux 内核。使用 kgdb 需要两台机器。其中一台机器是开发机器,另一台是目标机器。要调试的内核在目标机器上运行。期望 gdb 可用于“闯入”内核以检查内存、变量并查看调用堆栈信息,类似于应用程序开发人员使用 gdb 调试应用程序的方式。可以在内核代码中放置断点并执行一些有限的执行单步执行。关于 KGDB 的几个方便的资源
一、看相关问题Linux内核实时调试,它是怎么做的,用什么工具?. 尝试使用KDB或Ftrace。
如果您的目的是了解 Linux 内核的整个流程,那么在QEMU上运行 Linux 内核可能是了解 Linux 工作原理的简单方法。特别是。您可以在没有真正硬件的情况下模拟许多 CPU 类型。或者用户模式Linux怎么样?
本文档有助于在 QEMU 上调试内核。
顺便补充一句,Linux内核不是很适合调试。Linus Torvalds 曾表示他反对在 Linux 中支持内核调试,因为这会导致编写糟糕的代码。我使用了 kdbg,但是我发现它不是很有用,我建议使用 printk 以老式的方式调试内核。