gol*_*pot 6 linux-device-driver
在 Linux 树中的设备驱动程序源中,我看到dev_dbg(...)和dev_err(...),我在哪里可以找到记录的消息?
一个参考建议添加#define DEBUG. 另一个参考涉及动态调试和调试,我迷路了。
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
Run Code Online (Sandbox Code Playgroud)
dynamic_dev_dbg()并dev_printk()调用dev_printk_emit()which 调用vprintk_emit()。
当您只执行printk(). 在这里请注意,其余的函数dev_err()会在同一个函数中结束。
因此,显然,缓冲区都是相同的,即内核内部缓冲区。
最后记录的消息打印到
dmesg命令读取的内部缓冲区。请注意,只要缓冲区中还有空间,就会保留 2 中的数据。由于它是有限的和循环的,新的数据会抢占旧的数据。
附加信息如何启用动态调试。
首先,确定你CONFIG_DYNAMIC_DEBUG=y在内核中有配置。
假设我们希望在名为8250的内置模块中启用所有调试打印。为了实现这一点,我们简单地将以下内容添加到内核命令行中8250.dyndbg=+p。
如果相同的驱动程序被编译为可加载模块,我们可以手动添加options 8250 dyndbg到modprobe配置或 shell 命令行,例如modprobe 8250 dyndbg.
动态调试文档中描述了更多详细信息。
| 归档时间: |
|
| 查看次数: |
5024 次 |
| 最近记录: |