我使用ti-processor-sdk-linux-am437x-evm-03.00.00.04包里的uboot,修改了read_eeprom函数后,放在sd卡里,可以启动,但是观察串口输出,发现上电后等了3,4秒后才会有串口输出U-Boot SPL 版本号,日期等,之后uboot可以正常运行。为什么会需要这么长时间,这时第一个问题。
第二个问题,我使用CCS调试uboot可以单步调试,为什么加不了硬件断点。
HG:
既然是放在sd卡里,那么肯定有个搬移运行的过程,需要时间。
另外串口打印大量信息本身也较慢。
可以单步调试自然是可以打断点的。
可能你的target配置文件不对。
yuanyuan liu1:
回复 HG:
我这是上电后等待3,4秒 串口才打印第一个信息。
首先串口打印的第一个信息发生在spl_board_init()函数中。此时还没有load image,不存在搬移运行的问题吧,跟打印大量信息慢也没关系吧,我关心的是上电后程序为什么花了3,4才执行到spl_board_init(打印第一个信息的地方)。
第二个问题可能是target配置文件不对具体是指什么,哪里不对,该怎么修改,源码配置文件我并没有修改。
Yaoming Qin:
回复 yuanyuan liu1:
关于启动慢的问题,您可以查下启动循序,如果前面有usb启动或者网口启动,其查询的时间比较长,所以花时间,可以调整启动循序看看
yuanyuan liu1:
回复 Yaoming Qin:
查到了是执行
mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START, CONFIG_SYS_SPL_MALLOC_SIZE);
这个函数用了6秒,初始化了一片内存区域,CONFIG_SYS_SPL_MALLOC_SIZE (16 << 20) 那这个内存区域的大小是根据什么计算出来的,这个函数占用的时间太长了。
Yaoming Qin:
回复 yuanyuan liu1:
这个内存应该是存放uboot.img的,不过这部分一般不会用这么长时间的,因为所有平台的都会用到这个函数,其他的都不慢的。
请问您是怎么确定是这个函数占用的时间长的
yuanyuan liu1:
回复 Yaoming Qin:
我把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这个函数里面打印的。
Steven Liu1:
回复 yuanyuan liu1:
个人建议,你还是先核对一下,当前的DDR的参数相关配置,确认当前的DDR配置是正确的,时序也是优化的后,再做一轮测试,看看这里的malloc是不是还需要这么久的时间。
http://processors.wiki.ti.com/index.php/AM437x_DDR_Configuration_and_Programming_Guide