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", ...);
在启动后第一次 insmod
ing 后,我看到一条带有 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 中的任何日志。这将解决您的问题。
我正在开发一个简单的驱动程序,只是为了好玩,我正在尝试使用 printk
消息对其进行调试。似乎 dmesg
没有显示最后一条 printk
消息,让它显示最后一条消息的唯一方法是再做一个 printk
,这又被吞没了dmesg
.
一些示例说明: 在我模块的初始化函数中,我打印了以下语句:
printk(KERN_INFO "%s loaded with major: %u, minor: 0", ...);
在启动后第一次 insmod
ing 后,我看到一条带有 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 中的任何日志。这将解决您的问题。