很多客户遇到uboot启动的问题,特别是自己制作的板子,下面给出几点调试的方法。
- 最有效的方法是使用JTAG和CCS来调试启动代码
- 在板子没有JTAG的情况下,可通过增加打印信息来定位。
- 配置早期debug uart
- 由于驱动以及其他依赖因素,通常只有在SPL顺利启动console uart才会有打印输出信息,因此很难定位调试早期启动代码例如PMIC配置,clock配置,DDR配置等。
- 为了使启动更顺利推荐在开发阶段配置uboot的debug UART,这样在early_system_init就会使能uart
- 通常debug UART要与console uart相同
- 在使用相应debug UART前请注意配置pinmux
board.c -> set_uart_mux_conf
-
- 使能debug UART
在Kconfig中添加以下配置参数(以UART0为例):
CONFIG_DEBUG_UART_BASE=0x44e09000
CONFIG_DEBUG_UART_CLOCK=48000000
CONFIG_DEBUG_UART=y
CONFIG_DEBUG_UART_OMAP=y
CONFIG_DEBUG_UART_SHIFT=2
CONFIG_DEBUG_UART_ANNOUNCE=y
如果使用的是其他UART,需要修改 CONFIG_DEBUG_UART_BASE 的地址,可以通过技术手册来查看相关UART的及地址。
- 在UBOOT源码中已经包含了许多debug()调试信息,因此可以在源文件的顶部添加#define DEBUG 来获取更多的调试信息
- 除此之外,在整个引导流程中添加打印语句以跟踪执行代码可能会有所帮助。
例如添加以下简单的语句:
printf("%s: %d:\n", __func__, __LINE__);