有什么方法可以调试Linux内核模块吗?
我正在寻找一个基于 GUI 的工具,例如用于用户进程的工具?
如果可以在虚拟机中运行内核,VMware Workstation 允许 GDB 连接到 VM 以调试正在运行的内核。 您可能可以对其他 VM 平台执行相同的操作,尽管我不熟悉这些平台。
还有用于在裸硬件上调试内核的 KGDB。 通过其串行端口连接到目标计算机。 我已经用了一点,它有效,但VMware做得更好。 现代内核已将 KGDB 合并到主线中,因此您无需修补。
这并不能完全回答您的问题,因为GDB本身并不是一个基于GUI的工具。 您必须找到一些使用 GDB 的存根协议进行调试或使用可用接口包装 GDB 的 GUI 调试器。
是的,如果你想要GUI,那么需要虚拟化和kgdb。 例如,VirtualBox运行Linux,内核模块要调试,主机是另一个Linux。
http://allmybrain.com/2010/04/29/debugging-linux-kernel-modules-with-virtualbox-and-kgdb/
我已经为Linux和OpenSolaris做了这件事,我必须说VirtualBox在理解内核中发生的事情方面非常出色。
不知道任何基于 GUI 的调试实用程序,但到目前为止,我从 SOC 内核的角度来看使用了什么:
ftrace - 函数跟踪器
互联网上的许多文档和教程。一些在这里和这里官方。还有来自Steven Rostedt的主要作者,开发人员和维护者的视频。您还可以使用ftrace_printk
消息代替dev_dbg
,dev_err
和dev_*
家庭(也比默认printk
更好)。
构建内核时必须启用这些波纹管
CONFIG_FUNCTION_TRACER
CONFIG_FUNCTION_GRAPH_TRACER
CONFIG_STACK_TRACER
CONFIG_DYNAMIC_FTRACE
包括的其他选项是用于ftrace的KernelShark前端。
IPC Logging (Qualcomm Linux kernel)
某些模块是使用 ipc 日志记录系统构建的。在内核构建时启用CONFIG_IPC_LOGGING=y
。并从/sys/kernel/debug/ipc_logging/[module_name]
中阅读
二甲基、二甲基和社会保障
从内核日志记录(dmesg
)的缓冲区读取消息,用于标准printk
系列函数。在内核构建上启用CONFIG_MESSAGE_LOGLEVEL_DEFAULT=7
也很好。