嵌入式物联网设备OTA全量、增量升级(bsdiff+Hdiffpatch+Xdelta)_嵌入式多 bin 升级

2.差分/增量升级意义

差分升级一般来说,可以极大的减少下载量,特别是对于小资源的嵌入式单片机来说,可以极大的减少维护成本,因为嵌入式设备的升级维护一般都是空中ota升级,比如NB-IoT、LoraWan、蓝牙、红外等,下载速度受到波特率、包长、空口环境等限制,更新固件包非常的慢,而差分升级可以让下载的过程极大的缩小。正常的维护版本,生成的差分包bin理论上在原bin的%5左右,80K的文件小改动实测差分包仅有3K。对于像水表、燃气表、报警器、断路器、雷电流检测等应用程序维护有一定帮助意义。

3.差分算法

在构造差分增量包中,常见的算法有Bsdiff算法、Xdelta算法、Hdiffpatch算法等。

Bsdiff算法

在匹配新旧文件过程中,有部分源代码内容完全相同,有部分源代码相似度很高,只有部分字节作了稀疏改动,另有一些源代码内容相同,但是存储地址存在一个固定的偏移量,对于这一特性的源代码数据,具有高度的可压缩性。Bsdiff算法引入了diff string的概念,在新旧文件中找到这样的两部分内容,求出字节的差异,作为diff string进行压缩。而对于不符合要求的新文件源码中新增部分,作为extra string进行保存。
Bsdiff算法在匹配时,先对旧文件的所有字符进行后缀排序形成一个字典,然后使用二分查找算法找到最优的匹配长度,依次得到整个文档所有的diff string和extra string,把这些文件信息以bzib2的方式压缩成升级增量文件。
Bsdiff算法的增量文件中的数据由四部分组成:Header,ctrl block,diff block,extra block。
Header 头文件包含了目标文件的起始地址,新文件大小,控制长度等。
ctrl block提供控制部分信息,指示旧文件中保留的长度,以 及 需 要 从 diff block 和 extra block 中提取的信息,在旧文件中信息的地址偏移量等。
diff block,extra block 分别包含所有的 diff string和 extra string。
设备端在接收到patch文件后,解压文件,并根据差分文件的组成格式,通过bspatch算法,还原生成新文件。
由Bsdiff算法原理可知,它所生成的patch文件并不会比源文件小,但是文件结构压缩性强,导致传输的升级数据量比完整升级要小很多,有效减少了冗余数据传输量。Bsdiff 算法高度依赖压缩算法,当升级文件修改的内容小概率地满足稀疏变化时,差分文件的压缩效率降低,相比整包升级的优势不明显。

Xdelta算法

Xdelta 和其他的差分升级算法一样,也需要对新文件和旧文件进行比较匹配作差分。在产生 patch 包时,Xdelta 可采用 hash 或者 suffix trees 等算法来寻找最大的匹配长度的字符串。
Xdelta 差分算法的 patch文件中用到了 add、run 及 copy 三种命令。其中 add 用于将匹配到的指定长度的字符串从源文件拷到目标文件,run 用于在目标文件中加入新文件的增加部分,copy 将匹配到的文件成块的移动到目标文件中的目标地址上。
Xdelta 对增量文件采用 Vcdiff 格式的编码方式,用 128 进制的数据表示形式,经过重编码的字符,相较于原数据节省了存储空间,达到了高效压缩的目的。
Xdelta 算法的 patch 生成过程可通过其他算法来优化,考虑到设备端的内存消耗,patch 过程引入了Windows 块技术,随着 Windows 块变大,可达到的最长字符串的匹配结果越精确,产生的 patch 文件越小,但同时也会消耗更多的内存资源。因此,采用高效的匹配优化算法和适合的 Windows 块大小,是 Xdelta 算法的关键。

Hdiffpatch

