100ASK T113S3 Pro FEL RAM 安装器原理与安全边界
本章目标
理解主机侧 OpenixCLI 和板端 Linux installer 分别证明什么,避免把“RAM 文件传输完成”误报成“NAND 安装成功”。
职责划分
| 阶段 | 执行者 | 责任 |
|---|---|---|
| 计划生成 | 板级脚本 | 固定角色、路径、地址和 SHA-256 |
| USB 设备选择 | wrapper + OpenixCLI | 只绑定一个明确物理端点 |
| SPL 执行与返回 | OpenixCLI + 主线 SPL | 初始化 DDR3并回到 BootROM FEL |
| DRAM 传输 | OpenixCLI | 写入 U-Boot、installer FIT 和 payload |
| NAND 检查与写入 | Linux RAM installer | MTD 几何、哈希、擦写、读回、UBI/UBIFS |
| 重启后登录监控 | 独立 UART monitor | 安装完成标志之后必须出现新登录提示 |
| 断电冷启动 | 人工/受控电源 | 验证掉电保持和正常 BootROM 启动链 |
OpenixCLI 计划约束
make-openix-plan.py 生成绝对路径 JSON。OpenixCLI 在打开 USB 前检查:
- artifact 数量为 1 至 8;
- 第一个且唯一一个 SPL 位于
0x00020000; - SPL 是精确长度的主线
eGON.BT0,不是厂商 Boot0; - 恰好一个 U-Boot proper,entry 等于其 load address;
- 所有路径为绝对路径;
- 地址按 4 字节对齐且互不重叠;
- 单文件、总大小和计划大小不超过上限;
- 每个文件先复制到 0600 私有快照并重新计算 SHA-256。
USB 打开后源文件即使变化,也不会改变本次传输快照。
R528 SPL 执行
OpenixCLI 只接受目标 R528/T113 device ID,随后:
- 在 scratch SRAM 执行关闭 I-cache 的短程序;
- 将 SPL 绕开 R528 SRAM swap 区分段写入并读回;
- 备份被 swap 区覆盖的 SPL 字节;
- 安装受限的 SRAM return thunk;
- 执行 SPL;
- 等待 250 ms,读取
spl_addr + 4的eGON.FEL; - 同一 handle 失败时,只允许在原
libusb:BUS:PORT进行有限次数重连; - 设备 ID 或物理位置变化立即失败。
该过程不会迁移到另一块 Allwinner 设备。
RAM 交接事件的真实含义
OpenixCLI 成功终点为:
{
"event": "complete",
"phase": "ram_handoff_complete",
"scope": "fel_ram_handoff",
"installerStatus": "not_observed"
}
它只证明:
- SPL 已返回 FEL;
- 所有 RAM artifact 已按计划传输;
- U-Boot entry 已执行。
它不证明 Linux 已启动,也不证明 NAND 已擦写。
Linux installer 启动检查
安装器接管 UART3,首先打印:
T113S3 MAINLINE SPI-NAND INSTALLER
LYNX_PROGRESS phase=installer_started progress=55 partition=payload
随后执行:
- 从
0x44800000保留内存恢复 payload; - 校验压缩归档 SHA-256;
- 解包并校验内部
SHA256SUMS; - 检查 SPL 1 MiB、U-Boot 4 MiB、FIT 和 UBI 大小;
- 检查
mtd0-mtd4名称和容量; - 检查 writesize 2048 和 erasesize 131072;
- 检查
sys坏块计数。
只有全部通过才进入写入。
写入与验证顺序
62% flash_erase + nandwrite mtd0 / SPL
67% flash_erase + nandwrite mtd1 / U-Boot
72% flash_erase + nandwrite mtd3 / boot.itb
nanddump --bb=padbad + SHA-256 回读
78% ubiformat mtd4 / sys.ubi
94% ubiattach + ubinfo + 挂载 ubi0:rootfs
检查 /sbin/init 可执行
100% installer_complete + reboot
失败统一输出:
LYNX_PROGRESS phase=installer_failed progress=0 partition=unknown
INSTALL FAILED - emergency shell on ttyS3
安装器停在 shell,不自动继续下一次写入。
验证方法
主机侧必须同时保存:
- OpenixCLI JSONL;
- 独立 UART 原始日志;
- 本次 artifact SHA-256;
- USB 物理位置;
- 源码提交。
UART monitor 只在本次 installer_complete 之后看到新的 t113s3pro-mainline login: 才返回成功。日志中较早的旧登录提示不能满足本次安装。
失败处理与回滚
- OpenixCLI 终止:手动让板卡重新进入 FEL,再启动新任务;
- 不允许终止失败后自动重试;
- installer emergency shell:先保存
/proc/mtd、bad block、dmesg 和失败阶段; - NAND 写入中断:板卡可能不可冷启动,但仍可从 BootROM FEL 进入恢复;
- 串口监控失败:不得据 OpenixCLI 50%/complete 判定安装成功。