我正在编写一个内核模块,当使用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
。我正在编写一个内核模块,当使用insmod module.ko
加载时,希望能够在控制台输出一些信息。
我尝试使用
printk(KERN_EMERG "test kernel emergency\n");
cat /proc/sys/kernel/printk
显示 4 4 1 7
。1- 确保您处于完整终端模式下(按Alt + Ctrl + f1)
2- 尝试使用 printk(KERN_ALERT "test kernel alert\n");
代替 printk(KERN_EMERG "test kernel emergency\n");
Jens,
printk输出被发送到内核并由syslogd守护程序收集。 dmesg回显由syslogd守护进程收集的数据。
如果您正在使用Linux的图形版本,则此消息可能不会被打印在您调用insmod的控制台上。我已在Ubuntu中尝试过,即使日志级别为ALERT或EMERGENCY,也不会打印printk消息。
你需要修改你的系统日志(syslog)以将紧急内核消息打印到控制台(或特定用户或终端)。
有许多系统日志守护进程,如果你无法控制你使用的那个并且你不是root用户,那就没办法了。如果你能控制你使用的那个,syslog-ng非常好用,并且在它的手册中有如何实现这一功能的示例。
syslog-ng
。 - Jens Nyman