内核模块:如何获得控制台输出?

时间:2012-02-22 12:42:02

标签: linux kernel-module printk

我正在编写内核模块,我希望能够在使用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

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:3)

延,

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

如果您使用的是图形版本的linux,则您的控制台(您调用insmod的地方)可能无法打印此消息。我在ubuntu中尝试了这个,即使日志级别为ALERT或EMERGENCY,它也不会打印printk消息。

答案 2 :(得分:0)

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

有许多系统日志守护进程,如果你不控制你使用的守护进程并且你不是root用户 - 你运气不好。如果您确实控制了您使用的那个,那么syslog-ng非常好,并在其手册中提供了如何执行此操作的示例。