本文适用于Rockchip平台RK3566/RK3568/RK3588
RK3566/RK3568/RK3588的uboot固件格式是FIT格式由SPL负责引导。
U-Boot mainline支持的一种灵活性极高的固件格式。U-Boot、trust以及mcu等固件一起打包为 uboot.img。
uboot.img 的镜像文件的magic 为"d0 0d fe ed",用命令fdtdump uboot.img
可以查看固件头。
00000000 d0 0d fe ed 00 00 06 00 00 00 00 58 00 00 04 c4 |...........X....|
00000010 00 00 00 28 00 00 00 11 00 00 00 10 00 00 00 00 |...(............|
通常为了应对OTA升级过程断电等可能导致固件损坏的情况,uboot.img做了多备份打包。
固件 | 单份大小 | 打包份数 |
---|---|---|
FIT uboot.img | 2MB | 2 |
从上述表格可知,uboot.img 的大小默认是4MB。
单份大小和份数的修改方法:
具体代码修改如下:
@sys2_206:~/4_Android12_29_sdk/u-boot$ git diff
diff --git a/configs/rk3568_defconfig b/configs/rk3568_defconfig
index d2742454eb..1de98e7373 100644
//RK3568/RK3566平台
--- a/configs/rk3568_defconfig
+++ b/configs/rk3568_defconfig
@@ -218,3 +218,4 @@ CONFIG_RK_AVB_LIBAVB_USER=y
CONFIG_OPTEE_CLIENT=y
CONFIG_OPTEE_V2=y
CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION=y
+CONFIG_SPL_FIT_IMAGE_KB=3072
diff --git a/configs/rk3588_defconfig b/configs/rk3588_defconfig
index 49b75d6ff6..70ecc9d983 100644
//RK3588/RK3588S平台
--- a/configs/rk3588_defconfig
+++ b/configs/rk3588_defconfig
@@ -224,3 +224,4 @@ CONFIG_RK_AVB_LIBAVB_USER=y
CONFIG_OPTEE_CLIENT=y
CONFIG_OPTEE_V2=y
CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION=y
+CONFIG_SPL_FIT_IMAGE_KB=3072
@sys2_206:~/4_Android12_29_sdk/u-boot$ ./make.sh rk3568 --spl-new
拷贝编译出来的spl/u-boot-spl.bin到rkbin目录更新对应的spl文件
@sys2_206:~/4_Android12_29_sdk/u-boot$ cp spl/u-boot-spl.bin ../rkbin/bin/rk35/rk356x_spl_v1.12.bin
注意:每次同步RK的代码后都需要重新编译一次spl,避免被覆盖
uboot单份大小不够编译时会有如下报错:
********boot_merger ver 1.2********
Info:Pack loader ok.
pack loader okay! Input: /home2/liupingzhang/rk3566/RK3566_Android11.0_SDK_V1.1.1_Linux/rkbin/RKBOOT/RK3566MINIALL.ini
/home2/liupingzhang/rk3566/RK3566_Android11.0_SDK_V1.1.1_Linux/u-boot
ERROR: pack uboot.img failed! fit/uboot.itb actual: 2171904 bytes, max limit: 2097152 bytes