全志 Allwinner 开发指南
编制日期 2026-10-14
从 BROM / FEL 启动、Tina Linux 编译,到 SPI Flash 与 eMMC 量产烧录与多媒体外设 —— 一份把「全志特有的坑」全部前置的工程手册
结论:全志是「用一颗 SoC 同时解决算力、视觉、实时控制与联网」的典型代表, 几乎每一颗中高端型号都是异构架构(T527 = 8×A55 + 玄铁 E906,V853 = Cortex-A7 + RISC-V E907, R128/F133/D1-H = RISC-V + Cortex-M),大核跑 Tina Linux、MCU 核跑 RTOS 负责电源管理与实时外设。 它的开发链路比 MCU 复杂,但也有一条别的厂商给不了的兜底通道: FEL 固化在 BROM 里,无论固件写成什么样都能救回来。真正让人卡住的从来不是代码,而是三件小事: 启动偏移落在 8 KB 位置把 GPT 分区表冲掉、U-Boot 打印串口的 CONS_INDEX 与 pinmux 改了一处漏了两处、 H616 之后的芯片没有 CPUS 管理处理器导致 suspend 走不通。 本文按「启动 → 环境 → 编译 → 烧录 → 量产」的真实流水线组织, 每一段都给出可复制的命令、可对照的表格、以及该段最常踩的坑。
报告总结
全志的资料分布在一个官网产品页(参数)、一个开发者社区(编译与例程)、一个 Tina 在线文档(操作步骤)、 以及一个 linux-sunxi.org Wiki(主线与 boot 细节)四个地方,彼此之间没有交叉索引。 网上的中文教程绝大多数停留在「下载 SDK → lunch → make → pack → PhoenixSuit 刷机」这一步, 一旦遇到进不了 FEL、eMMC 识别不到、内核不打印、摄像头花屏就无解。本文档做了三件分散文档没做的事:
- 把 FEL 定位成排障的核心工具:明确指出「用
sunxi-fel uboot把 U-Boot 跑起来」这个动作 能一刀切开「BROM / DRAM / U-Boot 有问题」和「介质内容 / 内核有问题」——这是全志平台最有效的二分法。 - 把坑写在坑发生的地方:不单独罗列「常见问题」,而是在讲每个环节时就把该环节的失效现象、原因、处置一起给出。
- 补齐存储视角:全志生态对存储方案最友好(BROM 支持 SD / eMMC / 原始 NAND / SPI NOR 四类启动介质, 还支持「未贴片预烧录」),本文按存储选型的角度把这条线单独抽出来讲,见第 3.7 节与附录 B。
读者路径
本文档共 17 章 + 4 个附录,按「先跑通、再理解」的顺序组织:
- 只想尽快跑通第一个系统:第 4 章(Tina 编译)→ 第 5 章(烧录)→ 第 17 章(核查清单),三章足够。
- 要做产品开发:第 2 章选型 → 第 3 章启动链 → 第 7 章硬件设计 → 第 12 章设备树。
- 调不通、报错:直接翻第 16 章故障排查速查表,按现象分层定位。
- 要写驱动:第 8 章 GPIO → 第 9 章 SPI/I2C/ADC/PWM → 第 10 章显示视频 → 第 11 章网络 USB CAN。
- 做视觉产品(IPC / 门锁 / AI 眼镜):第 2.5 节选型 → 第 6 章异构 → 第 10.4 节 ISP → 附录 B 存储组合。
- 做电池供电的终端:第 14 章低功耗,注意 H616 起没有 CPUS 这条硬约束。
- 从树莓派迁移:第 15.1 节 —— GPIO 编号完全一致,代码可以大面积复用。
- 评估存储方案:附录 B —— 五种启动介质对比与四种存储组合方案。
1 · 文档导读与阅读路径
这一章说明本文档的边界:覆盖什么、不覆盖什么,以及为什么把内容按「流水线」而不是按「功能模块」组织。
1.1 覆盖范围
本文档覆盖从拿到一块全志开发板,到固件跑起来、能在串口停下、并能量产烧录的完整链路:
- 家族与选型:T / A / H / V / MR / R / F / D1 八条线的规格对照,以及按「终端类型」而非「性能」的选型思路。
- 启动链:BROM 地址布局、eGON.BRM 内部序列、启动介质探测顺序、FEL 的五种进入方式与命令用法、boot0 旧式布局、U-Boot 官方构建与四种安装方式。
- 开发环境:Tina Linux 五步编译流程、依赖包清单、repo 工具与镜像源、SDK 目录结构、sys_partition.fex 分区配置、只编一块的快捷命令、主线 Linux 路线。
- 烧录与量产:五种官方烧录工具矩阵、PhoenixSuit 完整流程、sunxi-fel 命令详解、产线三种模式对比、Secure Boot 与固件加密、存储器件预烧录方案。
- 异构架构:Linux 核与 RTOS 核的分工、AMP / RPMsg 通信、V821 双核的低功耗范式。
- 硬件设计:电源分区与上电时序、时钟与复位、启动相关引脚、存储接口布线(SMHC / SPI / 原始 NAND)、显示与摄像头、USB 走线、散热。
- 驱动与外设:GPIO 编号算法、libgpiod、pinmux、调试串口、SPI / I2C / ADC / PWM、显示子系统、VE 编解码、ISP、音频、GMAC / USB / CAN。
- 调试与排障:四层调试通道、串口与 U-Boot 命令、ADB、ftrace / perf、时钟与电源域观测,以及四类故障速查表。
1.2 不覆盖什么
以下内容超出本文档范围,需要时请查阅对应官方资料:
- ISP 算法级调优:全志提供 PC 端 ISP 工具支持在线/离线/远程调试,但 3A 参数、噪声抑制曲线、 色彩矩阵的具体调优是光学与算法工程,本文只给「硬件到出图」的定位路径(第 10.4 节)。
- Android 应用开发:A 系列的 Android BSP、Framework 与 APP 移植属于 Android 生态话题,本文只覆盖 Linux 侧。
- 每一款封装的完整管脚定义:本文给出接口数量与关键引脚原则,完整管脚表必须查对应 SoC 的 User Manual 与 Datasheet。
- 具体寄存器位域全集:全志 User Manual 动辄上千页,本文只给做决策必须的「哪个模块在哪、找谁帮忙」,写代码时仍需对着手册核。
- PCB 高速仿真:DDR / MIPI / USB 3.1 的 SI 仿真需要专业工具与厂商模型,本文给的是可执行的规则与经验值。
- RTOS 侧的 RTOS 本身:Melis 的调度器、IPC 机制不在本文范围,本文只讲「怎么分工、怎么通信」。
1.3 全志的产品线命名规律
全志的型号命名比 MCU 厂商复杂,原因是它同时按应用场景与算力档位两个维度命名。 先记住一条铁律:第一个字母决定应用场景,数字决定算力档位。
| 字母 | 系列 | 场景 | 典型算力档 |
|---|---|---|---|
A | Application | 通用智能终端(Android / Linux) | A133 4×A7 → A527 8×A55 → A733 2×A76+6×A55 |
T | 工控与车载 | 工业级 + 车规,-40~85℃ | T113 4×A7 → T527 8×A55 → T736 8 核 3 TOPS |
H | Home / HDMI | OTT 盒子与家庭影音 | H3 4×A7 → H616/H618 4×A53 → H728 八核 |
V | Vision | 低功耗 AI 视觉 SoC | V821 双 RISC-V → V853 三核异构 → V881 双 C907 |
MR | Mobile Robot | 机器人专用 | MR153 入门 → MR536 → MR527 高端扫地机 |
R | Robotics / Real-time | AIoT 与实时控制 | R128 超低功耗 → R329 0.8 TOPS AIPU |
F | 低成本线 | LCD 控制器 / 上位机 / 教育单板 | F1C100s ARM9 → F133 玄铁 C906 + M0 |
D1 | D1 / D1s / D1-H | RISC-V 边缘 AI 入门 | 玄铁 C906,D1 @1.0GHz |
A733 的 733 与 T736 的 736 没有任何关系。
「7xx」在不同系列里代表不同算力等级,跨系列比数字毫无意义。
唯一有意义的横向对比维度是:CPU 核型号、主频、NPU TOPS、内存类型与位宽、封装。
1.4 事实来源与免责
本文档所有数值型信息来自全志官方产品页、官方社区文档、U-Boot 官方文档与 linux-sunxi.org, 正文关键处标注出处。主要来源及口径如下:
| 资料 | 提供的内容 | 口径说明 |
|---|---|---|
allwinnertech.com 产品页 | T527 / H618 等型号的官方规格表 | **以官网当前 Revision 为准**;同型号规格会随硅版本更新 |
docs.aw-ol.com 在线文档 | Tina 编译、烧写、SDK 使用指南 | 以 D1 / D1s / D1-H 与 F135/F136 平台的文档为准 |
docs.u-boot.org 全志章节 | U-Boot 构建、TF-A、crust、四种安装方式与偏移 | **主线 U-Boot 官方文档,权威度最高** |
linux-sunxi.org Wiki | BROM 地址布局、启动介质顺序、die revision、主线支持度 | 社区维护,但内容经过实测验证,是主线视角的事实源 |
bbs.aw-ol.com 官方 PDF Brief | T527 系列详细规格(V0.11 draft) | 官方发布但标注为 draft,非最终版 |
sbc.compare / 板卡厂商规格 | 7-Zip 与 Geekbench 实测跑分 | 第三方实测,非官方数据,仅作相对参考 |
| 代理商与方案商文档(定昌、ArmSoM 等) | A733 / V821 板级配置与验证过的接口组合 | 工程参考,需与最新 Datasheet 复核 |
全志的消费类芯片(H / F 系列)生命周期较短,部分型号已进入 EOL 流程;
A / T 系列仍在活跃供货但料号也会按 PCN 变更。
文中引用某型号时一定标了出处,正式立项前请到 allwinnertech.com 与
aw-ol.com 复核目标料号的最新 Datasheet、PCN 状态与生命周期。
特别提醒两条容易被转载资料掩盖的事实:H616 与 H618 的 L2 Cache 与 die revision 不同,
H616 起芯片不再带 CPUS 管理处理器 —— 这两条都会直接影响设计。
2 · 家族全景与选型
全志不是「一个系列做很多料」,而是「八条产品线各做一堆料」。这一章先把货架摆开,讲清每条线存在的理由,再给选型路径。
2.1 九条产品线的定位
全志(珠海,全志科技股份有限公司,Fabless)的产品线是按应用场景切的,而不是按性能切的。 这与 STM32 / 沁恒按「资源档位」切的思路完全不同,也直接决定了选型的第一刀应该砍在哪里:
| 系列 | 定位 | 算力跨度 | 主打软件栈 | 典型终端 |
|---|---|---|---|---|
| T | 工业级 + 车规 | 4×A7 → 8×A55 + 3 TOPS | Tina Linux(+ RTOS MCU 核) | 智能座舱、PLC、工业网关、HUD、边缘计算 |
| A | 通用智能终端 | 4×A7 → 2×A76 + 6×A55 + 3 TOPS | Android / Tina Linux | 平板、商显、智能家居中控 |
| H | OTT 与家庭影音 | 4×A7 → 4×A53 → 八核 | Android TV / Tina Linux | 电视盒子、智能屏、投影仪 |
| V | 低功耗 AI 视觉 | 双 RISC-V → 三核异构 + 1 TOPS | Tina Linux + Melis RTOS | IPC、智能门锁、门铃、AI 眼镜、ADAS |
| MR | 机器人专用 | 4 核 ARM+RISC-V → 八核 AI | Tina Linux + RTOS | 扫地机器人、割草机器人、服务机器人 |
| R | AIoT 与实时控制 | 超低功耗 → 0.8 TOPS AIPU | Tina Linux / RTOS | 语音面板、智能家居、电池终端 |
| F | 低成本线 | ARM9 → 玄铁 C906 + M0 | Tina Linux / RTOS | LCD 控制器、上位机、教育单板 |
| D1 | RISC-V 入门 | 玄铁 C906 @1.0GHz | Tina Linux(开源度最高) | 教育机器人、IoT 网关、开发板 |
T527 = 8×Cortex-A55 + 玄铁 RISC-V E906;V853 = Cortex-A7 + RISC-V E907; A733 = 2×A76 + 6×A55 + 玄铁 E902;R128 = RISC-V C906 + Cortex-M33;F133 = 玄铁 C906 + Cortex-M0;D1-H = C906 + M33。 典型形态是大核跑 Linux、MCU 核跑 RTOS 负责电源管理与实时外设, 所以「这颗芯片能不能做我的产品」这个问题,一半答案在 Linux,一半答案在 RTOS 侧的 SDK 质量。 第 6 章专门讲这条。
2.2 T 系列:工业与车载(当前主推)
T 系列是全志现在最值得投入的一条线 —— 它有 AEC-Q100 车规型号(T527V), 有 -40~85℃ 工业级覆盖,有 3 TOPS NPU 的中高端型号(T736),也有 4 核 + 3 网口 + 双 CAN-FD 的工控型号(T153)。 智能座舱、工业 PLC、工业网关、边缘计算网关都在用。
| 型号 | CPU | NPU | 内存 | 关键接口 | 定位 |
|---|---|---|---|---|---|
| T736 | 8 核(未核实具体配置) | 3 TOPS | LPDDR4/4X/5(未核实) | 座舱全接口(未核实) | 智能座舱、工业控制、边缘计算 |
| T536 | 4×Cortex-A55 | 3 TOPS | DDR3/DDR4/LPDDR4 | 3×GMAC、双 CAN-FD | PLC、工业网关、3D 打印机、电力设备 |
| T527 | 8×A55(4×1.8G + 4×1.4G 大小核) | 2 TOPS(INT8) | 32-bit DDR3/DDR3L/DDR4/LPDDR3/LPDDR4/LPDDR4X,最大 4 GB | 2×CAN、PCIe 2.1 + USB 3.1 combo、2×GMAC、10×UART、9×TWI、4×SPI、30×PWM | 智慧工业、智慧电力、机器人 |
| T527V | 同 T527 | 同 T527 | 同 T527 | 同 T527 | 通过 AEC-Q100 车规认证,智能座舱专用 |
| T507 | 4×Cortex-A55 | 无 | DDR3/DDR4/LPDDR4 | 与 H616 同 die,引出 LCD 与摄像头 | 工业 HMI、电力控制器 |
| T153 | 4×Cortex-A7 | 无 | DDR3 | 3×GMAC、双 CAN-FD、LocalBus | 工业自动化、工业 HMI |
| T113 / S3 | 4×Cortex-A7 | 无 | DDR2/DDR3 | LCD、部分型号带 CAN | 成本敏感工控、智能商显 |
这是一个硬门槛而非程度差别:做车必须买 T527V(有 AEC-Q100 认证), 普通 T527 只有工业级 -40~85℃ 认证,不能用于车规。 反过来,纯工业设备用 T527 就够,不必为 V 后缀付溢价。这个判断要在选型第一刀就做。
T527 的框图里还有几个容易被忽略但很实用的单元,值得单独记住:
- 独立 RISC-V MCU(玄铁 E906 @200 MHz):负责电源管理与实时外设,与 8 核 A55 通过 AMP 通信。 这就是 T527 能做到「独立 MCU 控制更实时」的原因。
- HiFi4 DSP:音频专用加速器,做语音唤醒与音频前处理比让 CPU 干更快更省电。
- 双链路 LVDS ×2 + MIPI-DSI ×2 + RGB ×2 + HDMI + eDP:支持双屏同显或异显, 工控 HMI 与双屏 POS 的关键能力。
- MIPI CSI「1+4」多摄:并口 CSI 支持 BT.1120 4×1080P@30fps,MIPI CSI 每 lane 最高 2.0 Gbit/s, 最大采集分辨率 8M@30fps。
- 原始 NAND 支持 80 bit/1 KB ECC:并行 NAND 方案的核心指标,直接决定颗粒选型。
2.3 A 系列:通用智能终端
A 系列面向「跑 Android 或 Linux 的通用终端」:平板、商显、智能家居中控、边缘计算盒子。 A733 是全志目前性能最强的通用平台,sbc.compare 的 7-Zip 实测里它的单核与多核成绩都超过 RK3399 与 RK3576。
| 型号 | CPU | GPU | NPU | 内存 / 存储 | 工艺 | 典型用途 |
|---|---|---|---|---|---|---|
| A733 | 2×Cortex-A76 @2.0 GHz + 6×Cortex-A55 @1.8 GHz + 玄铁 E902 MCU @~150 MHz | IMG PowerVR BXM-4-64 MC1 (OpenGL ES 3.2 / Vulkan 1.3 / OpenCL 3.0) | 3 TOPS | LPDDR5-2400、UFS 3.0、PCIe 3.0、USB 3.1 | 12 nm | 中高端平板、边缘计算、AIoT |
| A527 / A537 | 8×Cortex-A55(@2.0G 级) | ARM G57 MC1 | 无(未核实) | LPDDR4、PCIe | 22 nm | 中高端商显、双屏 POS、工业触摸屏、智能家居中控 |
| A133 | 4×Cortex-A7 @1.5 GHz | Mali-400 MP2 | 无 | LPDDR4、eMMC | 28 nm | 小型商显安卓屏、基础广告机(TDP 仅 6 W) |
| A333 | 4 核(未核实) | Mali-400(未核实) | 未核实 | LPDDR3 / DDR3 | 未核实 | 轻量 AI 应用、便宜平板 |
| A64 / A33 / A83T | A64 4×A53@1.8G;A33 8×A7;A83T 8×A7@1.8G | Mali-400 / T720 | 无 | DDR3 / DDR4 | 28 nm | 经典工控与存量商显方案 |
sbc.compare 的 7-Zip 实测:A733 单核 2022~2104 MIPS、多核 6816~7341 MIPS; Geekbench 6.4.0(某板卡实测)单核 669、多核 1621。 对比 RK3576(4×A72 + 4×A53)处于同一梯队。 A733 内置的 AI-SR 超分辨率算法(低分辨率重建到 4K)与 AI ISP(RAW 转清晰图像) 是两个实用算法配套,官方把它们与 NPU 打包宣传。
2.4 H 系列:OTT 与家庭影音
H 系列的定位非常窄但市场很大:电视盒子、智能屏、投影仪。它的核心指标是视频解码规格 + HDMI 版本, 不需要 NPU,也不需要 PCIe / USB 3.0。
| 型号 | CPU | GPU | 解码 | 编码 | 显示 | 封装 |
|---|---|---|---|---|---|---|
| H728 | 八核(未核实) | 有 | 未核实 | 未核实 | 未核实 | 2 TOPS NPU + AI 超分 |
| H618 | 4×Cortex-A53 @1.5 GHz | Mali-G31 MP2 | H.265 8K@24fps;H.264/VP9/AVS2 4K@30fps | H.264 4K@25fps;JPEG 1080P@60fps | HDMI 4K@60fps + CVBS | TFBGA-284 |
| H616 | 4×Cortex-A53 @1.5 GHz | Mali-G31 MP2 | 同 H618 | 同 H618 | HDMI 2.0a 4K@60Hz + CVBS(PAL/NTSC) | TFBGA-284,0.65 mm pitch,0.35 mm ball,14×12 mm |
| H313 / H135 | Cortex-A53(未核实) | Mali-450(未核实) | 4K(未核实) | 1080P(未核实) | HDMI | 未核实 |
| H3 | 4×Cortex-A7 @1.4 GHz | Mali-400 MP2 | 1080P | 1080P | HDMI 2.0 | 未核实 |
两者 die 基本相同,差异是 L2 Cache 从 512 KB 提升到 1 MB,且 die revision 不同。
VER_REG(地址 0x3000024)最低 8 位记录 die 版本,BSP 区分 0x00 与 0x02:
· revision 0:CPUX_CFG IP 块在 0x09010000(与 H616 用户手册一致)
· revision 2:同一功能块搬到 0x08100000
这个差异只影响 U-Boot 与 Trusted Firmware-A(新版 SDK 会自动识别),内核不受影响。
实践中 H616 多为 版本号 rev0、H618 均为 rev2。该 IP 块与 L2 容量变化大概率对应(官方未正式确认)。
H618 从内核视角与 H616 完全兼容,但 U-Boot / TF-A / sunxi-fel 需要额外支持,这些都已进入主线。
另外两条容易忽略的事实:
- H616 相比 H6 砍掉了 USB 3.0 与 PCIe,但多了一路 10/100M 以太网。 代价是可用带宽下降,收益是 BOM 简化。
- H616 起不再有 CPUS(ARISC 管理处理器)与配套的 A2 SRAM —— 意味着 suspend-to-RAM 必须完全依赖 Linux 自身的 PM 子系统,不能用 crust。 这条对电池供电产品是硬约束,见第 14.1 节。
H616/H618 的内存映射已扩展到 4 GB 以上,但 EMAC 的 DMA 控制器物理地址只有 32 位, DMA buffer 不能放在 3 GB 以上的物理地址(网卡驱动会自动要求内核分配在 4 GB 以下)。 而 MMC 控制器被改造过,支持最多 15 GB DRAM,所以 SD / eMMC 的 DMA 可以用满全部内存。 这两条限制不对称,做大内存 + 网卡的方案时必须知道。
2.5 V 系列:低功耗 AI 视觉
V 系列是全志近两年增长最快的一条线。它们的共同特征是双核或多核异构 + AI-ISP + 极低功耗, 面向 IPC、智能门锁、门铃、AI 眼镜、辅助驾驶这类「小体积 + 长时间待机 + 要看图」的产品。
| 型号 | 架构与主频 | NPU / 算力 | 视频能力 | 内存 | 封装 |
|---|---|---|---|---|---|
| V881 | 双玄铁 C907 + 单核 E907 | 1 TOPS | 4K@30fps 编码、24MP 拍照、Wi-Fi 6 | 未核实 | AI 眼镜 / 可穿戴相机 |
| V861 | 未核实 | AI-ISP 处理器 | 2MP@30fps | 64 MB 内置 | 低成本 AI-IPC、低功耗相机 |
| V838 | 未核实 | 有 | 3 路 MIPI-CSI、64 MB 三路 1080P 编码 | 64 MB | 多摄 IPC、智能门铃 |
| V853 | Cortex-A7 @1.2 GHz + RISC-V E907 @600 MHz(22 nm) | 1 TOPS INT8 (TensorFlow / Caffe / TFLite / PyTorch / ONNX) | H.264/H.265 4K@15fps、5MP@25fps;MJPEG 1080P@60fps | 16-bit DDR3/DDR3L 最大 1 GB、eMMC 5.1、SD 3.0、SPI NOR/NAND | 未核实 |
| V821 | 双 RISC-V:主核 up to 1.2 GHz + MCU 600 MHz | 专用算子加速(conv / depthwiseconv / maxpool / add / concat) | H.264 3072×3072;单目 1080P@30+640×480@30;双目 1080P@15fps×2;JPEG 8192×8192 | 内置 64 MB DDR2(SiP) | QFN88, 9×9 mm |
| V831 | 未核实 | 未核实 | 轻量视觉高清视频处理 | 未核实 | 智能门铃、可视对讲 |
V853:三核异构 + 1 TOPS
V853 的核心卖点是「通用计算 + 实时控制 + AI 加速 + 高清视觉」四合一: Cortex-A7 跑 Tina Linux 负责系统调度与网络,RISC-V E907 跑 Melis RTOS 负责低功耗待机、毫秒级唤醒与传感器处理, 两者通过 AMP / RPMsg 通信。1 TOPS NPU 支持主流框架, ISP 支持 3A、鱼眼校正、图像旋转缩放,最大 8 MP 传感器输入。 它的招牌是「1+4」五路摄像头(MIPI CSI 与并口 CSI 组合),在安防监控与辅助驾驶场景优势明显。
V821:极低功耗与存储组合的范本
V821 把低功耗做到了极致:Wi-Fi DTIM10 路由器保活功耗低至 180 μA @4.2V(官方数据), 支持 AOV 低功耗方案与毫秒级系统冷启动图像及视频抓拍。 集成 Wi-Fi(2.4G 1T1R,内置 LNA / PA / T/R 开关),做 IPC 整机不需要外挂 Wi-Fi 芯片。
官方明确写:支持 SPI NOR / SPI NAND / SD NAND / eMMC 等存储介质,并可以组合使用(如 SPI NOR + SD NAND 等)。 SPI NOR 放固件与启动,SD NAND 放大容量与掉电数据保持 —— 这是典型的低成本高可靠组合, 比 eMMC 更适合 AI 眼镜、智能门锁这类小体积终端。 另外 V821 的固件设计同时兼顾 SoC 与 Wi-Fi MCU,产线无需额外 Wi-Fi MCU 烧录流程, 这一条在成本与产线节拍上都是实打实的优势。详见附录 B.3。
V821 的 ISP 能力在同价位里非常突出,值得单列:最大 3264×2448 传感器输入; 支持 3A(AE/AWB/AF)且参数可调;支持 TDM 分时复用最多 2 个通道; 像素坏点校正与镜头阴影校正;局部色调映射;多级降噪(空域 + 时域)与色噪消除; 色彩调节与增强;4 路缩放(1×~1/16×)输出; PC 端工具支持在线 / 离线 / 远程调试 ISP。
V821 的版本差异(选型时必须区分):
| 型号 | 内存 | 视频输出 | Wi-Fi | 低功耗保活 |
|---|---|---|---|---|
| V821L2-XXX | 64 MB DDR2 | SPI 屏 | 不支持 | 不支持 |
| V821L2-WXX | 64 MB DDR2 | Serial RGB / i8080 / SPI 屏 | 支持 | 支持 |
| V821M2-WXX | 64 MB DDR2 | SPI 屏 | 支持 | 不支持 |
参考:索智 V821 开发板(SC1742V-V821)的公开配置为 主芯片 RISC-V up to 1 GHz + MCU up to 600 MHz、分立 DCDC 电源管理、SiP 64 MB DDR2、 16 MB SPI NOR(XB25VQ128)、2.4 GHz Wi-Fi、100 Mb 以太网、双目 1950×1080@15fps、2.4 寸屏、 125×90 mm 四层板,支持 Tina Linux 5.0。
2.6 MR / R 系列:机器人与 IoT
| 型号 | 定位 | 关键能力 | 典型终端 |
|---|---|---|---|
| MR527 | 高端 AI 机器人芯片 | 八核,融合感知 + 高精度地图定位 | 高端扫地机器人 |
| MR536 | 主流 AI 机器人芯片 | 强化传感器接口与实时控制 | 扫地机器人、割草机器人、服务机器人 |
| MR813 | 消费娱乐机器人专用 | — | 宇树 CyberDog 2 四足机器人的核心控制 |
| MR153 | 入门级服务机器人 | 4 核 ARM + RISC-V | 入门服务机器人 |
| R329 | AI 语音交互 | 内置 0.8 TOPS AIPU | 语音面板、智能音箱 |
| R128 | 超低功耗 AIoT | RISC-V C906 + Cortex-M33 双核,深度睡眠与自研电源域 | 智能家居中控、语音面板、电池终端 |
| R818 | 通用 AIoT | 4×Cortex-A53(未核实) | IoT 网关 |
它把 RISC-V C906 与 Cortex-M33 集成到一起,配合深度睡眠与自研电源域, 大量用于智能家居中控、语音面板、电池供电终端。常见配法是 16 MB SPI NOR(XB25VQ128) 做启动与主存 —— 典型的「NOR 一颗搞定」方案,BOM 极简。
2.7 F / D1 系列:低成本与 RISC-V 入门
| 型号 | 架构 | 说明 |
|---|---|---|
| F1C100s | ARM9 @288~600 MHz | 成本极低,LCD 控制器 / 上位机 / 电子价签 |
| F1C200s | ARM9(升级) | F1C100s 升级版,带 MIPI |
| F133 / F133A | 玄铁 C906 + Cortex-M0 | 常配 16~64 MB DDR2,RISC-V 教育与工控单板常见方案 |
| D1 | 玄铁 C906 @1.0 GHz | 7-Zip 实测 306 MIPS,RISC-V 边缘 AI 入门 |
| D1s | 玄铁 C906 | D1 简化版,配套哪吒(Nezha)开发板 |
| D1-H | 玄铁 C906 + Cortex-M33 | 哪吒 2 / 哪吒 C,集成 RISC-V 与 ARM 双核 |
D1 / D1s / D1-H 的 Tina Linux SDK 有完整开源版本:
repo init -u https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git,
无需申请权限,主线上游支持也较好。要摸清全志的工具链、Tina 的构建体系、设备树写法,从 D1 开始是最优路径。
2.8 料号怎么读
以 A733MX-HN3 为例(也适用于 T527MX-G001 这类写法):
| 字段 | 示例值 | 含义 |
|---|---|---|
| 系列字母 | A / T / H / V / R | 应用场景,见 1.3 节 |
| 型号号 | 733 / 527 / 618 | 同系列内按算力递增,跨系列不可比 |
| 封装代码 | MX | 大多为 BGA 阵列,密度相关,必须查 Datasheet |
| 温度等级 | H(工业级) | 商业级通常无此字母 |
| 硅版本 / 批号 | N3 / G001 | 版本或料号修订,下单前必须与全志确认是否仍在产 |
① 料号后缀不具备跨系列通用性。同一串后缀在 A 系列与 T 系列可能对应完全不同的封装与引脚数,
必须逐系列查该系列的 Datasheet 选型表。
② 量产前务必与全志或代理商确认 PCN 状态与生命周期。
全志消费类芯片生命周期比工业类短,部分 H / F 型号已进入 EOL 流程,而 T / A 系列仍在活跃供货。
这个确认动作要在立项时做,不要等到量产后补。
2.9 选型决策路径
把上面这些收敛成七个问题的决策树,从下往上问,第一个命中的分支就是答案:
来源:allwinnertech.com + linux-sunxi.org + aw-ol.com
补充三条不成文经验:
- 不确定就买官方或第三方的参考设计对应的芯片型号。全志参考设计里的板子已经把 DDR、PMIC、存储、 摄像头、显示全部验证过了 —— 你的产品即使要改,也应该只在参考设计的基础上改,而不是从零画原理图。
- 同一系列产品线内优先选高一档算力。T527 与 T536 差价有限,但 T527 有 2×CAN 与更多 UART/TWI, 后期发现接口不够的返工成本远高于差价。
- 做视觉产品先确认 ISP 而不是先确认 NPU。ISP 决定「能不能出好图」,NPU 决定「能不能跑算法」。 一个 1 TOPS NPU + 好 ISP 的组合,通常比 3 TOPS NPU + 弱 ISP 的组合出片质量好得多。
3 · 启动链与 BROM / FEL
这一章是全志文档里最该先读的一章。启动链的每一步都对应一类「板子不启动」的故障,把链路搞清楚,排障就有了坐标系。
3.1 四级启动链
全志的启动是一条固定四级链:
来源:linux-sunxi.org/BROM
因为 FEL 是 BROM 里的固定子程序,不依赖任何外部存储介质的内容。 BROM 无论在任何阶段失败,最终都会落到 FEL 模式。所以全志板子可以随便改启动分区、甚至刷一个空的 SD 卡, 只要按住 FEL 键就能救回来。反过来说,FEL 挂了才是真砖, 但 FEL 只存在于 BROM 里,物理上无法被软件破坏。
3.2 BROM 的地址布局
以 A10/A20 为例(后续系列结构类似但有裁剪),BROM 分成两半:
| 地址 | 内容 | 复位后的角色 |
|---|---|---|
0xFFFF0000 | FEL 模式 | 复位向量所在。上电即从这里取指令 |
0xFFFF0020 | FEL 入口 | BROM 失败兜底时跳转到这里 |
0xFFFF0028 | 复位向量代码 | 把 0xFFFF4000 的 eGON.BRM 载入 PC 并执行 |
0xFFFF4000 | eGON.BRM 主程序 | 做协处理器配置、关看门狗、配时钟与 Gating、设栈指针,然后跳到 boot |
boot 里立刻跳到 check_uboot,检查状态引脚(常称 FEL / BSP / uboot):
为低电平则进 FEL 模式(地址 0xFFFF0020);为高电平则依次尝试各启动介质,
每一步失败都继续试下一个,全部失败后也执行 FEL 模式。
3.3 启动介质探测顺序
不同系列顺序不同,但大体遵循「SD → eMMC / NAND → SPI NOR → FEL」:
| 系列 | 探测顺序(linux-sunxi.org 记录) |
|---|---|
| A10 / A20 | SD 卡0(MMC0) → 内部 NAND → SD 卡2(MMC2) → SPI NOR → FEL |
| A31 | 先查 FEL 键 → SD0 → NAND → SD2 → emmc2 → SPI → FEL;另有 boot_sel[0:1] 两个选择位 |
| A64 | SMHC0(SD 卡) → SMHC2(eMMC) → SPI0(SPI NOR) → FEL |
BSP 引脚内部有 50 kΩ 上拉。把它拉到 GND,SoC 会直接尝试进 FEL。 默认情况下 A10/A20 要「所有启动介质都失败」才落到 FEL —— 这在 NAND 里有合法头时尤其明显。 实用推论:如果你想强制进 FEL 但没有按键,短路 BSP 引脚到地比「破坏启动介质」更可靠。
3.4 为什么全志几乎不会变砖
这一节单独强调,因为它改变的是排障的思维方式:不要从「猜哪里坏了」开始,而要从「用 FEL 反证」开始。
来源:docs.u-boot.org + docs.aw-ol.com
FEL 通道的三个特性决定了它是全志排障的核心工具:
① 不依赖任何可改写的内容 —— 固件全坏了它照样工作;
② 不需要串口硬件 —— 串口配错、U-Boot 还没起来时它依然可用;
③ 能主动把固件送进 DRAM 执行 —— sunxi-fel uboot 可以把 U-Boot 直接喂进 SRAM 跑起来,
拿到完整串口输出。
所以「拿不到串口输出」这件事本身,永远不该成为排障的障碍。
3.5 进入 FEL 的五种方法
| 方法 | 操作 | 适用场景 |
|---|---|---|
| ① 按住 FEL 键 | 开发板正面中间的 FEL 按住不放再插 USB 上电 | 开发调试,最常用 |
| ② 空设备烧写 | 设备内无系统,直接插 USB,工具自动弹烧写提示,点 YES | 新板首次烧录 |
| ③ 软件命令 | 串口或 ADB 里执行 reboot efex | 已有系统升级 |
| ④ 串口敲「2」 | 上电过程中在串口终端不停敲字符 2 | 无法启动时救砖(隐藏操作) |
| ⑤ 短接 NAND 供电 | 上电时短接 NAND 供电脚,让 BROM 检测不到 NAND 当作空片 | 救砖(老方案,有 ESD 风险) |
① PC 识别到设备后就可以松开 FEL 键,不需要一直按住。
② 方法 ④ 的隐藏操作是真的按住键盘的「2」键,很多新开发者不知道。
③ 方法 ⑤ 短接后 PC 识别到设备即可松开,不要一直短接(有 ESD 风险)。
3.6 boot0 / boot1 与旧式布局
使用全志官方 bootloader(尤其从 NAND 启动)时,顺序略有不同:
BROM 加载 boot0(作为 SPL) → boot0 chainload boot1 → boot1 从第一个 FAT 分区加载 boot.axf
→ boot.axf chainload u-boot → kernel。boot0 / boot1 位于分区表之前的不可访问区域。
boot.axf 还带 framebuffer 显示能力,能开机出 logo。
SD 卡经典布局(32 步长)
| 起始块 | 大小 | 用途 |
|---|---|---|
| 0 | 8 KB | 空闲(可放分区表) |
| 8 | 24 KB | Initial SPL loader |
| 32 | 512 KB | U-Boot |
| 544 | 128 KB | environment |
| 672 | 352 KB | reserved |
| 1024 | - | 空闲,供分区使用 |
传统 8 KB 位置(第 16 扇区)正好落在潜在 GPT 分区表中间,
烧完这一下分区表就废了。好在从 H3(2014 年末)开始,新 SoC 也支持从 128 KB(第 256 扇区)启动,
这个位置在 GPT 之外,新设计一律用 128 KB。
实测 H616 的 Linux 主线支持也是这样推荐的:bs=8k seek=1(等价 8 KB)或 bs=1k seek=128。
Legacy boot0 方法(了解即可)
- boot0 是32 KB 的 blob,负责 DRAM 初始化、加载其余固件、切换到 AArch64 模式。
- 提取:
dd if=/dev/sd of=boot0.bin bs=8k skip=1 count=4。 - 原始 boot0 在 uSD 卡 19096 KB 处找 U-Boot,并期望特定 magic 头与校验。
- 打包工具
boot0img:boot0img -o firmware.img -B boot0.img -u u-boot-dtb.bin -e -s bl31;-B选项可让它不找 19 MB 处,改成紧跟 boot0 之后读取。
U-Boot 官方文档明确:现在 U-Boot 的 SPL 已经带完整的 DRAM 初始化代码,boot0 方式不再是必需, 它只在 Pine64 早期板子上曾是唯一方案。而且这个方法只对 A64 板子的 boot0 文件有效, H5 用的是不兼容的布局。新项目一律走 SPL 路线。
3.7 启动介质与存储选型
这一小节是本文档专门为存储选型同事准备的。全志平台对存储方案的友好度在国产 SoC 里排第一: BROM 支持 SD / eMMC / 原始 NAND / SPI NOR 四类启动介质,厂商还提供「未贴片预烧录」服务。
| 介质 | BROM 搜索位置 | 容量上限 | 成本 | 掉电风险 | 适用 |
|---|---|---|---|---|---|
| SPI NOR | SPI0 的 0 与 32 KB(固定) | 16~128 MB | 低 | 无(只读启动) | 纯启动固件;配 NAND / eMMC 做主存 |
| SPI NAND | SPI0(需 BROM 支持对应型号) | 128 MB~4 GB | 中 | 中 | 启动 + 主存一体,省 eMMC |
| 原始 NAND(并行) | NAND 控制器 | 512 MB~8 GB | 中低 | 高(有坏块与 ECC) | 成本敏感、容量大的方案;T527 支持 80 bit/1 KB ECC |
| eMMC | SMHC0 / SMHC2 | 8~256 GB | 高 | 低(内部 ECC 磨损均衡) | 高可靠终端;安卓与工业项目主流 |
| SD / TF 卡 | SMHC0 的 8 KB 或 128 KB | 可换 | 最低 | 无 | 开发调试、量产 SD 卡方案 |
这个数字必须记住,因为它是死的:
地址 0x00000 写 sunxi-spl.bin,
地址 0x08000(即 32768)写 u-boot.itb。
写入必须严格对齐,写错位置芯片就是「找不到可启动头」而落到 FEL。
常见的 16 MB(128 Mbit)器件如 XB25VQ128 在容量上留有大量余量给 U-Boot 环境与 dtb。
① 必须支持 Quad Read 快速读命令(如 0xEB)。BROM 读取 SPL 用的是快速读指令,
只支持 1-1-1 或 1-1-2 的器件在 BROM 阶段读不到 SPL,会直接落 FEL。
② 不需要支持 XIP —— BROM 一定先把 SPL 拷到 SRAM 再执行。但需要支持 Page Program(单页编程)与 Block Erase。
| SoC | SD 卡 | eMMC |
|---|---|---|
| A64 | SMHC0 | SMHC2 |
| H616 / H618 | SMHC0 | SMHC0 或 SMHC2(按板设计) |
| T527 | SD 3.0 / eMMC 5.1 | 依板设计 |
用 U-Boot 的 mmc write 写 eMMC 时,mmc dev 的编号按实际挂载来,
照抄别人的 A64 命令在 H616 上会写错设备。
更完整的存储组合方案(含 NOR + SD NAND、预烧录等)见 附录 B。
4 · Tina Linux 开发环境
这一章讲怎么把 SDK 拉起来、把固件编出来。全志的构建体系比 MCU 复杂,但流程本身是固定的五步。
4.1 三条软件路线怎么选
| 路线 | 是什么 | 适合谁 | 成本 |
|---|---|---|---|
| Tina Linux | 基于 OpenWrt 的裁剪 Linux 发行版,全志主线产品线都配 | 做 A / T / H / R 系列 Android/Linux 产品 | 中,概念多但资料全 |
| 主线 Linux | U-Boot mainline + TF-A + Linux mainline,Armbian / Debian | 追求长期维护、社区驱动、开发板 | 中低,但缺全志私有外设 |
| Melis / RTOS | 全志自研 RTOS,跑在芯片内置的 Cortex-M / RISC-V MCU 上 | 只要实时控制、不要 Linux 的场合 | 低,SDK 直接给 |
典型形态是 大核跑 Linux,MCU 核跑 RTOS 负责电源管理与实时外设,
两侧通过 AMP / RPMsg 通信。V853 官方明确:Cortex-A7 跑 Tina Linux,RISC-V E907 跑 Melis RTOS。
选型时评估的其实不是一颗芯片,而是「Linux SDK + RTOS SDK」这个组合,
两条路都通才能做产品,详见第 6 章。
4.2 编译环境搭建
推荐 Ubuntu 20.04(WSL / 虚拟机均可)。老 SDK 可能只能编在 Ubuntu 14,可用 Docker 解决。
ack antlr3 asciidoc autoconf automake autopoint binutils bison
build-essential bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext
gcc-multilib g++-multilib git gperf haveged help2man intltool libc6-dev-i386 libelf-dev
libfuse-dev libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev
libncursesw5-dev libpython3-dev libreadline-dev libssl-dev libtool lrzsz mkisofs msmtp ninja-build
p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools python3-setuptools
qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim
make make-guile gcc g++ wget xmlto xxd zlib1g-dev
Tina SDK 依赖库较旧,官方早期推荐 Ubuntu 14。社区做法:docker pull ubuntu:trusty
作为基础镜像,ENV FORCE_UNSAFE_CONFIGURE=1 并全量替换为国内镜像源,然后在里面编译。
新建工程时优先用较新的 SDK 版本。
repo 工具(必须用全志提供的)
Tina 用 repo 管理多仓库。必须安装全志提供的 repo 脚本,
用 Google 原版会报 Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle 或 Network is unreachable。
sudo curl -o /usr/bin/repo https://storage.googleapis.com/git-repo-downloads/repo
sudo chmod a+x /usr/bin/repo
repo --version
# 国内镜像(强烈建议)
echo export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' >> ~/.bashrc
source ~/.bashrc
# 缓存凭据,避免一小时内反复输入密码
git config --global credential.helper store4.3 repo 与 SDK 拉取
权限说明:早期需把论坛会员升到 L2,目前注册账号即可下载。
mkdir tina-sdk && cd tina-sdk
repo init -u https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git \
-b master -m tina-d1-h.xml
# 提示 Username 时输入全志在线开发者论坛的账号密码
repo sync
repo start product-smartx-d1-h-tina-stable-v2.0 --all
其它方案的 manifest 路径不同,形如 <产品>_Tina_<线>/manifest.git。
现象:
bash: build/envsetup.sh: line 1: syntax error near unexpected token `$'{
''
bash: build/envsetup.sh: line 1: `function hmm() {'
原因:Windows 编辑器把脚本存成了 CRLF。处置:
sudo apt install dos2unix
find -type f | xargs dos2unix
预防:所有改 SDK 内文件的编辑器都要强制 LF 换行、UTF-8 无 BOM。
VS Code 把 files.eol 设为 \n;改完跑一次 bash -n 语法检查比事后 dos2unix 更省事。
4.4 SDK 目录结构
来源:docs.aw-ol.com/docs/soc/f136/software/SDK_使用指南
路径是 device/config/chips/<芯片型号>/configs/<板名>/,典型文件:
BoardConfig.mk—— 选择用哪个 U-Boot defconfigsys_config.fex—— 早期平台的 pinmux / 时钟 / DRAM 参数(结构化配置)sys_partition.fex—— 分区表与固件布局env.cfg—— U-Boot 环境变量(earlyprintk 等)board.dts—— 设备树(较新平台的主战场)
改串口、改分区、改 pinmux、改 DRAM 全在这里,不要去改内核源码。
4.5 五步编译流程
来源:docs.aw-ol.com
source build/envsetup.sh # ① 获取环境变量
lunch # ② 载入方案(交互菜单)
# 也可 lunch d1-h_nezha-tina 直写
make -j32 # ③ 编译
pack # ④ 打包
# ⑤ 烧录(见第 5 章)
软件包之间的依赖关系没被正确声明时,多线程会失败。失败后用单线程重跑看真实错误:
make -j1
不要盲目加大 -j:线程数超过物理核数很多(比如 32 核机器上 -j128)会因内存耗尽被 OOM Killer 杀掉, 表现为编译「莫名中断」,看起来像依赖问题。经验值:物理核数 × 1.5~2,编译机内存至少 16 GB。
lunch 菜单里常见两种:d1-h_nezha-tina(标准方案)与
d1-h_nezha_min-tina(最小系统方案,只保证系统能起来、不带外设驱动)。
先用 _min 方案打通启动,再切标准方案加外设,这样能把「启动问题」和「外设问题」分开。
4.6 分区配置 sys_partition.fex
这个文件决定固件布局,注释自带在文件内。核心片段:
[mbr]
size = 16384
[partition_start]
[partition]
name = boot-resource
size = 504
downloadfile = "boot-resource.fex"
user_type = 0x8000
[partition]
name = env
size = 504
downloadfile = "env.fex"
user_type = 0x8000
[partition]
name = env-redund
size = 504
downloadfile = "env.fex"
user_type = 0x8000
[partition]
name = boot
size = 10080
downloadfile = "boot.fex"
user_type = 0x8000
[partition]
name = rootfs
size = 126000
downloadfile = "rootfs.fex"
user_type = 0x8000
[partition]
name = private
size = 10240
user_type = 0x8000
[partition]
name = rootfs_data
size = 10240
user_type = 0x8000
| 字段 | 作用 | 坑 |
|---|---|---|
size | 单位是扇区(512 B),不是 KB | 写成 KB 值的十倍 → 分区爆大或装不下 |
user_type = 0x8000 | 标记为用户可读写分区 | 缺了这一行固件刷不进去 |
keydata = 1 | 私有数据分区,重新量产数据不丢 | 存校准数据 / 密钥的分区必须加 |
encrypt = 1 | 加密烧录 | 烧录速度明显下降,量产评估时要算进去 |
4.7 只编一块的快捷命令
| 命令 | 作用 |
|---|---|
mboot | 同时编译 boot0 与 U-Boot(Tina 任意目录下可用) |
mboot0 | 只编译 boot0 |
muboot | 只编译 U-Boot |
mkernel | 只编译内核 |
mm | 编译当前包(只能在包路径下操作) |
make <包路径>/install | 在根目录编译某个包,例 make package/utils/rwcheck/install |
make <包路径>/clean | 清某个包的编译临时文件 |
make kernel_menuconfig | 进入内核配置界面 |
make menuconfig | 进入 Tina 配置界面 |
mp | make + pack 合并命令 |
4.8 主线 Linux 路线
不想背 Tina 的构建体系,可以走主线。这条路在 H616/H618 这类新平台上是主线可用的。
64 位 SoC 必须先构建 TF-A 的 BL31:
git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
cd trusted-firmware-a
make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_h616 DEBUG=1
export BL31=$(pwd)/build/sun50i_h616/debug/bl31.bin
make <board>_defconfig
make
平台(PLAT=)对照:A64 / H5 → sun50i_a64;H6 → sun50i_h6;
H616 → sun50i_h616;R329 → sun50i_r329。
查全部支持平台:find plat/allwinner -name platform.mk。
可选的 crust(管理处理器固件,用于 suspend-to-RAM,需 or1k 交叉编译器):
部分带 CPUS 管理控制器的 SoC 可用它做电源管理。
不构建时设 SCP=/dev/null 消除警告。H616 起没有 CPUS,这条路走不通(见 14.1 节)。
查 defconfig 的技巧:git grep -l MACH_SUN8I_H3 configs 或
git grep -l sun50i-h6-orangepi-3 configs。
| 平台 | 主线支持度(截至 2026-10) |
|---|---|
| H616 / H618 / H6 | pinctrl + clock 驱动自 v5.12 起入主线;基础 Linux v6.0 起可用;U-Boot 与 TF-A 已合入官方仓库。H618 内核视角与 H616 完全兼容,但 U-Boot / TF-A / sunxi-fel 需要 die revision 2 的额外支持(已进入主线) |
| A64 | 主线支持完善,mainline 板卡最多(Orange Pi、Radxa 等) |
| T113 / T527 | 主要靠 Tina / vendor 内核,主线覆盖不完整 |
做产品量产 → Tina:原厂 BSP 齐全,外设驱动(ISP / VE / 显示 / 音频)完整,有量产烧录方案。
做长期维护 / 学习 / 需要社区驱动 → mainline:内核新、能用 Armbian、避免被 vendor 内核绑死。
代价是全志私有外设(ISP 调优、VE、G2D、SmartColor)驱动不完整。
4.9 SDK 常见问题速查
| 报错 | 原因 | 处置 |
|---|---|---|
Cannot get .../git-repo/clone.bundle / Network is unreachable | 用了 Google 原版 repo | 装全志提供的 repo 脚本 |
Host key verification failed. | SSH 权限或密钥问题 | chmod 700 ~/.ssh; chmod 600 ~/.ssh/id_rsa; ssh-agent bash; ssh-add ~/.ssh/id_rsa |
ssh: connect to host 61.143.53.198 port22: Connection timed out | repo 脚本里写死了旧 IP | which repo 找到路径,把里面所有 61.143.53.198 替换为 sdk.allwinnertech.com |
envsetup.sh: syntax error near unexpected token $'{\r' | CRLF 换行 | find -type f | xargs dos2unix |
| repo sync 反复要密码 | 新版 git 默认不缓存凭据 | git config --global credential.helper store |
| SSH 公钥不生效 | 复制时引入换行符 | cat ~/.ssh/id_rsa.pub 打印到屏幕再复制,别用编辑器粘贴 |
lunch 菜单为空 / 找不到方案 | 方案名错或 SDK 没拉全 | 核对 device/config/chips/ 下的目录名 |
make 中途莫名中断 | OOM(-j 太大) | 降并行度;make -j1 看真实错误 |
更复杂的编译烧写问题,全志官方论坛是最终去处:https://bbs.aw-ol.com/。
5 · 烧录与量产
把固件写进启动介质。这一章讲工具怎么选、命令怎么用,以及全志生态里最有价值的一个产能方案。
5.1 五种官方烧录工具
来源:docs.aw-ol.com/d1/study/study_4compile/
全志支持厂商把固件提前烧进未贴片的存储器件(eMMC / NAND / NOR), 产线上只需贴片与测试。需要与存储器件原厂和全志原厂拉通定制设备。 这条路的价值:省掉整段烧录工序,把单台烧录耗时从几十秒压到零。 对量大且固件稳定的机型,单台工时成本下降非常可观 —— 这也是存储供应商在谈全志项目时应该主动提的方案点。
5.2 PhoenixSuit 完整流程
- 打开 PhoenixSuit,设备上电并插 USB 连接 PC,工具提示识别到设备
- 点「一键刷机」→ 浏览选择要烧写的
.img固件 - 点「立即升级」—— 此时工具通过 USB 给设备发重启命令, 设备带着烧写标识重启,进入烧写模式
- 设备重新到 boot 阶段会自动进行烧写,可以看到进度条在动
- 烧写成功,设备自动重启
驱动说明:企业开发者在安装 APST 的同时也会安装全志 USB 驱动,无需单独再安装。 个人开发者从官网下载驱动包即可。
开发中如果刷了配置错误的固件导致设备启动异常,就无法按正常流程烧写了,需要强制进 FEL:
① 按住 PC 键盘的「2」键 —— 设备上电过程中在串口终端不停输入「2」,
设备启动时检查到「2」就自动跳到烧写模式。(是真的按住键盘的「2」键,不是命令。)
② 短接 NAND 供电 —— 上电时用镊子或杜邦线短接 NAND 的供电脚(右下角两根),
让 BROM 检查不到 NAND,误以为是空片,按空片启动流程自动进烧写模式。
两种方法都是 PC 识别到设备后即可松开,不用一直按住或短接。
5.3 sunxi-fel 命令详解
sunxi-fel 是全志平台的命令行烧录工具,功能比 GUI 工具强,也是排障的核心。
# 编译
git clone https://github.com/linux-sunxi/sunxi-tools.git
cd sunxi-tools && make
# 识别设备(-v 详细、-p 打印端口名)
./sunxi-fel ver -v -p
# 输出形如:AWUSBFEX soc=00001689(A64) ...
| 命令 | 作用 |
|---|---|
sunxi-fel ver | 识别设备,打印 SoC 型号与 FEL 版本(所有操作前先跑这条确认连上了) |
sunxi-fel uboot <file> | 把带 SPL 的 U-Boot 上传到 SRAM 并执行(不写介质)—— 拿到完整 U-Boot 串口输出的关键手段 |
sunxi-fel -f <file> | 上传并执行任意文件(-f 表示「只跑不启动下一级」) |
sunxi-fel spiflash-write <偏移> <文件> | 写 SPI NOR / SPI Flash |
sunxi-fel read <地址> <长度> <文件> | 读回存储内容(做校验用) |
sunxi-fel dump <地址> <长度> <文件> | dump 指定地址区域 |
sunxi-fel eMMC <子命令> | eMMC 相关操作(具体子命令见 --help) |
sunxi-fel --help | 查看当前版本支持的全部命令(不同版本差异较大) |
设备没有可用的调试串口时(U-Boot 还没起来、或串口配错),FEL 通道依然能工作。
用 sunxi-fel uboot 直接把 U-Boot 送进 DRAM 并执行,可以拿到完整 U-Boot 串口输出
(包括 DRAM: 256 MiB 这类关键信息)。这是排查「串口完全没打印」类问题的第一手段。
5.4 U-Boot 镜像的四种安装
来源:docs.u-boot.org/en/latest/board/allwinner/sunxi.html
全志 ARM 平台的 U-Boot 构建系统生成单一集成镜像 u-boot-sunxi-with-spl.bin,
它同时包含 SPL(含 BROM 可识别的签名头与校验)、U-Boot proper、板级设备树,以及 SoC 需要时的其它固件镜像。
64 位 SoC 必须先构建 TF-A 的 BL31(A64 / H5 / H6 / H616 / R329),平台对照见 4.8 节。
可选的 crust:部分带 CPUS 管理控制器的 SoC 可用它提供电源管理(主要是 suspend-to-RAM)。
需要 OpenRISC(or1k)交叉编译器;不构建时设 SCP=/dev/null 消除警告。
H616 起没有 CPUS,这条路走不通。
5.5 产线三种模式对比
| 模式 | 设备形态 | 速度 | 单台成本 | 数据保护 | 适用 |
|---|---|---|---|---|---|
| PhoenixUSBpro 多机烧录 | 一台 PC 控 8 台设备 | 中 | 中 | 无 | 中批量 |
| 量产 SD 卡(PhoenixCard) | 产线插 SD 卡自动烧 | 快 | 低(卡可重复用) | 无 | 带卡槽设备 |
| 未贴片预烧录 | 存储器件上机前已烧好 | 最快 | 需定制设备 | 可含密钥 | 超大规模 |
产线烧录的检查项
- 固件版本号与产线工单一致(不要拿错包),MD5 已记录
- Secure Boot 是否已启用(决定后续能否降级)
- 分区加密
encrypt设置已评估(影响速度) - 分区校验
verify = 1已开启 - 私有数据分区
keydata = 1是否需要保留(校准数据 / 密钥) - 量产 SD 卡是否可重复使用(写坏后需重新制作)
- 8 机并发时是否稳定(USB 供电与带宽是瓶颈)
5.6 Secure Boot 与固件加密
T527 级以上的框图里能看到:Trustzone / Secure Boot / Crypto Engine / Security ID。
| 机制 | 作用 | 实施要点 |
|---|---|---|
| Secure Boot | 各级固件签名验签,链式信任 | 密钥存 eFuse / OTP;一旦启用不可降级 |
| 固件分区加密 | 固件内容加密,防扒取 | sys_partition.fex 的 encrypt = 1,代价是烧录变慢 |
| Security ID | 每芯片唯一 ID | 可用于设备绑定、激活码、授权计数 |
| eFuse / OTP | 一次性可编程熔丝 | 存密钥与生命周期标记 |
| 分区校验 | 烧录后校验 | verify = 1 |
| 量产数据保护 | 重新量产不丢数据 | keydata = 1 |
先用不验签的镜像把量产后段流程跑通(包括测试、老化、包装), 最后一步才开启验签。开启后密钥丢失则芯片无法降级回不验签的状态 (除非 efuse 尚未烧死)。同时必须保留一个不做加密 / 验签的烧录工位专门处理返修板。
| 维度 | 全志 Tina(vendor) | 主线 U-Boot + Linux |
|---|---|---|
| 分区描述文件 | sys_partition.fex | 设备树 + U-Boot partitions 节点 |
| 打包输入 | pack 命令 | cat spl.bin u-boot.itb > u-boot-sunxi-with-spl.bin |
| 分区表类型 | MBR([mbr] size = 16384,单位 KB) | GPT |
| U-Boot 启动偏移 | 8 KB(会压 GPT) | 128 KB(避开 GPT) |
| 配置粒度 | .fex(早期是二进制结构) | .dts 设备树(文本,可 diff) |
为什么 Tina 里还能看到 sys_config.fex:早期 A 系列用它描述 pinmux、时钟、DRAM 参数 ——
是二进制结构,改了要靠工具编译。较新的 SDK(T113 起、H616 / T527 起)逐步迁移到设备树。
迁移的实际好处是 DRAM 参数与 pinmux 都能在 .dts 里看到文本,diff 友好。
但两套体系在新 SDK 里常常并存 —— 改启动串口可能需要同时改 .fex 与 board.dts,见 4.6 节。