文章目录
一、OTA介绍
1.1 什么是OTA?
空中下载技术,Over-The-Air,简称OTA。
字面理解,空中、无接触、远程的方式进行升级。
可以通过服务器、移动通信网络等网络连接,来实现终端数据和产品的更新。
1.2 为什么要OTA?
(1)迭代
(2)修复
(3)进化
二、OTA类型
2.1 检查升级
进入面板,这里不会主动提示用户需要升级新的固件,只有用户点到设备详情中的检查固件升级,才会弹框提醒。
2.2 提醒升级
进入面板,app主动检测一次升级,若有新版本固件,则弹窗提示升级,用户可以选择升级,也可以点取消关闭弹框正常通过面板操作设备。
2.3 强制升级
进入面板,app主动检测一次升级,若当前设备固件有新版本则弹框覆盖,点击确定进入升级,若点取消则会返回,即不升级无法在当前面板操作此设备。
2.4 静默升级
不通过app,设备(正常情况下本身与云端保持长连接)会轮循检查是否有新的设备强制升级的固件。如果有设备强制升级的固件,设备就会直接去升级,这里不需要app端。
三、OTA升级方式
首先介绍下芯片的flash分区。
如图,起始地址一般存放bootload,其它空间有的存储业务数据,有的存储系统数据等,我们的固件存放在APP应用区。
3.1 乒乓升级
两个大小相同的分区APP1、APP2,如果当前在APP1分区执行代码,升级时就把固件下载到APP2分区。升级成功后设备重启,模组切换到APP2分区执行;下次再升级就切换到APP1分区,一直这样轮询。
3.2 拷贝升级
两个大小相同的分区APP、OTA。APP分区存放要执行的固件,当OTA升级时会先把OTA数据包写入OTA分区,然后再将OTA数据搬移到APP数据区,最后从APP数据区启动执行。
3.3 压缩升级
两个大小相同的分区APP、OTA。 APP分区存放要执行的固件,OTA分区存放OTA数据的压缩包,bootload启动时会先将OTA压缩包解压,再搬移到APP分区。
其中,APP分区会比OTA分区要大,可以大大节省空间。
3.4 差分升级
差分升级又叫增量更新,是将旧版本与新版本的数据文件做差分,得到升级部分的补丁即差分包;用户下载了差分包之后,将旧版本数据与差分包进行组合,以得到新版本的数据文件,多数采用BSDiff差分算法。
可以这么理解,差分升级并不是重新安装新的更新包,而是根据新旧版本差异,生成一个补丁包,客户端可以下载补丁包,完成更新。
那么,BSDiff差分算法是什么?
BSDiff 是一个差量更新算法,它在服务器端运行BSDiff 算法产生 patch 包,在客户端运行 BSPatch 算法,将旧文件和 patch 包合成新文件。
BSDiff基本步骤:
(1)对 old 文件中所有子字符串形成一个字典。
(2)对比 old 文件和 new 文件,产生 diff string 和extra string。
(3)将 diff string 和 extra string 以及相应的控制字用zip压缩成一个 patch 包。
BSPatch基本步骤:
客户端合成patch的基本步骤
(1)接收patch包;
(2)解压patch包。
(3)还原new文件。
3.5 升级方式比较
OTA升级方式 | 优点 | 缺点 |
---|---|---|
乒乓升级 | 上电在对应APP分区直接执行就可以,启动速度快。 | 两个APP分区切换,代码维护不便,且易出错; 占用内存空间大。 |
拷贝升级 | 固件只需在一个APP分区执行,方便,不易出错。 | bootload启动时需要先进行拷贝,速度慢; 占用内存空间大。 |
压缩升级 | 由于OTA分区占用小,所以APP分区内存比较大。 | bootload启动时需要先解压再拷贝,速度慢。 |
差分升级 | 当新旧版本相同的部分比较多时,OTA数据包比较小,下载方便快速。 | 当新旧版本差异很大的话,OTA数据包可能会存在比new文件还大的情况; 补丁包需要跟old文件的版本对应,当更新的产品存在多种不同版本的情况时,就比较麻烦,且必须由云端生成。 |