在Linux树的设备驱动程序源中,我看到dev_dbg(...)
和dev_err(...)
,在哪里可以找到记录的消息?
一个参考建议添加#define DEBUG
。另一个reference涉及动态调试和debugfs,我迷路了。
答案 0 :(得分:3)
dev_dbg()
根据编译标记扩展为dynamic_dev_dbg()
,dev_printk()
或无操作。
#if defined(CONFIG_DYNAMIC_DEBUG)
#define dev_dbg(dev, format, ...) \
do { \
dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \
} while (0)
#elif defined(DEBUG)
#define dev_dbg(dev, format, arg...) \
dev_printk(KERN_DEBUG, dev, format, ##arg)
#else
#define dev_dbg(dev, format, arg...) \
({ \
if (0) \
dev_printk(KERN_DEBUG, dev, format, ##arg); \
})
#endif
dynamic_dev_dbg()
和dev_printk()
致电dev_printk_emit()
,致电vprintk_emit()
。
当您执行printk()
时,在正常模式下调用此功能。请注意,dev_err()
之类的其他函数将以相同的函数结束。
因此,显然,缓冲区是完全相同的,即内核肾内缓冲区。
结尾处记录的消息将打印到
dmesg
命令来读取。注意,只要缓冲区中仍有空间,就会保留2中的数据。由于它是有限的和循环的,新的数据优先于旧的。
答案 1 :(得分:1)
您可以在内核消息中找到dev_err(...)
。顾名思义,dev_err(...)
消息是错误消息,因此,如果执行到这一点,则肯定会打印它们。 dev_dbg(...)
是调试消息,在内核驱动程序代码中使用较多,缺省情况下不会打印它们。因此,您所了解的关于dynamic_debugging的所有内容都将与dev_dbg(...)
一起发挥作用。
要进行动态调试,有几个先决条件,下面的1.和2.是动态调试的一般先决条件。 3.及更高版本适用于您特定的驱动程序/模块/子系统,可以是。
CONFIG_DYNAMIC_DEBUG=y
中。您可以检查是否为zgrep DYNAMIC_DEBUG /proc/config.gz
sudo mount | grep debugfs
进行检查,如果不存在,则可以使用sudo mount -t debugfs /sys/kernel/debug