Uboot: v2017.02
Board: Firefly-RK3399
RK Uboot有两种类型的固件生成方式。
一种是uboot作为first level bootloader,那么uboot就只有一个bin文件,例如rk3288平台的就是RK3288UbootLoader_V2.30.10.bin
另外一种是uboot作为second level bootloader,那么uboot就只是一个image, 例如rk3399平台的就是uboot.img
是否作为second level bootloader通过宏CONFIG_SECOND_LEVEL_BOOTLOADER来控制,在rk3399_defconfig中有定义。
CONFIG_SYS_EXTRA_OPTIONS="RKCHIP_RK3399,PRODUCT_MID,NORMAL_WORLD,SECOND_LEVEL_BOOTLOADER,BAUDRATE=1500000"
如果有定义了CONFIG_MERGER_MINILOADER(事实上CONFIG_SECOND_LEVEL_BOOTLOADER定义后此宏也就被打开了),Uboot会合并mini loader bin和配置。
Makefile中实现:
ifdef CONFIG_SECOND_LEVEL_BOOTLOADER
$(if $(CONFIG_MERGER_MINILOADER), ./tools/boot_merger ./tools/rk_tools/RKBOOT/$(RKCHIP)MINIALL.ini &&) \
$(if $(CONFIG_MERGER_TRUSTIMAGE), ./tools/trust_merger $(if $(CONFIG_RK_TRUSTOS), --subfix) \
./tools/rk_tools/RKTRUST/$(RKCHIP)TRUST.ini &&) \
$(if $(CONFIG_MERGER_TRUSTOS), ./tools/loaderimage --pack --trustos $(RK_TOS_BIN) trust.img &&) \
./tools/loaderimage --pack --uboot u-boot.bin uboot.img
else
./tools/boot_merger --subfix "$(RK_SUBFIX)" ./tools/rk_tools/RKBOOT/$(RKCHIP).ini
endif # CONFIG_SECOND_LEVEL_BOOTLOADER
解析之后对应的ini文件是 tools/rk_tools/RKBOOT/RK3399MINIALL.ini
使用的mini loader bin文件是 tools/rk_tools/bin/rk33/rk3399_miniloader_v1.06.bin
最终输出文件是 rk3399_loader_v1.08.106.bin