【发布时间】:2014-12-12 08:55:33
【问题描述】:
有没有什么技巧或方法可以避免内核日志丢失或日志缓冲区溢出?
我已通过以下代码更改将日志缓冲区大小增加到最大值。我只在高端设备上运行。但是,当我想从我的驱动程序(写入大量日志)获取完整日志时,我看到 printk 日志有时会被丢弃。我使用带有 KERN_INFO 的 printk,通过动态调试(dprintk)启用。
改变我做的:
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -55,7 +55,7 @@ void asmlinkage __attribute__((weak)) early_printk(const char *fmt, ...)
{
}
-#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
+#define __LOG_BUF_LEN (1 << 17)
我用来写入文件的命令:
cat "/proc/kmsg">/sdcard/klog.txt
仅在调试时,如果我的驱动程序性能下降,我可以,但我不想丢弃任何日志。我知道我们不能让工作队列/线程等到打印完成。但是,仍然有任何方法可以保证日志不会被丢弃。
【问题讨论】:
-
# tail -f /var/log/messages > /tmp/tmplog.txt &是解决此问题的一种简单方法。
标签: logging linux-kernel linux-device-driver embedded-linux printk