我使用ti-processor-sdk-linux-am437x-evm-03.00.00.04包里的uboot,修改了read_eeprom函数后,放在sd卡里,可以启动,但是观察串口输出,发现上电后等了3,4秒后才会有串口输出U-Boot SPL 版本号,日期等,之后uboot可以正常运行。为什么会需要这么长时间,这时第一个问题。
第二个问题,我使用CCS调试uboot可以单步调试,为什么加不了硬件断点。
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.
我使用ti-processor-sdk-linux-am437x-evm-03.00.00.04包里的uboot,修改了read_eeprom函数后,放在sd卡里,可以启动,但是观察串口输出,发现上电后等了3,4秒后才会有串口输出U-Boot SPL 版本号,日期等,之后uboot可以正常运行。为什么会需要这么长时间,这时第一个问题。
第二个问题,我使用CCS调试uboot可以单步调试,为什么加不了硬件断点。
我这是上电后等待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