Hdiffpatch是一种高效的增量算法,在运行时间复杂度及内存空间占用率上相较于前两种算法存在很大的优势。Hdiffpatch在差异文件生成阶段引入了覆盖线C的概念,用于标志新旧版本文件的匹配度。算法将两版本程序文件看成两个具有不同长度的数组,分别表示newData[m]和oldData[n]。
覆盖线C是点Ei.jj的集合,其中newData[i] = oldDta[j]。
如果C = {Ei,j,Ei+1,j+1,…,eI+K,J+K},表示该覆盖线的长度为k。
由此可知,经过匹配之后存在许多长度不等的覆盖线,根据差分包制作经验,当覆盖线长度大于7时,增量算法优势明显。
patch文件就是所有满足要求的覆盖线和newData[m]中没有被匹配上的数据组成的文档。
其中覆盖线表示信息结构包括:newPos,表示在新文档中的起始位置i;oldPos,表示在旧文件中的起始位置j;length,表示覆盖线长度k。
Hdiffpatch算法对匹配的覆盖线采取优化措施。其中包括:
覆盖线包含。如果覆盖线a被另外一条完全包含,则在C中删除a信息,以减小重复信息来简化差分文件。
覆盖线合并。对于在一条直线上的两段覆盖线,如果它们之间的间隔长度小于某一值,则把这两条覆盖线合并成一条,其中的延长部分数据作为patch文件的一部分。
覆盖线删除。对于某些单独的覆盖线,做扩展成本比较大,无法进一步优化,在patch文件生成时,对此进行直接删除,以减小存储及升级的控制代价。

4.差分升级方案

传统的升级方案都会有一个差分还原区来存放还原后的升级包,flash分区如图:
在这里插入图片描述

由于本应用MCU FLASH资源受限,无法有APP差分还原区,只能在差分还原过程中边还原边搬运到APP,分区如下图:
在这里插入图片描述

根据方案最后方案选择了Bsdiff算法+minilzo压缩算法。
本方案中采用使用瑞萨16位低功耗MCU,其具有 128K 的 FLASH,8KB RAM,boot中同时支持全量升级方案和差分(增量)升级方案,当差分升级出现异常时可以采用全量升级进行升级,bootloader 中还将包含 Bspatch 算法及与minilzo解压缩算法。升级过程中需要低电、掉电保护,考虑断电续升级;下载过程中需要考虑空口环境,加入断点续传等异常功能,保证系统的强壮性。

引用 https://www.niftyadmin.cn/n/4934614.html?action=onClick

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

net/topics/618654289)

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
物联网是指通过无线通信技术将各种设备、物品互联互通,实现信息共享和远程控制的网络系统。STM32开发板是一种常用的微控制器开发板,其可以与各种外部设备相连,如传感器、执行器等。在物联网应用中,使用STM32开发板进行设备的控制和数据的采集十分常见。 为了方便用户对物联网设备进行控制,可以使用App、小程序或者Web页面等方式实现远程控制。在本场景中,我们使用了STM32开发板、W5500以太网模块和ESP8266 WiFi模块。 W5500是一款硬件以太网控制器,它可以用于将STM32开发板连接到网络。通过W5500,STM32可以通过Ethernet协议与Internet进行通信。用户可以通过编写STM32的程序,实现与云服务器的数据交互与远程控制。 同时,我们还可以使用ESP8266模块连接到STM32开发板,使得STM32具备WiFi通信能力。ESP8266可以连接到无线网络,并提供与云服务器的通信接口。使用ESP8266模块,我们可以使用HTTP或MQTT等协议与互联网进行通信,实现物联网设备的远程控制和OTA(Over-The-Air)升级OTA升级指的是通过网络向设备更新固件,而不需要将设备连接到计算机进行有线升级。在物联网应用中,OTA升级可以实现灵活的固件更新,为设备带来更多的功能和修复漏洞。使用OTA升级,我们可以通过网络将固件更新的指令发送到STM32开发板,然后通过W5500或ESP8266模块将固件文件下载到设备,最后进行固件更新。这样,设备的固件可以实时更新,同时不需要用户手动连接设备和计算机。 总之,通过使用STM32开发板、W5500以太网模块、ESP8266 WiFi模块以及相应的App、小程序或者Web页面,我们可以实现对物联网设备的远程控制和OTA升级

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值