Rockchip Uboot 单独编译烧写 RK3399 RV1126 RK3588 RKdevtool rkbin

本文详细介绍了如何在Rockchip平台上编译Uboot,包括获取源码、配置、工具链设置,以及使用make.sh进行编译、打包、烧写的过程。还提供了针对不同平台如rv1126和rk3399pro的具体实例。
摘要由CSDN通过智能技术生成

Rockchip Uboot 单独编译烧写

  • 本文主要介绍 RK Uboot 的编译烧写以及相关构建脚本。

准备工作

  • 源码准备:

    • 从官方获取:git clone https://github.com/rockchip-linux/u-boot.git
    • 从开发板厂商提供的 SDK 中拷贝:cp -rfp sdk/u-boot .
  • rkbin 准备(U-Boot依赖):

    • 从官方获取:git clone https://github.com/rockchip-linux/rkbin.git
    • 从开发板厂商提供的 SDK 中拷贝:cp -rfp sdk/rkbin .
  • 工具链准备(以 gcc 10.3 64 位为例):

  • 目录准备:

    mv rkbin u-boot/
    mkdir -p u-boot/toolchain
    mv gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/ u-boot/toolchain/
    

make.sh

  • make.sh既是一个编译脚本,也是一个打包、调试工具。可用于反汇编、打包固件。

    // 帮助命令
    ./make.sh help
    
    // 编译
    ./make.sh board  // 根据 board_defconfig 配置构建固件
    ./make.sh env    // 生成 fw_printenv 工具
    
    // 输出
    在当前目录输出构建产物,包括 uboot/trust/loader images
    
    // 打包固件
    ./make.sh uboot  // 打包 uboot
    ./make.sh trust  // 打包 trust
    ./make.sh loader // 打包 loader
    
    // 反汇编
    ./make.sh elf  // 反汇编 elf 文件,默认使用-D参数
    ./make.sh map  // 打开u-boot.map
    ./make.sh sym  // 打开u-boot.sym
    

修改 make.sh

  • 修改 RKBIN_TOOLSRKBIN_TOOLS=rkbin/tools
  • 如果存在 TOOLCHAIN_ARM64,则修改 TOOLCHAIN_ARM64toolchain/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin
  • 如果存在 CROSS_COMPILE_ARM64,则修改 CROSS_COMPILE_ARM64toolchain/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin

make.sh 与 rkbin 的联系

  • rkbin:用于存放 RK 不开源的 bin、脚本、打包工具。U-Boot 编译时会从该仓库索引相关文件,打包生成 loader、trust、uboot 固件。
  • rkbin/RKBOOT/xxx.ini 文件以及 rkbin/RKTRUST/xxx.ini 文件指定了需要打包的固件。
  • make.sh 中通过语句 ${RKBIN}/RKBOOT/${RKCHIP_LOADER}MINIALL.ini 指定要使用的 ini 文件,RKCHIP_LOADER 一般为平台名。以 rk3588 为例,使用的 ini 文件即为 rkbin/RKBOOT/RK3588MINIALL.ini

固件编译

  • 以 rv1126 为例,执行命令 ./make.sh rv1126,实际使用的配置文件为./configs/rv1126_defconfig

编译产物

  • 编译输出,以 rv1126 为例:

    // fit 格式固件打包过程以及引用的 ini 文件
    FIT description: FIT Image with U-Boot/OP-TEE/MCU
    Created:         Wed Oct 18 15:43:39 2023
     Image 0 (uboot)
      Description:  U-Boot (32-bit)
     Image 1 (optee)
      Description:  OP-TEE
     Image 2 (fdt)
      Description:  U-Boot dtb
     Default Configuration: 'conf'
     Configuration 0 (conf)
      Description:  rv1126-evb
    pack loader ok.(rv1126_spl_loader_v1.08.108.bin)(0.01)
    pack loader okay! Input: /home/ubuntu/rv1126/uboot/rv1126_uboot_v2017.9/rkbin/RKBOOT/RV1126MINIALL.ini
    /home/ubuntu/rv1126/uboot/rv1126_uboot_v2017.9
    
    // uboot打包过程以及引用的 ini 文件
    Image(no-signed, version=0):  uboot.img (FIT with uboot, trust...) is ready
    Image(no-signed):  rv1126_spl_loader_v1.08.108.bin (with spl, ddr, usbplug) is ready
    pack uboot.img okay! Input: /home/ubuntu/rv1126/uboot/rv1126_uboot_v2017.9/rkbin/RKTRUST/RV1126TOS.ini
    
  • 对于前级 loader 闭源的 uboot,以 rk3399pro 为例,其输出产物为:

    • rk3399pro_loader_vx.xx.xxx.bin
    • idbloader.img
    • uboot.img
    • trust.img
    • 一般将 rk3399pro_loader_vx.xx.xxx.bin 重命名为 MiniLoaderAll.bin
    • idbloader.img 与 rk3399pro_loader_vx.xx.xxx.bin 为同样的产物,只是打包的方式不同。
  • 对于前级 loader 开源的 uboot,以 rv1126 为例,其输出产物为:

    • rv1126_spl_loader_vx.xx.xxx.bin
    • uboot.img,fit 格式的固件,没有 trust.img。trust 的二进制被打包在 uboot.img 里。
    • 一般将 rv1126_spl_loader_vx.xx.xxx.bin 重命名为 MiniLoaderAll.bin

