从 MCU 到 Linux:机器人嵌入式OTA升级原理解密

OTA升级不是"下载一个bin文件往里写"这么简单。本文聚焦两种主流方案——MCU的双Bank架构与Linux的A/B分区,讲清楚升级过程中"断电不失手,变砖可回滚"的核心机制,并对比 SWUpdate、Mender、RAUC三大开源工具。


一、OTA升级核心原理

无论MCU还是Linux,OTA的本质都是先写备份、再切换、最后擦除的三步走:

🔴 异常处理

重启验证

🟢 第三步:Bootloader校验并写入目标分区

从备用区读取固件

验签+验完整性

解压(如已压缩)

写入目标Flash分区

更新启动标记

🟡 第二步:重启进入Bootloader

设置更新标志位

跳转至Bootloader

Bootloader读取标志位

🔵 第一步:下载固件到暂存区

接收.swu/.bin固件包

完整性校验
SHA-256 / CRC32

签名验证
RSA / ECDSA

写入备用区

启动成功?

回滚至旧版本

报告升级失败

断电不失手的秘密:新固件永远先写入备用区,原固件原地不动。断电发生时Bootloader依然能加载旧系统。


二、MCU方案:双Bank架构

MCU没有文件系统,Flash直接被分成两块——Bank A和Bank B,轮着用。

2.1 Flash分区结构

MCU Flash 分区布局

Bootloader
固定区域
永不改动

App Bank A
当前运行固件

App Bank B
备用区
接收新固件

Config区
升级标志/版本号

2.2 双Bank升级流程

OTA升级路径

正常启动路径

标志指向B

上电/复位

Bank A 可用?

从Bank A启动

运行App

接收新固件

写入Bank B

Bank B 验签

验签通过?

丢弃Bank B
保持Bank A

设置升级标志
bank_to_boot=B

系统重启

从Bank B启动

运行新固件

Bank A变为备用区

BA

BB

2.3 常见MCU OTA开源方案

方案特点适用场景
MCUBoot开源安全Bootloader,支持签名验签、AES加密、双BankNXP/i.MX系列
STM32FOTAST官方方案,支持X-CUBE-BLE/X-CUBE-SBSFUSTM32全系列
ESP8266/ESP32 OTAWiFi模块内置,支持HTTP/HTTPS差分升级ESP系列
TI UNIFLASH德州仪器方案,支持Serial/BLE/WiFi多种方式TI CC系列

三、Linux方案:A/B分区

Linux设备有文件系统,OTA分区远比MCU复杂。主流方案是用A/B分区实现无缝切换。

3.1 eMMC/SD卡分区结构

Config配置区

UBoot环境变量
bootlimit/bootpart

Data数据分区

数据分区
配置文件/日志/应用数据

Rootfs分区 A/B

rootfs A
当前系统

rootfs B
备用系统

Boot分区 A/B

Kernel A

Kernel B

3.2 A/B分区升级流程

新系统启动验证

重启切换

OTA下载写入

当前系统运行中

后台下载

成功

失败

rootfs A 正在运行
应用持续服务

从服务器下载.swu包

sw-description
描述镜像配置

写入rootfs B
不触碰rootfs A

更新UBoot环境变量
bootpart=B

重启

从rootfs B启动

健康检查通过?

确认升级成功
rootfs A变为备用

回滚rootfs A
保持原状

3.3 UBoot A/B切换原理

连续失败回滚

fail_count++

fail_count > bootlimit?

回滚至旧分区
fail_count=0

A→B 切换逻辑

setenv bootpart 2

saveenv
固化到Flash

reset

UBoot 环境变量

mmcbootpart=1
当前启动分区

mmcbootpart=2
备用分区

bootlimit=3
允许连续失败次数


四、开源方案对比

方案类型签名验签差分升级断电保护适用平台
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双BankFlash物理分成两块,Bootloader决定从哪块启动
Linux A/B分区文件系统级分区,OTA工具写备用分区,UBoot切换启动目标
共同点新固件验签通过前,原系统纹丝不动;任何阶段失败都能回滚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值