目录
0. 前言
1. SPL
2. imximage.cfg
3. CONFIG_XX 与 条件编译
4. 总结:学会收敛问题
0. 前言
这次的工作主要是把某项目设备上的uboot版本从2017.09升级到2022.04,是作为该项目整个BSP升级计划的一部分。2017.09版本上的设备板级文件也要适当移植到2022.04版本上。
原来按照指导同事的估计,顶多需要三天,作者却花了将近一个月!当中弯路很多,记下以鉴后人!
1. SPL
SPL指的是 Second Program Loader,原本是为了简化uboot启动过程的工具。SPL加载的文件叫做u-boot.img...... 但这次首要的任务就是要去掉SPL,编译出u-boot.imx。我们的项目不需要多余的东西。但是纵观uboot的源代码, CONFIG_SPL_BUILD之类的条件编译比比皆是。选不选SPL,同一个函数就会进入另外的实现分支,可能会出现不能正确运作的问题。
去掉SPL,首先就要在 buildroot-menuconfig --> bootloader里面去掉 install SPL...(如果使用buildroot来构建uboot的话),再在uboot-menuconfig --> SPL/TPL 确保不选择 Enable SPL。其他有关SPL的选项也要注意配置。
2. imximage.cfg
在板级文件目录下,比如说./board/freecale/mx6slevk/,除了源文件、Makefile、Kconfig等,作者还第一次看到 imximage.cfg 文件。这种cfg文件其实是为了高效地批量地配置CPU寄存器而设置的。其中最关键的是里面的DCD(Device Configuration Data)部分:
/*
* Device Configuration Data (DCD)
*
* Each entry must have the format:
* Addr-type Address Value
*
* where:
* Addr-type register length (1,2 or 4 bytes)
* Address absolute address of the register
* value value to be stored in the register
*/
DATA 4 0x020c4018 0x00260324
DATA 4 0x020c4068 0xffffffff
DATA 4 0x020c406c 0xffffffff
DATA 4 0x020c4070 0xffffffff
DATA 4 0x020c4074 0xffffffff
DATA 4 0x020c4078 0xffffffff
DATA 4 0x020c407c 0xffffffff
DATA 4 0x020c4080 0xffffffff
DATA 4 0x020e0344 0x00003030
DATA 4 0x020e0348 0x00003030
DATA 4 0x020e034c 0x00003030
。。。。。。。
言简意赅的说明,什么寄存器要设什么值。本项目设备有个隐患是DDR不太稳定,这就需要设置DDR寄存器。
NXP有提供DDR压力设施工具,来测试DDR的表现,这个工具会给出DDR的几个寄存器应该的值,将这些值同步到cfg文件即可。作者还没试过此类DDR压力测试,采用的是老法师已经配好的cfg文件,名字改成 imximage.cfg,放在设备的板级文件夹下即可。
PS: 在 uboot-menuconfig里面要显示的声明DCD配置的地方,也就是放 imximage.cfg的地方。一般是 uboot-menuconfig --> ARM architecture --> DCD script, 或者是 uboot-menuconfig --> Boot images --> Extra Options。
3. CONFIG_XX 与 条件编译
CONFIG_MX6QDL
4. 总结:学会收敛问题
没有printf
缩小问题范围
排除无关项