This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] Uboot启动调试建议

很多客户遇到uboot启动的问题,特别是自己制作的板子,下面给出几点调试的方法。

  1. 最有效的方法是使用JTAG和CCS来调试启动代码
  2. 在板子没有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__);