OTA 为什么难做

OTA(空中下载升级)听着简单——远程推个新固件。但设备在现场、可能断电、网络不稳、机型还杂。一次升级失败就可能把设备变砖。所以 OTA 的核心不是「能升级」,而是「升级失败也能救回来」。

OTA 的第一原则:永远留一条能退回旧版本的后路。
OTA 三大风险
  • 升级中断电设备变砖。
  • 网络不稳包下不全。
  • 机型太杂新固件不兼容。
OTA 配图:下方一台发光的显示器轮廓,一道向上的光流箭头指向右上方的云朵轮廓
设备在下方,光流沿箭头上行到云端。

双分区与回滚

主流做法是双分区(A/B):当前运行 A 分区,新固件写到 B 分区,校验通过才切过去启动。启动几次失败就自动回滚到 A。这样即使新固件起不来,设备也不会死。

// 伪代码:升级状态机
download(firmware) -> verify(md5)
 -> write(B) -> setBoot(B)
 -> reboot -> if bootFail: rollback(A)

差分升级与校验

完整固件可能几 MB 起步,弱网下全量下载很慢。差分包只传新旧版本的差异,设备端在本地合并。下载过程必须做 MD5/签名校验,包不全、被篡改都不允许写分区。

灰度与分批

新固件不能一夜之间推给所有设备。先推给一小批测试机,观察几天故障率;再按比例分批放大。平台要能按机型、地区、客户分组推送,出问题能停在某一批。

升级时机与断点续传

升级要挑设备空闲、电量充足、网络稳定的窗口,不能在用设备的关键作业时打断。下载支持断点续传,网络断了下次接着传,不用从头来。升级完设备要上报版本号,平台才知道谁升了、谁没升。

落地清单
  • 双分区失败自动回滚。
  • 差分弱网省流量。
  • 灰度分批放量、可叫停。
  • 续传断点接着下。