Rockchip Uboot 基础简介 RV1126 RK3399 RK3588

Rockchip Uboot 基础简介

  • U-Boot:Universal Boot Loader,主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,其主要作用为引导系统的启动。
  • Rockchip Uboot:基于 U-Boot 正式版 v2017.09 进行开发,添加了大量新特性,目前已经支持 RK 所有主流在售芯片。

源码获取

特性

  • 支持 RK Android 固件启动;
  • 支持 Linux Distro 固件启动;
  • 支持 Rockchip miniloaderSPL/TPL 两种 Pre-loader 引导;
  • 支持 LVDS、EDP、MIPI、HDMI、RGB 等显示设备;
  • 支持 eMMC、Nand Flash、SPI Nand flash、SPI NOR flash、SD 卡、 U 盘等存储设备启动;
  • 支持 FAT、EXT2、EXT4 文件系统;
  • 支持 GPT 分区表;
  • 支持 I2C、PMIC、CHARGE、FUEL GUAGE、USB、GPIO、PWM、GMAC、eMMC、NAND、Interrupt 等;
  • 支持 Vendor storage 保存用户的数据和配置;

启动顺序

  • RK平台根据前级 Loader 代码是否开源,目前支持两套启动方式(只列出了我使用过的芯片):

    // 前级loader闭源,rk3399,rk3399pro
    BOOTROM => ddr bin => Miniloader => TRUST => U-BOOT => KERNEL
    // 前级loader开源,rv1126,rk3588s,rk3588
    BOOTROM => TPL => SPL => TRUST => U-BOOT => KERNEL
    
  • TPL 相当于 ddr bin,SPL 相当于 miniloader。TPL+SPL 的组合实现了跟 RK 闭源 ddr.bin+miniloader 一致的功能,可相互替换。

启动命令

  • RK U-Boot 通过宏 RKIMG_BOOTCOMMAND 定义的启动命令引导内核,该宏一般定义在文件 include/configs/rockchip-common.h 或者文件 include/configs/rkxx_common.h 中。
  • 官方 U-Boot 通过 CONFIG_BOOTCOMMAND 定义的启动命令引导 kernel。在执行 CONFIG_BOOTCMD 之前还会执行 CONFIG_PREBOOT 预启动命令,通常这个命令定义为空。
  • 在文件 include/configs/evb_rkxx.h 中会执行以下语句 #define CONFIG_BOOTCOMMAND RKIMG_BOOTCOMMAND 定义启动命令,其实还是和官方一样。

前级 Loader

  • TPL(Tiny Program Loader)DDR BINSPL(Secondary Program Loader)Miniloader 是比 U-Boot 更早阶段的 Loader
  • TPLDDR BIN:运行在 sram 中,负责完成 ddr 初始化。
  • SPLMiniloader:运行在 ddr 中,负责完成系统的 lowlevel 初始化、后级固件加载(trust.img 和 uboot.img)。
  • U-Boot:运行在 ddr 中,负责引导kernel。

Environment Variables

  • ENV(Environment-Variables) 是 U-Boot 支持的一种全局数据管理和传递方式,原理是构建一张HASH映射表,把用户的数据以"键值-数据"作为表项进行管理。

  • ENV 通常用于定义平台配置参数:固件加载地址、网络配置(ipaddr、serverip)、bootcmd、bootargs等,用户可以在命令行下使用 printenv 命令打印出来。

  • 用户可选择是否把 ENV 数据保存到本地存储上。

  • ENV 数据仅限于 U-Boot 使用,无法直接传递给内核、内核也无法直接解析。

  • 用户层可以通过 U-Boot 提供的 fw_printenv 工具访问 ENV 数据。

  • RK 平台上 ENV 数据的存储地址和大小定义如下(单位:字节):

    config ENV_OFFSET
        hex
        default 0x3f8000
        help
          Offset from the start of the device
    config ENV_SIZE
        hex
        default 0x80000
        help
          Size of the environment storage area
    
  • RK 平台以文件 include/configs/rkxx_common.h 中宏 CONFIG_EXTRA_ENV_SETTINGS 定义的值作为默认的环境变量,修改该宏即可修改环境变量。每一条环境变量都以 \0 结尾。

DTS

  • U-Boot 有自己的 DTS 文件,编译时会自动生成相应的 DTB 文件,被添加在 u-boot.bin 末尾。
  • 各平台具体使用的 DTS 文件,通过 xxx_defconfig 中的 CONFIG_DEFAULT_DEVICE_TREE 指定。

编译输出

  • 开启 TPL/SPL 编译后才有 TPL/SPL 的生成文件。

    // U-Boot阶段
    ./u-boot.map // MAP表文件
    ./u-boot.sym // SYMBOL表文件
    ./u-boot     // ELF文件,类同内核的vmlinux(重要!)
    ./u-boot.dtb // u-boot自己的dtb文件
    ./u-boot.bin // 可执行二进制文件,会被打包成uboot.img用于烧写
    
    // SPL阶段
    ./spl/u-boot-spl.map // MAP表文件
    ./spl/u-boot-spl.sym // SYMBOL表文件
    ./spl/u-boot-spl     // ELF文件,类同内核的vmlinux(重要!)
    ./spl/u-boot-spl.dtb // spl自己的dtb文件
    ./spl/u-boot-spl.bin // 可执行二进制文件,会被打包成loader用于烧写
    
    // TPL阶段
    ./tpl/u-boot-tpl.map  // MAP表文件
    ./tpl/u-boot-tpl.sym  // SYMBOL表文件
    ./tpl/u-boot-tpl      // ELF文件,类同内核的vmlinux(重要!)
    ./tpl/u-boot-tpl.dtb  // tpl自己的dtb文件
    .//tpl/u-boot-tpl.bin // 可执行二进制文件,会被打包成loader用于烧写
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

专注的罗哈哈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值