printk 消息未显示在 dmesg 日志中

printk messages not showing up in dmesg log

我正在开发一个简单的驱动程序,只是为了好玩,我正在尝试使用 printk 消息对其进行调试。似乎 dmesg 没有显示最后一条 printk 消息,让它显示最后一条消息的唯一方法是再做一个 printk,这又被吞没了dmesg.

一些示例说明: 在我模块的初始化函数中,我打印了以下语句:

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

在启动后第一次 insmoding 后,我看到一条带有 dmesg 的 "tainted kernel" 消息,但是我看不到我打印的消息。

然后,我运行下面的命令:

cat /dev/mymodule

调用我的 open 函数打印:

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

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

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

然后就去睡觉了。在 运行ning dmesg 之后(当读取函数休眠时),我突然可以看到我的模块初始化消息,我也可以看到 "cat opened" 消息,但是 "cat reading" 消息不见了。

用 ctrl+c 终止 cat 会导致两次打印:"sleep interrupted",然后是 "cat released"。 运行 dmesg 显示 "sleep interrupted" 消息,但缺少 "cat released" 消息,依此类推。

有人知道问题出在哪里吗?

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