差分文件生成方法、基于该差分文件的升级方法及系统与流程

文档序号:14940724发布日期:2018-07-13 20:40阅读:315来源:国知局

本发明涉及终端升级技术,尤其涉及一种差分文件生成方法,还涉及一种基于所述差分文件的升级方法及系统。



背景技术:

在嵌入式项目开发过程中,往往无法一次达到最终设计目标,需要在运行过程中不断修复bug或增加一些新的功能,因此不可避免要进行在线的升级。然而,受限于成本考虑,嵌入式软硬件环境不可能很强大,传统的升级方案需要对固件做完整备份,需要的程序存储空间往往超出了系统容量限制,不得不选择更加高端的cpu,大大增加了硬件成本;大多数应用环境下网速较慢,流量费用较高,执行完整升级时下载固件耗费时间较久,对业务本身会造成比较大的影响。

现有技术中,软件新老版本间的差异主要是代码或数据的变化,差异信息的大小通常远小于新版本软件的大小,但是由于编译器的优化因素,代码或数据段可能会发生移位或有着极小但大量且分散的差异,因此差分算法需要解决2个主要问题:一是如何高效的在老版本文件中寻找尽可能多的可用于构造新文件版本文件的数据段,二是如何尽可能缩减描述由老版本文件转换为新版本文件需要的字节数。

目前市面上主流的差分算法大致分为三类:

从上表可以看出,dicdiff在压缩率方面有较大的优势,使用后缀排序算法进行数据匹配,能够高效的找出尽可能多的旧数据重用,然而在实际的嵌入式应用中,代码的升级改动往往会引入大量不连续的微小变化,如图1所示,使之难以产生大断连续的可重用数据段,因此,基于完全匹配的dicdiff算法难以获得令人满意的效果。



技术实现要素:

为解决现有技术中的问题,本发明提供一种差分文件生成方法,还提供一种基于所述差分文件的升级方法及系统,最大限度利用原有固件内容,只需要下载新老升级文件的差异部分,即可执行差异更新,生成正确的新固件,达到升级的目的。

本发明差分文件生成方法如下步骤:

a:对旧升级文件建立索引,用于搜索可重用的数据段;

b:分析新升级文件和旧升级文件:从头扫描新升级文件,并在老升级文件中搜索可重用的数据段,获取新旧升级文件的完全匹配区;

c:对新旧升级文件分区:以完全匹配区为间隔,以设定差异为基准,向左右各扩展一定比例内容相近的区域,并与完全匹配区一起,合并计入diff区,其他的部分计入extra区;d:生成差分文件:所述差分文件包括文件描述头和压缩后的三个数据段,所述三个数据段分别为:

ctrl区:存储差分及插入操作的起始地址与长度的命令字;

diff区:存储差分串,所述差分串由新旧升级文件的diff区相减所得;

extra区:步骤c中新升级文件的extra区。

本发明作进一步改进,在步骤a中,采用快速后缀排序算法,快速构造旧升级文件数据段的后缀数组和名次数组,通过这两个数组可以快速匹配出新老升级文件可以共用的部分。

本发明作进一步改进,在步骤b中,完全匹配区的可重用的数据段需要满足以下条件:

(1)可重用的数据段要达到一定长度;

(2)可重用的的数据段之间需达到设定的差异。

本发明作进一步改进,在第(1)个条件中,所述可重用的数据段的长度至少为8个字节。

本发明作进一步改进,在第(2)个条件中,可重用的数据段之间有8个字节以上的差异。

本发明作进一步改进,在步骤c中,所述内容相近的区域的相似比例为50%。目前市面上的通用作法是必须完全相同才能重用。本例采用内容相近的好处是,可以重用只有个别字节差异的大段匹配区,大大提升老文件数据重用概率。

本发明还提供一种基于所述差分文件的升级方法,包括如下步骤:

s1:终端开机,bootloader启动;

s2:读取升级区标记位,判读是否存在差分文件,如果是,执行差分升级步骤s3;如果否,执行步骤s4;

s3:所述差分升级步骤包括:

s31:读取升级进度标记,如果为0则执行全新升级过程,反之则继续前一次升级过程;

s32:按块对差分文件进行反差分解压,生成新升级文件,写入flash;

s33:更新升级进度标记位,直至升级完成;

s34:清除ota区标记位。

s4:启动内核,执行正常开机流程,上传版本号到ota管理平台。

本发明作进一步改进,在步骤s2中,如果存在差分文件,对差分文件进行完整性校验,如果差分文件是完整合法的,则进入差分升级步骤,否则,执行步骤s4。

本发明作进一步改进,步骤s32中,反差分解压的处理步骤为:将差分文件解压缩,提取其中ctrl区,针对diff区,将差分串与旧升级文件执行加法运算;针对extra区,执行插入运算,即可正确还原新升级文件。

本发明作进一步改进,还包括步骤:

