Linux kernel printk-显示在消息日志中,但不显示在任何内核日志级别的终端中

Linux kernel printk-显示在消息日志中,但不显示在任何内核日志级别的终端中,linux-kernel,kernel,Linux Kernel,Kernel,我正在做一些内核修改,并试图让printk将信息输出回控制台。我通过它传递任何内核日志级别,即使是最高日志级别,也不会在控制台上正确地得到任何响应 我检查过了,printk的当前日志配置是47 它每次都正确地打印到日志中。我可以使用dmesg | less并将其附加到日志中。但我无法使用printk将其正确返回到控制台 我不确定这是否重要,但我使用SSH连接到一台远程机器,在那里有修改过的内核 我已经从gnome终端和Windows中的putty尝试了SSH。两者都不能改变一件事。仍然在服务器日

我正在做一些内核修改,并试图让printk将信息输出回控制台。我通过它传递任何内核日志级别,即使是最高日志级别,也不会在控制台上正确地得到任何响应

我检查过了,printk的当前日志配置是47

它每次都正确地打印到日志中。我可以使用dmesg | less并将其附加到日志中。但我无法使用printk将其正确返回到控制台

我不确定这是否重要,但我使用SSH连接到一台远程机器,在那里有修改过的内核

我已经从gnome终端和Windows中的putty尝试了SSH。两者都不能改变一件事。仍然在服务器日志中显示printk,但在我的控制台上不显示


有没有办法把它放到控制台上?如果我尝试了每一个日志级别,但都没有成功,那么会出现什么问题?谢谢

我认为prink只会记录到物理控制台,如果您想通过任意TTY监控内核输出,那么您需要使用tail来监控syslog写入的文件,或者像xconsole这样的应用程序专门监视/dev/console的消息。

我相信一些变体不需要进行内核修改,也可以通过登录/dev/console来支持这一点。您试图修改内核来实现这一点,有什么特别的原因吗?我想有一个更简单的方法。

一些发行版修补了printk,这样它就不会出现了(Red Hat是第一个,Ubuntu也会这么做)-你可能遇到了这个问题。

如果是为了调试-只需跟踪
/var/log/messages
。如果您需要内核模块的稳定输出,请在
/proc
下创建一个char设备或文件,并从中读取userland进程。

只是为了确保,您处于init级别3(文本模式)中,不是吗?如果您已运行startx并在图形模式下工作,则不会在终端上看到内容。

尝试使用

dmesg -wH &
强制打印到dmesg的所有内核消息(以及Ctrl+Alt+F1等虚拟终端,具体取决于您的/proc/sys/kernel/printk日志级别和消息级别)也出现在SSH或GUI控制台上:Konsole、Terminal或您正在使用的任何东西!并且,如果您只需要监视特定消息:

dmesg -wH | grep ERR &
我用它来监视“错误”消息,比如

printk(KERN_EMERG "ERROR!\n");

我是从我的司机那里打印出来的

你能详细说明一下尾巴吗?我在其他地方看到过它,但我不确定如何通过c代码调用它。基本上,我在linux中创建了一个新的系统调用,并使用一个用户应用程序来调用系统调用。系统调用使用printk进行输出。在完成系统调用后,是否可以通过我的应用程序调用您提到的tail函数?再次感谢。tail不是一个函数,它是一个shell命令。尝试打开另一个连接(或屏幕窗口,或以其他方式),并使用“tail-f/var/log/dmesg”,因为我正在linux中进行一个新的系统调用,它的部分工作将是向控制台输出信息。我正在使用printk输出信息,这就是我遇到的问题。printk需要发送到控制台,因为我无法访问常规printf