【问题标题】:Where do you send the kernel console on an embedded system?您将嵌入式系统上的内核控制台发送到哪里?
【发布时间】:2008-09-30 03:45:54
【问题描述】:

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

【问题讨论】:

    标签: linux embedded


    【解决方案1】:

    如果您只想从控制台读取内核 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 中阅读更多相关信息

    【讨论】:

    • 感谢您的回答。在最终产品上,我想我可以将 netconsole 发送到 127.0.0.1,然后在需要时从 shell 中的端口读取
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 2013-07-13
      • 2021-06-29
      • 2020-08-15
      相关资源
      最近更新 更多