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

时间:2008-09-30 03:45:54

标签: linux embedded

我正在开发一个嵌入式系统,该系统目前使用串行端口1上的控制台输出启动linux(使用来自启动加载程序的控制台启动参数)。但是,最终我们将使用此串行端口。内核控制台输出的最佳解决方案是什么?的/ dev / null的?它可以以某种方式放在pty上,以便我们可以访问它吗?

2 个答案:

答案 0 :(得分:3)

如果您只想从控制台读取内核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

中详细了解相关信息

答案 1 :(得分:3)

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

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