• Rockchip Android修改uboot分区大小的方法


    Rockchip Android修改uboot分区大小的方法

    本文适用于Rockchip平台RK3566/RK3568/RK3588

    U-Boot固件

    RK3566/RK3568/RK3588的uboot固件格式是FIT格式由SPL负责引导。

    FIT 格式

    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  |...(............|
    
    • 1
    • 2

    通常为了应对OTA升级过程断电等可能导致固件损坏的情况,uboot.img做了多备份打包。

    固件单份大小打包份数
    FIT uboot.img2MB2

    从上述表格可知,uboot.img 的大小默认是4MB。

    单份大小和份数的修改方法:

    • FIT 格式:更改配置参数:CONFIG_SPL_FIT_IMAGE_KB 和 CONFIG_SPL_FIT_IMAGE_MULTIPLE。分别表示单份大小(单位:KB)和打包份数。

    具体代码修改如下:

    • 修改单份大小CONFIG_SPL_FIT_IMAGE_KB 为3MB
    @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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 更新spl文件
      以上修改后需要同步编译更新spl固件
    @sys2_206:~/4_Android12_29_sdk/u-boot$ ./make.sh rk3568 --spl-new 
    
    • 1

    拷贝编译出来的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
    
    • 1

    注意:每次同步RK的代码后都需要重新编译一次spl,避免被覆盖

    • 如果2份uboot的大小总和超过parameter.txt里面定义uboot分区大小(默认是8MB),需要在修改parameter里面的uboot分区大小。

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    这么简单,还不会使用java8 stream流的map()方法吗?
    HDC.Cloud Day | 全国首场上海站告捷,聚开发者力量造梦、探梦、筑梦
    基于SpringBoot的在线点餐系统【附源码】
    一文精通HashMap灵魂七问,你学还是不学
    质数判定与质数表的求解
    k8s部署gateway、nacos 、app通过网关访问app出现404
    Python学习笔记第四十五天(NumPy 排序、条件刷选函数)
    `useState` 和 `useImmer` 都是 React 中用于管理状态的钩子
    分布式锁:不同实现方式实践测评
    [科研琐事] 安装服务器的二三事
  • 原文地址:https://blog.csdn.net/weixin_43245753/article/details/125608150