【问题标题】:prepanding kernel log with u-boot log使用 u-boot 日志准备内核日志
【发布时间】:2016-10-19 11:19:10
【问题描述】:

我们正在使用基于 beaglebone black 的定制板,

我正在尝试检查我们可以使用 u-boot 引导日志准备内核日志的可能性。
这是必需的,因为在电路板的制造和编程期间,我们会运行一些测试,我们需要捕获 u-boot 引导日志以获取测试日志和串行端口上的测试结果。由于客户板上没有安装串行端口,因此无法收集引导日志,

我在 google 中找到了 u-boot 的 CONFIG_LOGBUFFER 选项,但我不明白如何使用它。

我找到了以下链接,但“如何使用”不清楚
http://lists.denx.de/pipermail/u-boot/2004-August/006511.html
https://lkml.org/lkml/2009/1/21/250

有人可以帮助了解我是否走在正确的道路上吗?选项的任何简单解释?

提前谢谢你!

【问题讨论】:

    标签: linux logging embedded-linux u-boot


    【解决方案1】:

    我记得,在 5 到 10 年前,U-Boot 日志缓冲区接口仅适用于 DENX linux 内核树。它可能仅限于几个平台,您在上面有一些链接。 linux 内核端的补丁没有进入主线,所以即使在当时也很难开始工作。

    然后在 3.5 内核左右,printk 接口是redesigned 以记录面向输出。在我看来,这使得 CONFIG_LOGBUFFER 完全死了,没有进行大规模的重新设计。

    对于您描述的目标,应该有更好的选择。如果您的目标有以太网,U-Boot NETCONSOLE 可以工作。如果您的目标具有 JTAG,则制造测试可以使用它(您可以归咎于硬件设计),这可能会打开许多​​ hacky 但有效的选项,例如 U-Boot MEMCONSOLE。 U-Boot POST 不受欢迎,但您可以向save its results to environment variable 添加一些代码,这对我有用。

    【讨论】:

    • 谢谢乔的回复,你说得对,LOGBUFFER 补丁没有应用。我们正在 SPL 中运行 EEPROM、RAM 和 NAND 测试,我不确定届时是否会分配 IP,我们是否可以使用 NETCONSOLE,我会检查 NETCONSOLE。我们将结果以标志的形式保存在 EEPROM 中,但有时会发生 EEPROM 损坏,因此我们需要以某种方式测试日志。
    • 一个问题,是否可以在加载 u-boot 之前用 SPL 编写文件并通过 tftp 将其发送到主机 pc ?
    • 标准 U-Boot tftp 是文件接收。 CONFIG_CMD_TFTPPUT 确实进入了主线 U-Boot。但是,DHCP + NET + TFTPPPUT、创建文件等可能不符合通常使用 SPL 的约束条件。
    • 感谢您的回复 Joe,我同意如果我们将 SPL 变大,它甚至可能不适合内部 RAM,但是即使在启用上述配置并将其变大(如果它适合内部 RAM)之后,我们在制造 SPL 中需要此配置。 Mfg SPL 将通过 tftp 加载,只是为了测试和首次启动板和闪存二进制文件,并且 SPL 的较小副本在 NAND 上闪存。现在我唯一关心的是,如何从 SPL 创建文件,因为我没有看到任何允许我在 RAM 上写入文件的配置。那么有没有办法在 SPL/U-Boot 中创建文件呢?
    • 我可以在 u-boot 中启用 tftpput 并将 RAM 数据作为文件传输到 PC,现在我只需要将测试结果从 SPL 放到 RAM 中,我会保持更新这篇文章。 tftpput 进度见链接tftpput usage
    【解决方案2】:

    警告!!!

    我没有使用此功能。

    CONFIG_LOGBUFFER 是内核配置标志。所以用CONFIG_LOGBUFFER=y 编译你的内核。这种外部日志支持将在您的内核中启用。

    确保内核具有该配置。如果没有,请将此补丁应用到您的内核并尝试。

    【讨论】:

    • 感谢您的回复,在我的内核中我没有 CONFIG_LOGBUFFER,我认为补丁是旧的,主要用于 powerpc 架构。申请失败:(
    【解决方案3】:

    好吧,我无法实现我所提出的问题,但我可以提取日志(测试日志而不是完整的 SPL 日志)。

    测试日志对于我们在制造测试期间找出故障硬件单元的测试结果非常重要。

    所以我采用的解决方案如下,

    1. 除了在终端上打印结果外,我还把它们写在了特定的 RAM 位置,例如 SPL 中的 0x80900000。(显然它应该在 RAM 初始化之后完成。)
    2. 然后从 u-boot 使用 tftpput 读取和发送此 RAM 位置值。见tftpput command's usage
    3. 为了日志文件名的唯一性,我使用 mac-id 作为 u-boot 环境变量中设置的文件名。

    我相信我们可以实现我在我的问题中提出的问题,但目前我们对我实现的短期解决方案感到满意:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 2022-10-20
      • 1970-01-01
      相关资源
      最近更新 更多