Linux 内核模块调试



有什么方法可以调试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_dbgdev_errdev_*家庭(也比默认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也很好。

最新更新