dev_dbg在哪里写入日志?
问题描述:
在Linux树中的设备驱动程序源代码中,我看到了dev_dbg(...)
和dev_err(...)
,我在哪里可以找到记录的消息?dev_dbg在哪里写入日志?
一个参考文献建议添加#define DEBUG
。其他reference涉及动态调试和调试,我迷路了。
答
dev_dbg()
根据编译标志展开为dynamic_dev_dbg()
,dev_printk()
或no-op。
#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()
将以相同的功能结束。
因此,显然,缓冲区都是一样的,即内核intrenal缓冲区。
在结束记录的消息被打印到
- 当前控制台如果内核记录级值(可通过内核命令行或者通过procfs的改变)是一定的消息,这里KERN_DEBUG足够高。
- 可通过运行
dmesg
命令读取的内部缓冲区。
请注意,只要缓冲区中还有空间,数据将保留2。由于它是有限的和循环的,所以新的数据抢占了旧数据。