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