查看内核 printk 调试信息

3

使用pr_debug("blah\n")消息时,消息不会显示在dmesg输出中。我已经将/proc/sys/kernel/printk设置为8 4 1 7。但是pr_alert消息可以正常显示。请问有什么想法吗?


https://www.kernel.org/doc/local/pr_debug.txt - Jeyaram
2个回答

2

若要使pr_debug实际输出内容,您需要定义DEBUG宏。

例如,如果添加以下代码行:

ccflags-y := -DDEBUG=1

将以下文本添加到模块的Makefile中,然后由该模块的任何源文件调用的pr_debug实际上会打印信息。


或者,如果未定义DEBUG宏但内核构建时启用了选项CONFIG_DYNAMIC_DEBUG,则可以动态控制哪个pr_debug调用实际上应该打印。

例如,在以root身份执行以下操作之后:

echo 'module my_module' > /sys/kernel/debug/dynamic_debug/control

所有从模块my_module调用的pr_debug都会实际打印信息。

有关动态调试的更多信息,请参见文档


1
这个答案是错误的。该语句对于pr_devel是正确的,对于pr_debug,也可以指定CONFIG_DYNAMIC_DEBUG。请参见https://www.kernel.org/doc/html/latest/core-api/printk-basics.html。 - spawn
@spawn:我已经更新了答案并添加了更多细节。 - Tsyvarev

1
如果要插入一个模块,使用选项例如 insmod hello.ko dyndbg=+p。请参阅内核树中的 Documentation/dynamic-debug-howto.txt
您还可能需要 CONFIG_DEBUG_KERNEL=y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接