如何调试u-boot问题?

如何调试u-boot问题?

我正在致力于在 Beaglebone Black 上集成一个定制系统。大部分时间一切正常,但偶尔,系统在通电时会无法启动。当连接串行调试电缆时,这种情况永远不会发生(这样我就可以观看 u-boot 和内核消息。)

然而,我发现,在极少数失败的情况下,如果我连接串行电缆,我会发现我正处于 u-boot 提示符处。如果我手动设置 u-boot 来加载内核并从那里加载所有内容,我可以引导只是找到(它可以读取 eMMC 等)。

我的第一个想法是串行线路上存在某种噪音,导致 u-boot 中断(我相信默认情况下会在 2 秒内中断)。但是,我重新编译了 u-boot 以使用 0 秒延迟(不等待空格键),但这并没有解决问题。

在启动期间不连接串行电缆的情况下,如何找出 u-boot 停止的原因(因为这会使问题消失;Heisenbug)?我可以访问任何类型的日志记录吗?

答案1

我曾经有一块板,其中 uart RX 引脚接地。所以u-boot总是看到有按键按下。

不知道你用的是什么版本...

/common/autoboot.c

功能

static int abortboot_normal(int bootdelay)

在 return 之前添加一行

abort = 0;

这将返回没有按下任何键。

相关内容