7

我正在开发一个嵌入式系统,该系统当前通过串行端口 1 上的控制台输出引导 linux(使用引导加载程序中的控制台引导参数)。但是,最终我们将使用这个串行端口。内核控制台输出的最佳解决方案是什么?/开发/空?是否可以以某种方式将其放在 pty 上,以便我们可以访问它?

4

2 回答 2

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中阅读更多相关信息

于 2008-09-30T03:59:17.500 回答
3

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

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

于 2008-09-30T04:26:58.480 回答