你在哪里发送embedded式系统上的内核控制台?

我正在开发一个embedded式系统,当前在串口1上使用控制台输出引导Linux(使用引导加载程序的控制台引导参数)。 但是,最终我们将会使用这个串口。 内核控制台输出的最佳解决scheme是什么? 的/ dev / null的? 它可以以某种方式放在一个pty上,以便我们可以访问它吗?

如果您只想从控制台读取内核printk消息,而不是实际运行getty或shell,则可以使用netconsole。 您可以将以下内容提供给引导加载程序内核选项(或modprobe netconsole):

netconsole=4444@10.0.0.1/eth1,9353@10.0.0.2/12:34:56:78:9a:bc 

其中4444是本地端口,10.0.0.1是本地ip,eth1是发送消息的本地接口。 9353是远程端口,10.0.0.2是发送消息的远程IP,最后一个参数是远程(例如:您的桌面)系统的MAC地址。

然后查看运行的消息:

 netcat -u -l -p 9353 

您可以在Documentation / networking / netconsole.txt中阅读更多关于此的信息

您可以使用dmesg从shell中访问printk消息缓冲区。 内核缓冲区的大小是有限的,会覆盖最近的最旧的条目,因此您需要定期检查dmesg,或者像@bmdhacks建议的那样连接netconsole。

如果没有控制台,你会错过内核崩溃打印出的任何oops信息。 即使使用netconsole可能也无济于事,如果内核在TCP管理将输出传送到远程套接字之前死亡并开始重新启动。 我们通常修改kernel / panic.c:panic()来将寄存器内容和其他状态保存到NOR闪存的一个区域,所以至少会有一些信息用于验尸调试。