8

我正在编写一个内核模块,我希望能够在使用insmod module.ko.

我尝试使用

printk(KERN_EMERG "test kernel emergency\n");

但我的控制台上什么也没有出现。然而,它确实出现在dmesg.

额外信息:
我正在使用带有 linux-3.0.0 的 Intel x86 32 位

cat /proc/sys/kernel/printk给出4 4 1 7

4

3 回答 3

8

1-确保您处于完整终端模式(按 Alt+Ctrl+f1)

2-而不是printk(KERN_EMERG "test kernel emergency\n"); 尝试

printk(KERN_ALERT "test kernel alert\n");

于 2012-04-13T11:12:39.490 回答
3

延斯,

printk 输出被发送到内核并由 syslogd 守护进程收集。dmesg 回显 syslogd 守护程序收集的数据。

如果您使用的是图形版本的 linux,您的控制台(从您调用 insmod 的位置)可能不会打印此消息。我已经在 ubuntu 中尝试过了,即使日志级别是 ALERT 或 EMERGENCY,它也不会打印 printk 消息。

于 2012-07-02T06:26:53.530 回答
0

您需要修改系统日志以将紧急内核消息打印到控制台(或特定用户或 tty)。

有许多 syslog 守护程序,如果您不控制您使用的守护程序并且您不是 root,那么您就不走运了。如果你确实控制了你使用的那个,syslog-ng 非常好,并且在它的手册中有如何做到这一点的例子。

于 2012-02-22T12:47:20.737 回答