Linux内核模块调试

时间:2011-05-16 13:50:53

标签: debugging module linux-kernel

有没有调试Linux内核模块的方法?我正在寻找一个基于GUI的工具,如用于用户流程的工具?

3 个答案:

答案 0 :(得分:1)

如果您可以在虚拟机中运行内核,VMware Workstation允许GDB attach to the VM调试正在运行的内核。您可以对其他VM平台执行相同的操作,但我不熟悉这些平台。

还有KGDB用于在裸硬件上调试内核。您通过其串行端口连接到目标计算机。我已经使用了一点,它可以工作,但VMware做得更好。现代内核已将KGDB合并到主线中,因此您无需修补。

这并没有完全回答你的问题,因为GDB本身并不是一个基于GUI的工具。您必须找到一些GUI调试器,它使用GDB的存根协议进行调试,或者使用可用的接口包装GDB。

答案 1 :(得分:1)

是的,如果你想要GUI,则需要虚拟化和kgdb。例如,VirtualBox运行linux,内核模块被调试,主机是另一个linux。

http://allmybrain.com/2010/04/29/debugging-linux-kernel-modules-with-virtualbox-and-kgdb/

我已经为Linux和OpenSolaris做过了,我必须说VirtualBox对于理解内核中发生的事情真的很棒。

答案 2 :(得分:0)

不知道任何基于 GUI 的调试实用程序,但到目前为止我从我的 SOC 内核角度使用了什么:

ftrace - 函数追踪器

互联网上的许多文档和教程。一些 herehere official。还有来自该工具主要作者、开发者和维护者 Steven Rostedt 的 youtube 上的视频。 您还可以使用 ftrace_printk 消息代替 dev_dbgdev_errdev_* 系列(也比默认 printk 更好)。

编译内核时必须启用以下这些

CONFIG_FUNCTION_TRACER
CONFIG_FUNCTION_GRAPH_TRACER
CONFIG_STACK_TRACER
CONFIG_DYNAMIC_FTRACE

包含的其他选项是 ftrace 的 KernelShark 前端。

IPC 日志记录(Qualcomm Linux 内核)

一些模块是使用 ipc 日志系统构建的。在内核构建中使用 CONFIG_IPC_LOGGING=y 启用。并从/sys/kernel/debug/ipc_logging/[module_name]

阅读

DMESG<​​/h3>

从内核日志 (dmesg) 的缓冲区读取消息,用于标准 printk 系列函数。在内核构建中启用 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=7 也很好。