主线系统构建关系
板卡启动时,SPL、TF-A、U-Boot、Linux 和用户空间依次运行;在开发主机上构建时,各项目却不是简单地按这个顺序执行。先分清这两种顺序,后面遇到文件缺失或版本不匹配时,才知道应该回到哪里处理。
启动顺序与构建顺序不同
| 观察位置 | 看到的顺序 | 关心的问题 |
|---|---|---|
| 板卡串口 | BootROM → SPL → TF-A → U-Boot → Linux → 用户空间 | 系统停在了哪个阶段 |
| 开发主机 | 工具链与配置 → 各项目产物 → 分区镜像 → 整盘镜像 | 某个文件由谁生成、交给谁使用 |
TF-A、U-Boot、Linux 与 Buildroot 如何组合
图中有两个关键衔接:
- TF-A 先生成
bl31.bin,U-Boot 在制作 FIT 时把它与 U-Boot proper、DTB 组合起来; - Buildroot 组织 Linux 和用户空间的构建结果,再由镜像脚本把启动固件、FAT 分区和根分区写入固定布局。
Tina5 SDK 提供的工具
课程不是构建或烧录 Tina5 系统。工程借用了 Tina5 SDK 中已经适配 T527 的交叉编译工具链,以及全志设备进入烧录模式、向 eMMC 写入整盘镜像的能力。
Tina5 SDK
└── prebuilts/
└── gcc/
└── linux-x86/
└── aarch64/
└── toolchain-sunway_10.3.1/
| Tina5 SDK 提供 | 主线工程自己完成 |
|---|---|
| AArch64 交叉编译器 | 编译主线 TF-A、U-Boot、Linux |
| 全志 USB/OTG 烧录链路 | 生成主线系统所需的分区与文件 |
| 芯片可识别的烧录封装方式 | 组合主线启动固件和根文件系统 |
所以最终烧进 eMMC 的内容仍是主线系统。Tina5 SDK 在这里承担的是工具角色,不是运行时系统角色。
四个组件的构建产物
| 项目 | 主要输入 | 主要输出 | 谁会使用 |
|---|---|---|---|
| TF-A | T527/A523 平台代码、编译参数 | bl31.bin | U-Boot 的 FIT |
| U-Boot | defconfig、板级 DTS、bl31.bin | SPL、U-Boot proper、组合启动固件 | BootROM、SPL、eMMC 镜像 |
| Linux | arm64 配置、设备树、驱动 | Image、DTB、内核模块 | U-Boot、根文件系统 |
| Buildroot | defconfig、overlay、post-build 脚本 | rootfs、启动分区文件、镜像目录 | 镜像组装脚本 |
判断一个命令是否成功时,不要只看退出码,还应检查预期产物是否出现、文件大小是否合理,以及下一阶段是否能识别它。
Buildroot 需要新增哪些板级文件
官方 Buildroot 没有 Avaota A1 的板级入口,因此课程工程需要补齐一组可追踪的配置文件:
buildroot/
├── configs/
│ └── avaota_a1_mainline_defconfig
└── board/
└── avaota/
└── a1-mainline/
├── linux.fragment
├── rootfs-overlay/
├── post-build.sh
└── genimage.cfg
| 文件 | 解决的问题 |
|---|---|
avaota_a1_mainline_defconfig | 选择架构、工具链、Linux、文件系统和软件包 |
linux.fragment | 在主线默认配置上补充板卡所需内核选项 |
rootfs-overlay/ | 放入 extlinux.conf 和板级用户空间文件 |
post-build.sh | 在镜像生成前整理内核、DTB 和启动文件 |
genimage.cfg | 定义 FAT、ext4 和整盘镜像的分区关系 |
这些文件把原本散落在命令行里的选择固定下来,使一次成功构建可以被再次执行,也便于后续定位是哪一层配置发生了变化。
对应最终镜像与上游产物
一次完整构建结束后,镜像目录中的关键文件应能回到明确的生成项目:
output/images/
├── bl31.bin ← TF-A
├── u-boot-sunxi-with-spl.bin ← U-Boot + TF-A
├── Image ← Linux
├── sun55i-t527-avaota-a1.dtb ← Linux
├── rootfs.ext4 ← Buildroot
├── boot.vfat ← Image + DTB + extlinux.conf
└── avaota-a1-mainline-emmc.img ← 启动固件 + 分区镜像
如果最终镜像启动失败,这份对应关系可以把问题从“整套系统不工作”缩小为某一个输入文件或某一次组装操作。
主线系统的构建顺序
补齐并验证 BL31
↓
让 U-Boot 从 eMMC 启动
↓
生成 Linux、DTB 与 rootfs
↓
组合并烧录 eMMC 整盘镜像
明确启动顺序和构建产物之后,下一步进入四个官方源码项目,检查指定版本已经提供的 T527 与 Avaota A1 支持。