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.

AM4378 uboot 调试



我使用ti-processor-sdk-linux-am437x-evm-03.00.00.04包里的uboot,修改了read_eeprom函数后,放在sd卡里,可以启动,但是观察串口输出,发现上电后等了3,4秒后才会有串口输出U-Boot SPL 版本号,日期等,之后uboot可以正常运行。为什么会需要这么长时间,这时第一个问题。

第二个问题,我使用CCS调试uboot可以单步调试,为什么加不了硬件断点。

  • 既然是放在sd卡里,那么肯定有个搬移运行的过程,需要时间。

    另外串口打印大量信息本身也较慢。

    可以单步调试自然是可以打断点的。

    可能你的target配置文件不对。

  • 我这是上电后等待3,4秒   串口才打印第一个信息。

    首先串口打印的第一个信息发生在spl_board_init()函数中。此时还没有load image,不存在搬移运行的问题吧,跟打印大量信息慢也没关系吧,我关心的是上电后程序为什么花了3,4才执行到spl_board_init(打印第一个信息的地方)。

    第二个问题可能是target配置文件不对具体是指什么,哪里不对,该怎么修改,源码配置文件我并没有修改。

  • 关于启动慢的问题,您可以查下启动循序,如果前面有usb启动或者网口启动,其查询的时间比较长,所以花时间,可以调整启动循序看看

  • 查到了是执行

    mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START,
    CONFIG_SYS_SPL_MALLOC_SIZE);

    这个函数用了6秒,初始化了一片内存区域,CONFIG_SYS_SPL_MALLOC_SIZE (16 << 20)  那这个内存区域的大小是根据什么计算出来的,这个函数占用的时间太长了。

  • 这个内存应该是存放uboot.img的,不过这部分一般不会用这么长时间的,因为所有平台的都会用到这个函数,其他的都不慢的。

    请问您是怎么确定是这个函数占用的时间长的

  • 我把spl_board_init();移到了void board_init_r(gd_t *dummy1, ulong dummy2)这个函数的最前面,串口就先被初始化了然后上电后很快就有了打印信息u-boot spl 2016.05

    using memory 0x80a80000-0x81a80000 for malloc();

    然后等了6秒,才有下一条打印信息。                 using memory 0x80a80000-0x81a80000 for malloc();这个信息就是在mem_malloc_init这个函数里面打印的。

  • 个人建议,你还是先核对一下,当前的DDR的参数相关配置,确认当前的DDR配置是正确的,时序也是优化的后,再做一轮测试,看看这里的malloc是不是还需要这么久的时间。

    http://processors.wiki.ti.com/index.php/AM437x_DDR_Configuration_and_Programming_Guide