Skip to main content

验证主线参考镜像

源码移植会同时涉及启动固件、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.xz43,183,888 字节解压后写入 eMMC User Area
FES loader avaota-a1-t527-fes-loader.img1,337,344 字节通过 FEL 加载到内存,让烧录工具访问 eMMC
烧录工具 openixcli-linux-x86_641,412,097 字节在 Ubuntu x86_64 主机执行扫描与烧录
SHA256SUMS502 字节核对下载文件
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/FESscan 能找到 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 locationBUS: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-dirtyb_max=128BootROM 已从 eMMC Boot0 进入修复后的 SPL
NOTICE: BL31: v2.12.0SPL 已读取 FIT 并进入 TF-A
U-Boot 2026.07-dirtyFound /extlinux/extlinux.confU-Boot 能读取 FAT 启动分区
Linux version 7.2.0-avaota-a1-mainlineVFS: Mounted rootLinux 已挂载 eMMC ext4 根分区
Avaota A1 mainline Linux / Buildroot 2026.05.1Buildroot 用户空间已经启动

可以下载主线系统实机启动记录,逐段查找这些标志。记录中的 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。网口在该版本中能够枚举 eth0eth1,但启动记录仍有接口等待超时和 MDIO address 1 未发现,因此网络不作为本次参考镜像通过条件。

参考镜像验证结果

继续进入源码课程前,应已经保存以下结果:

  • 主线镜像压缩包、FES loader、OpenixCLI 及解压后的 raw 均通过 SHA-256 校验;
  • OpenixCLI 能通过 OTG 识别板卡并完成 FES 整盘写入与读回验证;
  • 完全断电后依次出现 SPL、BL31、U-Boot、Linux 与 Buildroot 登录提示;
  • Linux 能看到约 3.8 GiB 可用内存,并从 eMMC 的 ext4 根分区运行;
  • 再次完全断电上电后,启动结果保持一致。

下一节从这份串口记录出发,说明每一行分别属于启动链中的哪个组件,以及系统停在不同位置时应检查哪一层。

继续:T527 主线系统启动过程