固件烧写

使用烧写工具

  • SDK中提供的 RKDevTool 工具, 目录为 sdk/tools/windows/RKDevTool

  • 打开烧写工具,通过 usb 将开发板与电脑链接。

  • 使开发板进入 Maskrom 模式或者 Loader模式(U-Boot)。此时该工具左下角会提示发现一个设备。

  • 导入配置,在下载配置区右击,选择“导入配置”, 在"文件类型"中选择 ParameterFile,找到 parameter 文件。
    选择文件

  • 选择需要烧录的分区以及文件(loader分区必选),第一次烧录,分区文件(parameter.txt)必选,然后点击执行,即可完成烧录。
    在这里插入图片描述

  • rk3399pro parameter.txt 示例:

    FIRMWARE_VER: 8.1
    MACHINE_MODEL: RK3399PRO
    MACHINE_ID: 007
    MANUFACTURER: RK3399PRO
    MAGIC: 0x5041524B
    ATAG: 0x00200800
    MACHINE: 3399PRO
    CHECK_MASK: 0x80
    PWR_HLD: 0,0,A,0,1
    TYPE: GPT
    CMDLINE: mtdparts=rk29xxnand:0x1f80@0x40(miniloader),0x400@0x1fc0(ubootenv),0x2000@0x4000(uboot),0x2000@0x6000(trust),0x10000@0x8000(boot),0x300000@0x18000(recovery),-@0x318000(rootfs:grow)
    
  • rk3399pro uboot 需要烧写的文件与分区对应关系:

    分区文件
    miniloaderMiniLoaderAll.bin
    ubootuboot.img
    trusttrust.img
  • rv1126 parameter.txt 示例:

    FIRMWARE_VER: 8.1
    MACHINE_MODEL: RV1126
    MACHINE_ID: 007
    MANUFACTURER: RV1126
    MAGIC: 0x5041524B
    ATAG: 0x00200800
    MACHINE: 0xffffffff
    CHECK_MASK: 0x80
    PWR_HLD: 0,0,A,0,1
    TYPE: GPT
    CMDLINE: mtdparts=rk29xxnand:0x1f80@0x40(miniloader),0x400@0x1fc0(ubootenv),0x2000@0x4000(uboot),0x10000@0x6000(boot),0x100000@0x16000(recovery),-@0x116000(rootfs:grow)
    
  • rv1126 uboot 需要烧写的文件与分区对应关系:

    分区文件
    miniloaderMiniLoaderAll.bin
    ubootuboot.img

使用 dd 命令

  • 前提要求:可以登入开发板。

  • 对于前级 loader 闭源的 uboot,以 rk3399pro 为例,执行以下命令:

    dd if=idbloader.img of=/dev/mmcblk0 bs=1M seek=64
    dd if=uboot.img of=/dev/mmcblk0 bs=1M seek=16384
    dd if=trust.img of=/dev/mmcblk0 bs=1M seek=24576
    
  • 对于前级 loader 开源的 uboot,以 rv1126 为例,执行以下命令:

    dd if=MiniLoaderAll.bin of=/dev/mmcblk0 bs=1M seek=64
    dd if=uboot.img of=/dev/mmcblk0 bs=1M seek=16384
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注的罗哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值