验证主线参考镜像
源码移植会同时涉及启动固件、eMMC、设备树、内核和根文件系统。如果板卡连接或烧录通道本身不稳定,后续遇到无日志、读盘失败或根分区无法挂载时,很难判断问题来自代码还是实验环境。
本课使用 v2026.09.01-v9-tm4-coldboot 参考镜像。该版本已经完成 eMMC 整盘写入、读回校验和两次完全断电冷启动,最终进入 Buildroot root shell。后续修改源码时,可以将同一组启动标志作为判断依据。
下载 v9 参考镜像
所有文件均来自项目的 v9 Release 页面。烧录需要压缩的主线镜像、FES loader 和 Linux x86_64 版 OpenixCLI;清单文件用于确认版本、大小和哈希。
| 文件 | 是否必须 | 大小 | 用途 |
|---|---|---|---|
主线镜像 avaota-a1-mainline-v9-tm4-coldboot.img.xz | 是 | 43,183,888 字节 | 解压后写入 eMMC User Area |
FES loader avaota-a1-t527-fes-loader.img | 是 | 1,337,344 字节 | 通过 FEL 加载到内存,让烧录工具访问 eMMC |
烧录工具 openixcli-linux-x86_64 | 是 | 1,412,097 字节 | 在 Ubuntu x86_64 主机执行扫描与烧录 |
SHA256SUMS | 是 | 502 字节 | 核对下载文件 |
release.manifest | 建议 | 1,488 字节 | 查看 raw 哈希、软件版本、eMMC 参数和验收状态 |
| 同版本 U-Boot 备份 | 可选 | 839,657 字节 | 单独检查本次发布使用的 SPL 与 U-Boot |
| 实机烧录机器日志 | 可选 | 2,331,291 字节 | 对照 FES 写入和验证阶段 |
Release 中的 U-Boot SHA-256 为 0d405263...e5b70c3,与工程中修复后的 u-boot-sunxi-with-spl.bin 一致。它包含当前 T527 MMC2 冷启动使用的 TM4 时序和 b_max=128 配置。
FES loader 与主线 raw 分别做什么
这次烧录使用两个输入文件。FES loader 只在内存中运行,负责让 T527 从 BootROM FEL 进入能够访问 eMMC 的 FES/SRV 状态;解压后的主线 raw 才是写入 eMMC 的持久内容。
--emmc-boot0-from-image 让 OpenixCLI 从 raw 的标准 8 KiB 位置提取主线 SPL,并按 eMMC Boot0 语义安装。User Area 则从物理扇区 0 开始写入完整的 768 MiB raw。loader 本身不会写入 eMMC,因此它不会成为最终系统的一部分。
在 Ubuntu 主机准备文件
在一个新的工作目录中下载四个必需文件:
mkdir avaota-a1-v9
cd avaota-a1-v9
release_url=https://github.com/dshanpi/AvaotaA1-T527-MainLineLinux/releases/download/v2026.09.01-v9-tm4-coldboot
curl -LO "$release_url/avaota-a1-mainline-v9-tm4-coldboot.img.xz"
curl -LO "$release_url/avaota-a1-t527-fes-loader.img"
curl -LO "$release_url/openixcli-linux-x86_64"
curl -LO "$release_url/SHA256SUMS"
SHA256SUMS 还列出了 U-Boot 备份和实机日志。只下载四个必需文件时,分别校验已经取得的三个二进制文件:
echo 'fa5687bede14abfc0df7f24941ee8afb94ba70b271f66eb889629f1176210821 avaota-a1-mainline-v9-tm4-coldboot.img.xz' | sha256sum -c -
echo '867d43d12399016252a3d34c2ae50f6f362868f95c2985169d5a4b655a16417c avaota-a1-t527-fes-loader.img' | sha256sum -c -
echo 'c370b3b5079ff67672728d127df57e1cb234e18a10febd4ca3cda36a635662ae openixcli-linux-x86_64' | sha256sum -c -
三行都应返回 OK。随后保留压缩包并解压 raw,再核对解压结果:
xz -dk avaota-a1-mainline-v9-tm4-coldboot.img.xz
echo '22d9775202898f55814bee156058d8d010c2461f67cb11e7dc35c8c8c609d5f2 avaota-a1-mainline-v9-tm4-coldboot.img' | sha256sum -c -
解压后的 raw 应为 805306368 字节。压缩包哈希只能证明下载文件一致;第二次校验用于确认真正交给烧录工具的 raw 也没有在解压或复制过程中改变。
准备电源、串口与 OTG
烧录时保留三条独立通道:
| 通道 | 连接方式 | 负责什么 | 正常现象 |
|---|---|---|---|
| 电源 | 独立稳定电源连接板卡 | 为 FES 和 eMMC 写入提供稳定供电 | 写盘期间不复位、不掉电 |
| 串口 | CH340 连接 GND、TX、RX | 观察冷启动后的主线日志 | 115200 8N1 下文字连续可读 |
| OTG | 数据线连接 Ubuntu 主机 | 让 OpenixCLI 访问 BootROM FEL/FES | scan 能找到 1f3a:efe8 设备 |
串口模块不要连接 5 V,避免主电源断开后通过 UART 引脚反向供电。OTG 线必须支持数据传输。开始前关闭可能占用 USB 的其他烧录程序,并确认没有另一个 OpenixCLI 进程正在运行。
从 FEL 取得设备位置
赋予执行权限并扫描设备:
chmod +x openixcli-linux-x86_64
./openixcli-linux-x86_64 scan
板卡进入 FEL 后,输出中应包含类似下面的字段:
Physical location: libusb:BUS:PORT
后续命令必须使用 OpenixCLI 返回的 Physical location。BUS:PORT 表示 USB 物理连接位置,不是 lsusb 中重新枚举后可能变化的 Device NNN 编号。没有找到设备时,先检查 FEL 进入方式、OTG 数据线和 USB 权限,不要直接开始写盘。
将 v9 raw 写入 eMMC
把 libusb:BUS:PORT 替换为上一步的实际值:
./openixcli-linux-x86_64 --output jsonl raw \
avaota-a1-t527-fes-loader.img \
avaota-a1-mainline-v9-tm4-coldboot.img \
--mode command \
--emmc-boot0-from-image \
--device-location libusb:BUS:PORT
OpenixCLI 会先把 loader 下载到 RAM,等待设备从 FEL 重新枚举为 FES,再检查 eMMC 类型与容量。通过检查后,它安装 Boot0 SPL、写入完整 User Area,并读回验证整张 raw。
FEL 转入 FES 失败后不要直接重复执行命令。让板卡重新进入 FEL,再次运行 scan,确认设备位置后再烧录。这样可以避免把前一次失败后残留的 USB 状态当成新的烧录会话。
确认烧录和冷启动结果
v9 实机烧录记录的完成标志是:
Raw disk image flashed successfully
errorCode=0
这两项说明完整 raw 已写入并通过烧录工具的读回验证,但还不能代替 BootROM 冷启动测试。烧录完成后彻底断开板卡电源和 OTG,等待板卡掉电,再只恢复正常供电并观察 CH340 串口。
按顺序确认五组启动标志:
| 串口标志 | 可以确认 |
|---|---|
U-Boot SPL 2026.07-dirty、b_max=128 | BootROM 已从 eMMC Boot0 进入修复后的 SPL |
NOTICE: BL31: v2.12.0 | SPL 已读取 FIT 并进入 TF-A |
U-Boot 2026.07-dirty、Found /extlinux/extlinux.conf | U-Boot 能读取 FAT 启动分区 |
Linux version 7.2.0-avaota-a1-mainline、VFS: Mounted root | Linux 已挂载 eMMC ext4 根分区 |
Avaota A1 mainline Linux / Buildroot 2026.05.1 | Buildroot 用户空间已经启动 |
可以下载主线系统实机启动记录,逐段查找这些标志。记录中的 U-Boot 构建时间为 Sep 01 2026 - 23:27:38 -0400,其二进制 SHA-256 与 v9 Release 一致。
登录后再检查内存、eMMC 和根挂载:
uname -a
free -h
cat /proc/partitions
mount | grep ' on / '
实机结果应能看到 Linux 7.2、约 3.8 GiB 可用内存、mmcblk1p1/mmcblk1p2,以及 /dev/root on / type ext4。网口在该版本中能够枚举 eth0 和 eth1,但启动记录仍有接口等待超时和 MDIO address 1 未发现,因此网络不作为本次参考镜像通过条件。
参考镜像验证结果
继续进入源码课程前,应已经保存以下结果:
- 主线镜像压缩包、FES loader、OpenixCLI 及解压后的 raw 均通过 SHA-256 校验;
- OpenixCLI 能通过 OTG 识别板卡并完成 FES 整盘写入与读回验证;
- 完全断电后依次出现 SPL、BL31、U-Boot、Linux 与 Buildroot 登录提示;
- Linux 能看到约 3.8 GiB 可用内存,并从 eMMC 的 ext4 根分区运行;
- 再次完全断电上电后,启动结果保持一致。
下一节从这份串口记录出发,说明每一行分别属于启动链中的哪个组件,以及系统停在不同位置时应检查哪一层。