Rockchip Uboot 特性简介
- 本文主要介绍 RK 平台上一些重要的特性。
Kernel DTB
- 原生的 U-Boot 只支持使用 U-Boot 自己的 DTB,RK 平台增加了
kernel DTB
机制的支持,即使用 kernel DTB 去初始化外设。主要目的是为了兼容外设板级差异,如:power、clock、display 等。 - U-Boot DTB:负责初始化存储、打印串口等设备;
- Kernel DTB:负责初始化存储、打印串口以外的设备;
- U-Boot 初始化时先用 U-Boot DTB 完成存储、打印串口初始化,然后从存储上加载 Kernel DTB 并转而使用这份 DTB 继续初始化其余外设。
- 通常对于外设的 DTS 修改,用户应该修改kernel DTB。
- 启用 kernel DTB 机制后:编译阶段会把
U-Boot DTS
里带u-boot,dm-pre-reloc
和u-boot,dm-spl
属性的节点过滤出来,在此基础上再剔除 defconfig 中CONFIG_OF_SPL_REMOVE_PROPS
指定的 property,最终生成 u-boot.dtb 文件并且追加在 u-boot.bin的末尾。 - 默认支持并开启的平台(只列出了我使用过的芯片):rk3399,rk3399pro,rv1126,rk3588s,rk3588。
- DTS 目录:
./arch/arm/dts/
。
Emmc Aliases
- U-Boot Emmc aliases 有别于 kernel DTS 里的定义。
- eMMC/SD 在 U-Boot 中统称为 mmc 设备,使用编号 0、1 作区分。
- SD 的启动优先级高于 eMMC。
- 在 U-Boot 中,
mmc0 表示 emmc
,mmc 表示 sd
。 - 在 Kernel 中,
mmc0 可能表示 sd,也可能表示 emmc
。
存储布局
- RK linux方案的存储布局如下:
快捷键
-
RK平台提供串口组合键触发一些事件用于调试、烧写,开机时长按即可触发。
快捷键 作用 ctrl+c 进入 U-Boot 命令行模式 ctrl+d 进入 loader 烧写模式 ctrl+b 进入 maskrom 烧写模式 ctrl+f 进入 fastboot 模式 ctrl+m 打印 bidram/system 信息 ctrl+i 使能内核 initcall_debug ctrl+p 打印 cmdline 信息 ctrl+s "Starting kernel…"之后进入 U-Boot 命令行
SysReset
- U-Boot的复位和kernel一样,最终需要陷入trust里完成。
Timestamp
- Kernel的打印信息默认带有时间戳,方便用户关注时间。U-Boot 的打印信息默认没有带时间戳,用户有需要的话可以使能配置
CONFIG_BOOTSTAGE_PRINTF_TIMESTAMP
。
总体耗时
-
U-Boot 初始化结束默认会打印本阶段的总耗时:
### Booting Android Image at 0x02007800 ... Kernel load addr 0x02008000 size 8062 KiB ### Flattened Device Tree blob at 08300000 Booting using the fdt blob at 0x8300000 XIP Kernel Image ... OK Using Device Tree in place at 08300000, end 08316ed1 Adding bank: 0x00000000 - 0x08400000 (size: 0x08400000) Adding bank: 0x09200000 - 0x80000000 (size: 0x76e00000) Total: 812.613 ms // U-Boot阶段的总耗时 Starting kernel ...