自动售货机OTA升级实战:从固件更新到百万设备无损升级的系统设计~YH
设备铺出去之后,OTA是刚需。但不成熟的OTA方案会让设备成片变砖。
一、OTA的必要性:为什么要做OTA
自动售货机部署后,固件更新是常态:修复bug、增加新支付方式、优化制冷控制算法、更新安全补丁。
如果每次更新都要派人去现场烧录,人力成本巨大。偏远点位的设备可能几个月才有机会去一次,等去的时候问题已经造成了损失。
OTA是工业设备的标准配置,不是可选项。
二、升级方案选型:双分区vs差分
两种主流方案:
双分区(A/B分区)方案:两个完全相同的分区。升级时把新固件写入备用分区,校验通过后切换启动分区。
差分升级方案:只传输新旧固件的差异部分,设备端合成新固件。优点是节省流量(差分包通常只有全量包的10%-20%),缺点是实现复杂(需要制作差分patch)。
三、双分区方案:更安全,更可靠
对于售货机,我们选了双分区方案。
分区划分:bootloader分区、OTA分区A(当前运行)、OTA分区B(备用)、工厂分区(出厂固件,急救用)。
升级流程:从服务器下载新固件到备用分区。校验完整性(MD5或SHA256)。校验通过后修改启动标志,切换到备用分区。重启设备。
回滚机制:新固件启动后,如果10分钟内没有上报"启动成功",自动回滚到旧分区。如果连续3次启动失败,从工厂分区启动。
四、关键设计:断点续传和流量控制
售货机走4G网络,流量要钱,网络也不太稳定。这两个设计很关键:
断点续传:升级包下载过程中断,下次继续从断点处下载,不需要重新下载整个包。百万台设备同时升级能节省大量流量。
流量控制:升级包下发不能一股脑推送所有设备——服务器扛不住,4G基站也扛不住。采用分批推送策略,每批5000台,每批间隔10分钟。
五、安全加固:防止固件被篡改
OTA通道是设备的安全命门。如果被攻击者利用,后果不堪设想。
安全措施:
签名验证:固件包用RSA私钥签名,设备用公钥验证签名。签名不对的不刷写。
加密传输:升级包通过HTTPS传输,防止中间人截获。
设备认证:设备向服务器请求升级时,用设备唯一ID和动态Token做身份认证,防止恶意设备消耗服务器资源。
六、升级失败率:实际数据
5000台设备、23次OTA升级的统计数据:
| 指标 | 数值 |
|---|---|
| 升级成功率 | 99.21% |
| 自动回滚率 | 0.54% |
| 需要人工干预 | 0.25% |
| 平均升级耗时 | 4分32秒 |
| 平均流量消耗 | 12.8MB/台 |
需要人工干预的0.25%,主要是设备网络条件极差(地下二层停车场、偏远山区)导致升级包下载失败。
七、总结
OTA升级看起来简单,做起来细节很多。
最核心的一点:备好回滚方案,给设备留好"后悔药"。没有任何升级方案是100%可靠的。万一出了问题,设备要能自己救自己,而不是等人去现场救。
