printx消息未显示在dmesg日志中

时间:2017-12-22 10:33:05

标签: linux linux-kernel linux-device-driver dmesg

我正在开发一个简单的驱动程序以获得乐趣,我正在尝试使用printk消息进行调试。似乎dmesg没有显示最后一条printk消息,并且让它显示最后一条消息的唯一方法是执行另一个printk,而后者又被吞下dmesg

澄清的一些例子: 在我的模块的init函数中,我打印以下语句:

printk(KERN_INFO "%s loaded with major: %u, minor: 0", ...);

在启动后第一次insmod之后,我看到一条带有dmesg的“污染的内核”消息,但是我看不到我打印的消息。

然后,我运行以下命令:

cat /dev/mymodule

调用我打印的open函数:

printk(KERN_DEBUG "%s opened", ...);

然后调用我打印的read函数:

printk(KERN_DEBUG "%s reading", current->comm);

然后进入睡眠状态。运行dmesg后(当读取函数休眠时),我可以突然看到我的模块初始化消息,我也可以看到“cat opened”消息,但是“cat reading”消息丢失了。

使用ctrl + c终止cat会导致两次打印:“sleep interrupted”,然后“cat released”。运行dmesg显示“睡眠中断”消息,但“cat released”消息丢失,依此类推。

有谁知道问题可能是什么?

1 个答案:

答案 0 :(得分:1)

您应该在每个printk消息的末尾添加\ n,以免丢失dmesg中的任何日志。这样可以解决您的问题。