我正在尝试调试 Linux 驱动程序,并且一段特定的代码表现得非常奇怪。为了了解发生了什么,我用 printk 语句填充了代码,这样我就可以准确地看到我感兴趣的变量在代码执行时做了什么。不幸的是,当打印带有大量行的环形缓冲区时,dmesg
它似乎随机丢失。谷歌告诉我这是因为我一次向环形缓冲区写入了太多数据。我尝试将环形缓冲区大小增加到最大值(1 << 21),并且尝试插入 udelays 来减慢写入速度,但我仍然遇到同样的问题。
我还能尝试什么?
答案1
据我所知,klogd
使用阻塞read()
来读取/proc/kmsg
.如果您通过 renice 提高其优先级,可能会有所帮助。您还可以尝试将内核日志写入 ramfs/tmpfs 以节省一些磁盘开销,可以通过syslog
或 withklogd
的 -f
选项直接写入文件。
否则,B计划是追踪和trace_printk()
:http://lwn.net/Articles/365835/