基于AM335x的U-Boot/SPL 的CCS 调试
t的调试过程和SPL调试过程是类似的,这里主要说明不同的几点:
A. 从AM335x的启动过程可知,U-Boot是运行在DDR中的,而DDR是由SPL来初始化的,所以,加载U-Boot前,先加载并运行SPL。
B. 加载U-Boot 的image是 U-Boot。 这里U-Boot 是ELF格式的, 其包含了加载地址, symbol等信息,所以使用CCS 菜单 Run-》 Load-》 LoadProgram, 加载U-Boot 即可。加载成功后, 如下图所示:
如图所示, PC直接指到0x80100000地址了,也就是U-Boot的起始地址(入口)了,该地址是CCS从头ELF头里面得到的,其定义在CONFIG_SYS_TEXT_BASE(include/configs/am335x_evm.h)中。
C. 相对 SPL 的调试, U-Boot有个地方不同,即有代码的重载(code relocation), 重载后代码的在SOC上的memory map和编译出的memory map会有个偏移。这个过程是在函数relocate_code()中完成的。 relocate_code()函数是在board_init_f()中调用的,如果需要调试从调用该函数开始后面的代码,则加上偏移重载symbol。
在CCS的菜单, Run-》 Load -》 Add Symbols, 加载的image还是前面的U-Boot, data/code offset 都是0x9FF88000。 这里的offset是从gd-》relocaddr(arch/arm arch/arm/lib/board.c)得到的。设置界面如下:
注意到上述几点,然后就可以按照SPL的调试过程对U-Boot进行调试了。
4. 总结
关于用CCS+emulator对AM335x的U-Boot/SPL的调试就介绍完了。这里介绍的方法,包含了CCS+emulator调试的基本原则,不仅仅可以运用于U-Boot/SPL调试,也可以运用于Starterware,Kernel等调试。
- 基于TI AM335x的智能家居安防系统网关解决方案(10-06)
- 这款防水无人机为何这么贵,技术难点在哪?(04-10)
- 基于赛灵思(Xilinx) FPGA的DisplayPort设计与实现(10-23)
- 视频接口HDMI需要担心DisplayPort或MHL阵营吗?(05-27)
- 基于DisplayPort的解决方案实现多屏显示(05-21)
- OPPO R9s Plus上手评测:性价比超高!(11-13)