s5:连接ota服务器,判断是否有新版本,如果是,下载差分数据,如果否,等待下一次连接;

s6:判断是否下载成功,如果否,继续下载,如果是,重启终端。

本发明还提供一种实现所述升级方法的系统,包括ota服务器、ota管理平台和ota终端,所述ota服务器分别与ota管理平台和ota终端相连,其中,所述ota云服务器用于生成差分文件,对ota管理平台和ota终端进行配置、管理及升级;所述ota管理平台用于实现对ota终端升级进行设置与监控、数据统计、查询ota终端实时状态及各类参数配置,远程控制ota终端;所述ota终端用于从ota服务器获取升级文件,对自身进行升级,并将自身升级情况通过ota服务器上报给ota管理平台。

与现有技术相比,本发明的有益效果是:采用了快速遍历的方式寻找最长匹配字串,可以尽最大限度的找出老文件中可以重用的部分,差异匹配过程,容许存在一定的误差,又大大增加了字串匹配的命中率,具有极好的压缩效率;采用高度压缩的差分算法,只需下载差异部分,即可完成固件升级,降低了升级流量消耗,大大加快了升级速度;核心算法占用代码及程序空间小于20k,对系统资源占用极少,不增加方案成本;差分文件下载过程支持断点续传,支持多次下载。

附图说明

图1为常见的一实施例代码改动示意图;

图2为本发明差分文件生成方法流程图;

图3为本发明差分文件生成示意图;

图4为升级系统整体架构图;

图5为升级方法流程图。

具体实施方式

下面结合附图和实施例对本发明做进一步详细说明。

如图2所示,本发明差分文件生成方法采用了一种全新的算法,算法的核心思想是采用模糊匹配代替完全匹配。允许数据段有少量差异的重用,通过将新老升级文件进行相减,然后将差异部分进行高度压缩,降低整体差分文件包体积。

具体地,本例差分文件生成方法如下步骤:

a:对旧升级文件建立索引,便于后续快速搜寻可重用的数据段。本例采用的是快速后缀排序算法,快速构造旧升级文件(简称旧文件)数据流的后缀数组和名次数组,通过这两个数组可以快速匹配出新升级文件(简称新文件)和老升级文件可以共用的部分。

b:分析新旧文件:从头扫描新升级文件,并在老升级文件中搜索可重用的数据段,获取新旧升级文件的完全匹配区。

此处将新旧文件的差异归类为diff区(内容相近)和extra(内容相差较大)区。从头开始扫描新文件,并每次调用查找函数,在老文件中搜索可重用的数据段,当可重用的数据段满足以下两个条件时,称之为完全匹配区:

(1)可重用的数据必须达到一定长度,因为太短的话,不足以覆盖用于差分记录消耗的字节数。本例采用最少8个字节,大至相当于一条差分记录压缩后的长度;

(2)可重用的数据段之间必须有足够大的差异,因为差异太小,完全可以合并为一条差分记录。本例设定至少有8个字节以上的差异,可以根据实际情况调整。

比如,在搜索过程中,第一次匹配命中的数据段,由于匹配长度不够或者本身与上一次匹配之间差异不够大,均不能成为完全匹配区,继续向后搜索,直至同时满足这两个条件。

c:对新旧升级文件分区:以步骤b中的完全匹配区为间隔,考虑到代码的修改引起的目标文件变化具有一定的聚集效应,完全匹配区周边差异一般相对较小,为了尽可能加大可重用的数据段大小,约定以50%的差异为基准,向左右各扩展一定比例内容相近的区域,分别称为前向扩展区与后向扩展区,与完全匹配区一起,合并计入diff区(差异较小),大大提升老文件数据重用概率。然后将余下的部分统一计入extra区(差异较大)。当然,本例也可以将差异率设置为其他的数值。

d:生成差分文件:所述差分文件包括文件描述头和压缩后的三个数据段,所述三个数据段分别为:

ctrl区:存储差分及插入操作的起始地址与长度的命令字;

diff区:存储差分串,所述差分串由新旧升级文件的diff区相减所得;

extra区:步骤c中新升级文件的extra区。

至此,差分文件生成过程完成,具体的差分文件生成过程如图3所示,本例通过将新老升级文件进行比对,提取差异较小的部分进行差分运算,提取差异较大的部分进行插入运算,从而得到差分文件,其中差分部分绝大多数为0,可以被高度压缩。

本例的差分文件生成过程中,时间复杂度为o(nlogn),空间复杂度为o(n),n为老文件的长度,但是由于差分文件的生成一般是在服务器端进行,对于时间空间的占用并不敏感,所以并不影响算法的使用。根据差分文件生成过程的描述,很容易推导出差分还原过程的算法:首先将差分文件解压缩,提取其中ctrl控制区,并对diff区,将差分串与老文件执行加法,针对extra区,执行插入,即可正确还原新文件。由于算法采用了快速遍历的方式寻找最长匹配字串,可以尽最大限度的找出老文件中可以重用的部分,差异匹配过程,容许存在一定的误差,又大大增加了字串匹配的命中率,算法具有极好的压缩效率。

