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

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

使用KERN_INFO将打印到/var/log/messages,也许KERN_EMERG也会打印到该文件。 - Hohenheimsenberg
3个回答

8

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

2- 尝试使用 printk(KERN_ALERT "test kernel alert\n"); 代替 printk(KERN_EMERG "test kernel emergency\n");


3

Jens,

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

如果您正在使用Linux的图形版本,则此消息可能不会被打印在您调用insmod的控制台上。我已在Ubuntu中尝试过,即使日志级别为ALERT或EMERGENCY,也不会打印printk消息。


0

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

有许多系统日志守护进程,如果你无法控制你使用的那个并且你不是root用户,那就没办法了。如果你能控制你使用的那个,syslog-ng非常好用,并且在它的手册中有如何实现这一功能的示例。


请您能否给一个例子?作为非专业人士,我发现很难理解syslog-ng - Jens Nyman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接