更小更快更省流量的差分升级

你的远程升级还在升级整个APP?快来试试差分升级 , 立功科技基于AMetal SDK提供了一套完整的差分升级算法 , 升级固件更小、下载速度更快、大大降低网络不稳定造成传输失败概率 , 同时更节省内存 。
一、差分包原理
在讲差分升级之前 , 先简单介绍一下差分升级的原理和概念 , 差分升级是将新老固件具有差异的部分剥离出来 , 例如固件从V1.1.0升级到V1.1.1 , 两个固件相比只修改了1K的内容 , 如下图红色部分为不同部分 , 将该部分剥离出来生成差分包Diff_V1.1.0~V1.11 , 通过云端将差分包推送到设备端 , 设备端接收完成之后 , 先解压差分包 , 再通过差分恢复算法 , 根据差分包中的数据标志 , 将新老固件进行融合 , 变成新的固件 , 从而完成升级 。

更小更快更省流量的差分升级
文章插图
图 1 差分原理
这种升级方式的优点是升级固件更小、下载速度也更快 , 也更加节省内存空间 , 相对于整包升级方式 , 缺点是依赖特定固件 , 例如该差分包为V1.1.0固件升级到V1.1.1固件的差分包Diff_V1.1.0~V1.1.1 , 该差分包只能用于升级版本号是V1.1.0固件的设备 , 其他版本号固件的设备不能用它升级 , 流程控制上要求比较严格 , 整包的升级则不依赖特殊固件 , 随时可以升级 。

更小更快更省流量的差分升级
文章插图
图 2 差分升级
二、差分升级架构
立功科技基于AMetal SDK软件平台 , 设计了一套完整的差分升级的算法 。以基于华大HC32L196芯片设计差分升级为例 , 该芯片Flash为256K(0x000_0000~0x0003_FFFF) , 首先需要对Flash进行划分 , 主要划分为4个部分:BootLoader区、应用区、download区、参数区 , BootLoader区用于引导升级 , 应用区为升级后的应用程序 , download区为下载差分包存储区间 , 参数区用于存储特定参数 。各区大小按照实际使用情况 , 进行合理划分 。

更小更快更省流量的差分升级
文章插图
图 3 flash划分
三、差分升级流程
首先介绍BootLoader执行的流程 , 如下图所示 , 芯片上电或复位之后 , 首先开始运行BootLoader的代码 , 之后检测按键 , 按键作为升级的提示 , 如按键按下 , 准备升级 , 进入接收固件状态 , 如接收到固件 , 对固件进行校验 , 校验通过后 , 置位跳转标志位 , 如校验未通过 , 重新进入接收固件状态 。检测到跳转标志位之后 , 检查应用程序是否有效 , 有效进入应用程序运行 , 无效进入接收固件状态 。如果没有按键按下 , 检查是否有升级标志 , 有则解析download区的新固件 , 通过解压缩算法和解差分算法 , 修改覆盖旧固件 , 设置跳转标志 , 检查应用程序是否有效 , 有效则运行应用程序 。

更小更快更省流量的差分升级
文章插图
图 4 升级流程
相信到这不少读者已经清楚升级的原理和升级的过程是怎么回事了 , 下面介绍一下差分固件的生成 。
四、差分包制作
如开篇所述 , 差分文件是将新老固件进行对比 , 然后将有差异的部分取出 , 作为升级的固件 。那么如何才能达到最小的差分固件呢?首先我们需要了解用于升级的MCU的Flash的最小擦除单位是多少 , 是512字节、1K、2K还是4K?这个与芯片相关 , 理论上划分得越细 , 最后的生成文件也就会越小 。
【更小更快更省流量的差分升级】 以HC32L196芯片为例 , 设置最小的分块单位为1K , 将新老两份固件都按1K去划分 , 划分多少块按两份固件中最大的一个决定 , 不足的那个后面补0 , 例如新的固件35.3K , 老固件34K , 那么最终按新固件大小划分 , 即按1K划分 , 将两份固件划分为36块 , 划分之后 , 两个固件对应序号的块分别进行比较 , 将新固件不同于老固件的块进行标记和压缩 , 最后将所有不同的块压缩为一个包 , 即差分升级包 , 到此差分升级包制作完成 。AMetal SDK中提供了一个专门用于制作差分包的上位机工具 , 借助该工具可简单完成差分文件的制作 。

更小更快更省流量的差分升级
文章插图
图 5 差分固件格式
.dfma {position: relative;width: 1000px;margin: 0 auto;}.dfma a::after {position: absolute;left: 0;bottom: 0;width: 30px;line-height: 1.4;text-align: center;background-color: rgba(0, 0, 0, .5);color: #fff;font-size: 12px;content: "广告";}.dfma img {display: block;}
更小更快更省流量的差分升级
文章插图

    推荐阅读