Skip to main content

构建 Avaota A1 的 eMMC 系统镜像

TF-A、U-Boot、Linux 和 Buildroot 分别产生不同类型的文件,最终还要把它们装入同一张 eMMC 镜像。build-full-mainline.sh 固定各工程版本、传递构建输入,并在生成 raw 后调用布局检查脚本。

确认构建脚本输入

构建脚本固定使用以下 Git 提交:

工程固定提交在镜像中的作用
TF-A A523/T527 分支b5de74a685fb73b784e45bbbd18dd9a0c528d8b2生成 BL31
U-Boot v2026.07ece349ade2973e220f524ce59e59711cc919263f生成 SPL、FIT 和 U-Boot proper
Linux v7.28d3ae59288f1e7d58d76558a6ee96d533bc5019f生成 Image、DTB 和内核模块
Buildroot 2026.05.1cb857ba4c87a93e5265a9e4a3f32071abf39e14a生成 rootfs、FAT 和整盘 raw

工具链也不是系统 PATH 中随便一个 GCC,而是 SDK 内固定目录:

out/toolchain/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/

完整提交哈希说明上游基点,课程补丁记录 Avaota A1 的增量修改。发布包同时保存源码版本、补丁和二进制,这样既能复现构建,也能直接核对板上运行的产物。

执行构建脚本

脚本以 Debug 方式构建 T527 所属 A523 平台的 BL31:

make -C trusted-firmware-a-a523 \
PLAT=sun55i_a523 \
DEBUG=1 \
SUNXI_PSCI_USE_SCPI=0 \
SUNXI_PSCI_USE_NATIVE=1

随后将生成的 bl31.bin 作为 U-Boot FIT 的输入,并显式留空 SCP

make -C u-boot-v2026.07 avaota-a1_defconfig
make -C u-boot-v2026.07 \
BL31="<TF-A debug bl31.bin>" \
SCP=

这两个参数共同决定 FIT 内容:BL31 提供 EL3/PSCI,SCP= 表示本次组合不加入独立 SCP 固件。脚本还会搜索 FIT,拒绝出现厂商或 SyterKit 标记,避免“主线目录中混入厂商启动件”。

Buildroot 最后执行 avaota_a1_mainline_defconfig,通过 local.mk 使用同级 linux-v7.2,再由 post-build 和 genimage 吸收 U-Boot、Image、DTB、extlinux 与 rootfs。

构建系统组件与 eMMC 镜像

mainline-a1 目录执行:

./build-full-mainline.sh

脚本会先检查源码版本和移植补丁,再依次生成 BL31、U-Boot、Linux 与 Buildroot 产物。版本检查不是额外限制,而是在阻止不同提交的二进制被放进同一张镜像;检查失败时应先恢复课程指定的源码状态,再重新构建。

检查构建产物

buildroot-2026.05.1/output/images/
├── u-boot-sunxi-with-spl.bin
├── Image
├── sun55i-t527-avaota-a1.dtb
├── boot.vfat
├── rootfs.ext2
└── avaota-a1-full-mainline.img

raw 大小应为 805306368 字节。这个数值只证明文件没有明显截断;真正的完成条件是随后由 verify-mainline-layout.sh 检查 eGON、FIT、两个分区及其内容,并为同一份 raw 生成 SHA-256。

完整构建结束后,raw 的 8 KiB 位置应与本次生成的 u-boot-sunxi-with-spl.bin 逐字节一致,FAT 中的 Image、DTB 与 extlinux 也应来自同一输出目录。下一节使用工程脚本逐层检查这些关系。