![如何调试u-boot问题?](https://linux22.com/image/130969/%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95u-boot%E9%97%AE%E9%A2%98%EF%BC%9F.png)
我正在致力于在 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;
这将返回没有按下任何键。