有没有调试Linux内核模块的方法?我正在寻找一个基于GUI的工具,如用于用户流程的工具?
答案 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 内核角度使用了什么:
互联网上的许多文档和教程。一些 here 和 here official。还有来自该工具主要作者、开发者和维护者 Steven Rostedt 的 youtube 上的视频。
您还可以使用 ftrace_printk
消息代替 dev_dbg
、dev_err
和 dev_*
系列(也比默认 printk
更好)。
编译内核时必须启用以下这些
CONFIG_FUNCTION_TRACER
CONFIG_FUNCTION_GRAPH_TRACER
CONFIG_STACK_TRACER
CONFIG_DYNAMIC_FTRACE
包含的其他选项是 ftrace 的 KernelShark 前端。
一些模块是使用 ipc 日志系统构建的。在内核构建中使用 CONFIG_IPC_LOGGING=y
启用。并从/sys/kernel/debug/ipc_logging/[module_name]
从内核日志 (dmesg
) 的缓冲区读取消息,用于标准 printk
系列函数。在内核构建中启用 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=7
也很好。