现在调试变得如此先进,甚至可以使用虚拟环境调试“核心内核源代码”。
但在阅读了一些与 Kernel Core 开发相关的博客后,并不清楚他们是否使用虚拟环境进行调试。
他们提到他们依赖“打印消息”而不是使用调试工具,至少对于核心组件而言。
那么,我请求“Linux 内核专家”让我知道调试内核时遵循的良好做法是什么?
最佳答案
我尝试调试内核时尝试了多种方法。
- 有时,最简单的方法是根据我自己的条件值添加一些
printk
语句,监视串行日志并查看发生了什么。当经常调用相关函数但您只对其中的一个子集感兴趣时,它特别有用。 - QEMU GDB 调试。我有一个 buildroot 文件系统设置。这意味着内核是精简的,并且启动速度非常快。我使用
-s -S
标志启动 qemu,并将 gdb 附加为target remote :1234
。此外,此设置中没有太多用户空间进程,因此更容易调试内核。 - VMWare stub 。假设您正在运行 Ubuntu VM,您可以将 gdb 附加到 VMware stub 并调试内核。就我个人而言,我从来不必走这条路,但我期待有一天能尝试一下。
- 如果您的设备内核卡在引导循环中,并且没有将任何调试信息输出到串口,那么尝试使用 QEMU 启动它可能仍然会有帮助。当然,启动可能会失败,因为内核会尝试加载驱动程序,但您应该能够附加 gdb,获取堆栈跟踪并查看根本原因是什么(可能是递归调用)。
关于linux - 他们如何调试 Linux Kernel Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46913831/