我正在编写内核模块,我希望能够在使用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
答案 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非常好,并在其手册中提供了如何执行此操作的示例。