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()将以相同的功能结束。
因此,显然,缓冲区都是相同的,即内核内部缓冲区。
最后记录的消息打印到
  • 当前控制台如果内核 日志级别 值(可以通过内核命令行或通过 procfs 更改)对于某些消息来说足够高,这里是 KERN_DEBUG。
  • 可以通过运行 dmesg 读取的内部缓冲区命令。

  • 请注意,只要缓冲区中还有空间,就会保留 2 中的数据。由于它是有限且循环的,因此较新的数据会抢占旧数据。
    如何启用动态调试的附加信息。
    首先,确保你有 CONFIG_DYNAMIC_DEBUG=y在内核配置中。
    假设我们想在名为 8250 的内置模块中启用所有调试打印。为了实现这一点,我们简单地在内核命令行中添加以下 8250.dyndbg=+p .
    如果相同的驱动程序被编译为可加载模块,我们可以添加 options 8250 dyndbg手动操作时,到 modprobe 配置或 shell 命令行,如 modprobe 8250 dyndbg .
    Dynamic Debug 中描述了更多详细信息。文档。


    标签:linux
    声明

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    关注我们

    一个IT知识分享的公众号