linux-device-driver之dev_dbg 将日志写入哪里
yjmyzz
阅读:22
2025-01-19 22:14:33
评论:0
在 Linux 树的设备驱动程序源中,我看到了 dev_dbg(...)
和 dev_err(...)
,我在哪里可以找到记录的消息?
一位引用建议添加 #define DEBUG
.其他reference涉及动态调试和调试文件,我迷路了。
请您参考如下方法:
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 中的数据。由于它是有限且循环的,因此较新的数据会抢占旧数据。
如何启用动态调试的附加信息。
首先,确保你有
CONFIG_DYNAMIC_DEBUG=y
在内核配置中。
假设我们想在名为 8250 的内置模块中启用所有调试打印。为了实现这一点,我们简单地在内核命令行中添加以下
8250.dyndbg=+p
.
如果相同的驱动程序被编译为可加载模块,我们可以添加
options 8250 dyndbg
手动操作时,到 modprobe 配置或 shell 命令行,如
modprobe 8250 dyndbg
.
Dynamic Debug 中描述了更多详细信息。文档。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。