OTA升级不是"下载一个bin文件往里写"这么简单。本文聚焦两种主流方案——MCU的双Bank架构与Linux的A/B分区,讲清楚升级过程中"断电不失手,变砖可回滚"的核心机制,并对比 SWUpdate、Mender、RAUC三大开源工具。
一、OTA升级核心原理
无论MCU还是Linux,OTA的本质都是先写备份、再切换、最后擦除的三步走:
断电不失手的秘密:新固件永远先写入备用区,原固件原地不动。断电发生时Bootloader依然能加载旧系统。
二、MCU方案:双Bank架构
MCU没有文件系统,Flash直接被分成两块——Bank A和Bank B,轮着用。
2.1 Flash分区结构
2.2 双Bank升级流程
2.3 常见MCU OTA开源方案
| 方案 | 特点 | 适用场景 |
|---|---|---|
| MCUBoot | 开源安全Bootloader,支持签名验签、AES加密、双Bank | NXP/i.MX系列 |
| STM32FOTA | ST官方方案,支持X-CUBE-BLE/X-CUBE-SBSFU | STM32全系列 |
| ESP8266/ESP32 OTA | WiFi模块内置,支持HTTP/HTTPS差分升级 | ESP系列 |
| TI UNIFLASH | 德州仪器方案,支持Serial/BLE/WiFi多种方式 | TI CC系列 |
三、Linux方案:A/B分区
Linux设备有文件系统,OTA分区远比MCU复杂。主流方案是用A/B分区实现无缝切换。
3.1 eMMC/SD卡分区结构
3.2 A/B分区升级流程
3.3 UBoot A/B切换原理
四、开源方案对比
| 方案 | 类型 | 签名验签 | 差分升级 | 断电保护 | 适用平台 |
|---|---|---|---|---|---|
| SWUpdate | 块+文件级 | ✅ RSA/ECDSA | ✅ | ✅ A/B分区 | 嵌入式Linux |
| Mender | 块级 | ✅ RSA | ✅ | ✅ A/B分区 | Yocto/Linux |
| RAUC | 块级 | ✅ RSA/Ed25519 | ✅ | ✅ A/B分区 | 嵌入式Linux |
| balenaOS | 容器化 | ✅ | ✅ delta | ✅ A/B分区 | ARM/Yocto |
核心结论:三者都支持A/B分区和签名验签。SWUpdate最灵活(支持单文件更新),RAUC安全标准最高(Muttus模式),Mender与Yocto集成最深。
五、总结
OTA升级的本质是**“不破坏性写入 + 可回滚切换”**。记住一个口诀:
MCU看Bank,Linux看分区;下载写备用,重启再切换;验签不过关,坚决不刷写。
| 方案 | 核心差异 |
|---|---|
| MCU双Bank | Flash物理分成两块,Bootloader决定从哪块启动 |
| Linux A/B分区 | 文件系统级分区,OTA工具写备用分区,UBoot切换启动目标 |
| 共同点 | 新固件验签通过前,原系统纹丝不动;任何阶段失败都能回滚 |

288

被折叠的 条评论
为什么被折叠?



