Linux kernel 内核动态调试输出

Linux kernel 内核动态调试输出,linux-kernel,ubuntu-16.04,printk,Linux Kernel,Ubuntu 16.04,Printk,我试图查看在内核模块中使用dev_err()函数编写的日志消息,我尝试了sudodmesg-n7和echo8>/proc/sys/kernel/printk 他们都没有开始将dev_err消息打印到dmesg 我还注意到内核源代码中的dev_err函数为空: 包括/linux/device.h 我也尝试过echo-n'module+p'>/sys/kernel/debug/dynamic\u debug/control(debugfs已安装并且dynamic\u debug/control已存在

我试图查看在内核模块中使用
dev_err()
函数编写的日志消息,我尝试了
sudodmesg-n7
echo8>/proc/sys/kernel/printk
他们都没有开始将
dev_err
消息打印到
dmesg

我还注意到内核源代码中的dev_err函数为空:

包括/linux/device.h

我也尝试过
echo-n'module+p'>/sys/kernel/debug/dynamic\u debug/control
debugfs
已安装并且
dynamic\u debug/control
已存在),出于某种原因,当我
cat
dynamic\u debug/control和
grep
模块名时,我认为这是主要问题,例如:

$ echo -n "file include/net/bluetooth/hci_core.h +p" > /sys/kernel/debug/dynamic_debug/control
此命令不会将
include/net/bluetooth/hci_core.h
添加到
/sys/kernel/debug/dynamic_debug/control

为什么?

(我使用的是ubuntu 16.04.2 LTS,内核4.8.0-36-generic)

如何将
dev_err
日志消息打印到
dmesg

谢谢。

只有当
CONFIG\u PRINTK
未定义时,它才为空。它是默认定义的。
CONFIG\u PRINTK=y
在我的buildin linux源代码中,它也是空的
https://github.com/torvalds/linux/blob/master/include/linux/device.h
如果您使用
CONFIG\u PRINTK=y
构建,我不知道为什么在
dmesg中什么也得不到。在这种情况下,应该使用“drivers/core.c”中的
dev_err
定义。(请注意,
dev_err
函数是由宏调用
define_dev_printk_level(dev_err,KERN_err);
在“drivers/core.c”中定义的,如果
CONFIG_printk
已定义,“include/linux/device.h”中的内联定义仅在
CONFIG_printk
未定义的情况下使用。)您至少可以尝试将问题一分为二。在内核模块二进制文件上使用
strings
命令查看消息文本是否嵌入。或者查看预处理器的输出。
$ echo -n "file include/net/bluetooth/hci_core.h +p" > /sys/kernel/debug/dynamic_debug/control