启动文件关系

理解每个文件由谁读取,可以避免把 U-Boot 设备树、Linux 设备树和根文件系统混在一起。

TF 卡启动链

V3S BootROM
  -> TF 卡 8KiB 偏移处的 SPL/U-Boot
  -> FAT32 第 1 分区的 zImage
  -> FAT32 第 1 分区的 sun8i-v3s-strongpi.dtb
  -> ext4 第 2 分区的根文件系统
文件 来源 写入位置
u-boot-sunxi-with-spl.bin U-Boot 编译 整盘 8KiB 偏移
zImage Linux 编译 第 1 分区
sun8i-v3s-strongpi.dtb Linux 的 spinand DTB 重命名 第 1 分区
根文件树 Buildroot rootfs.tar 解包 第 2 分区

TF 版 U-Boot 的 bootargs 指定 root=/dev/mmcblk0p2

SPI NAND 启动链

V3S BootROM
  -> NAND 中的 SPL
  -> 0x020000 的 u-boot.img
  -> 0x100000 的 Linux DTB
  -> 0x120000 的 zImage
  -> 0x720000 起始的 UBI/UBIFS 根文件系统

NAND 版 U-Boot 的 bootargs 指定:

root=ubi0:rootfs rootfstype=ubifs ubi.mtd=3

两类设备树

文件 使用者 作用
uboot/u-boot.dtb U-Boot U-Boot 阶段的串口、SPI、显示等硬件
kernel/.../sun8i-v3s-strongpi-spinand.dtb Linux Linux 驱动、NAND 分区、网络、触摸、音频等硬件

修改 Linux 设备树不会自动改变 U-Boot 的屏幕初始化或启动命令;修改 U-Boot 设备树也不会替代 Linux DTB。

更新规则

  • 修改 U-Boot:重新写入 u-boot-sunxi-with-spl.binu-boot.img,TF 卡则重新制作整盘镜像。
  • 修改 Linux 设备树:重新编译并写入/复制 DTB。
  • 修改内核:重新编译并写入/复制 zImage
  • 修改根文件系统:重新生成 rootfs.tar,再制作 ext4 或 ubi.img