差分效果分析:

以下针对实际的固件版本按本方法进行差分运算后,结论如下:

可见,在嵌入式固件中,使用本差分文件生成方法,能大大提升压缩率,降低升级消耗的存储空间及网络流量,加快升级速度。

本发明还提供一种基于所述差分文件的升级方法,主要应用于ota(over-the-air,空中下载软件升级)终端的升级,其中,所述空中下载软件升级是指通过云端升级技术,为具有连网功能的设备:例如手机、平板电脑、便携式媒体播放器、移动互联网设备等提供固件升级服务,用户使用网络以按需、易扩展的方式获取智能终端系统升级包,并通过ota进行云端升级,完成系统修复和优化。

本例采用的系统架构如图4所示,本系统架构由三大部件构成:

ota云服务器:基于阿里云计算服务构架的集群,可供千万终端同时接入,服务器架构支持水平扩展,通过增加服务单元实现运力扩展,基于冗余备份的服务器架构设计,随时提供高实时性,高可用的ota服务。一方面,带有ota功能的硬件终端通过2g/3g/4g网络直连服务器,或通过wifi/bt等中转连接,以及各类vpn或隧道技术均能完美接入;另一方面,管理pc或智能手机app均可直接接入ota云服务器,随时随地实现远程配置、管理、升级等功能。

ota终端:内置泰比特ota软件模块的智能终端、车载设备、穿载设备,可与ota服务器保持实时在线、每天一次、定时连接等多种连接方式。ota应用模块采用标准ansic标写,可以方便的兼容各类嵌入式平台;提供了远程查询设置参数,远程控制终端等扩展接口,方便用于管理终端。

ota管理平台,也可以为管理app:通过浏览器登录泰比特ota管理平台或者手机下载泰比特ota管理app,可以实现对终端升级进行设置与监控,数据统计,查询终端实时状态及各类参数配置,远程控制等。

如图5所示,本发明的ota终端(简称终端)基于所述差分文件的升级方法,包括如下步骤:

s1:终端开机,bootloader启动;

s2:bootloader完成基本的硬件初始化后,读取ota区标记位,判读是否存在差分文件,如果是,执行差分升级步骤s3进行差分升级;如果否,执行步骤s4。

其中,所述差分升级步骤s3包括步骤:

s31:读取升级进度标记,如果为0则执行全新升级过程,反之则继续前一次升级过程;

s32:按块对差分文件进行反差分解压,生成新升级文件,写入flash;

s33:更新升级进度标记位,直至升级完成;

s34:清除ota区标记位。

所述步骤32中,所述反差分解压的处理步骤为:将差分文件解压缩,提取其中ctrl区,针对diff区,将差分串与旧升级文件执行加法运算;针对extra区,执行插入运算,即可正确还原新升级文件。

s4:启动内核,执行正常开机流程,连接ota云服务器,上传版本号到ota管理平台。

其中,在步骤s2中,如果存在差分文件,对差分文件进行完整性校验,如果差分文件是完整合法的,则进入差分升级步骤,否则,执行步骤s4。

此外,在终端正常运行过程中,还会执行以下步骤:

s5:判断是否有新版本,如果是,下载差分数据,如果否,等待下一次连接;

s6:判断是否下载成功,如果否,继续下载,如果是,重启终端。

本发明升级方法具有如下特色:

(1)采用高度压缩的差分算法,只需下载差异部分,即可完成固件升级,降低了升级流量消耗,大大加快了升级速度;

(2)核心算法占用代码及程序空间小于20k,对系统资源占用极少,不增加方案成本;

(3)差分文件下载过程支持断点续传,支持多次下载;

(4)对于存储空间充足的终端,提供更新过程回溯机制,百分百保障升级安全。对于资源紧张的终端,极尽优化flash擦写过程,大大降低了断电等异常引起的固件丢失概率;

(5)ota云服务器能够提供精准授时,通过时间分散算法,可以精准定位在全球任何区域凌晨1~5点间自动完成升级,尽最大可能降低升级过程对业务的影响;

(6)支持短信、串口、或平台指令触发即时升级;

(7)提供远程查询参数、远程设置参数、远程控制等功能扩展,为用户应用提供辅助的参数配置或控制接口,在用户主业务中断的情况下,还能通过ota接口实现业务控制功能;

(8)提供千万级云平台,高可靠性设计可平行扩展,提供管理员控制平台、ios及安卓app,可以批量设置按编号升级,或按固件升级,配置灵活。

以上所述之具体实施方式为本发明的较佳实施方式,并非以此限定本发明的具体实施范围,本发明的范围包括并不限于本具体实施方式,凡依照本发明所作的等效变化均在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1