本发明涉及差分升级中但差分包压缩编码技术,特别涉及一种预测压缩编码方法。
背景技术:
随着物联网技术的快速发展,物联网设备得到了极大的普及。为了方便升级已经激活的物联网设备,厂商一般都会在系统中实现ota(over-the-airtechnology)空中下载技术。通过ota技术可以将设备升级所需的数据通过网络发送到指定的设备中,无需回收设备。
现有的ota升级技术主要有两种,整包升级和差分升级。整包升级是指云端下发整个新固件,设备端直接通过接收到的新固件进行升级。差分升级是指云端先通过差分算法得到旧固件升级到新固件所需的差分包(差分包的体积一般远小于整包),然后将差分包下发给设备端,设备端接收到差分包,将差分包和旧固件输入到还原算法中得到新固件,再进行升级。由于大多数物联网设备可用的存储资源有限,并且无法保证稳定高速的网络环境,所以都会通过差分升级来进行版本升级。
差分包由三部分组成:头部信息,指令集和数据集。头部信息存储了差分包的一些概要信息,比如新固件的大小,指令集的大小,数据集的大小。头部信息一般只有几十个字节,占很小的体积。指令集中保存设备还原新固件时所需的一些指令内容,指令包括copy指令和add指令。copy(f,t,l)表示从旧固件的f地址开始复制l个字节到新固件的t地址。add(t,l)表示从数据集中取l个字节写入新固件的t地址。数据集存储了add指令所需的数据。差分还原的过程就是通过顺序执行差分包中的copy和add指令,用旧固件和差分包数据集还原出新固件。
为了进一步减少物联网设备升级时的网络压力,厂商在下发差分包之前通常都会对压缩包进行压缩,设备端收到差分压缩包后先对压缩包进行解压,再进行升级。通过对差分包的分析我们不难发现,差分包的指令集是有特定格式的,并且相邻指令的参数也是有一定关联的。本发明针对差分包指令的特殊规律,提出一种基于地址预测的物联网应用差分升级方法,以实现使用更小体积的差分包进行差分升级。
技术实现要素:
本发明要克服现有技术的上述缺点,提供一种针对差分包指令进行特殊优化的压缩算法。
本方法力图在不改变现有差分升级流程的前提下,通过优化差分包生成的算法来进一步提升差分包的压缩效率。
为实现以上目的,本发明采取的方案是:一种基于地址预测的物联网应用差分升级方法,包括以下步骤:
(1)用户通过差分包制作程序生成新旧固件的差分包
11)通过后缀排序生成旧固件的字典序;
12)遍历新固件中字节,通过二分搜索查询旧固件中最长匹配的字节,并生成对应的copy指令和add指令;
13)按顺序将copy指令输入预测器中,并将预测器返回的copy指令写入差分包中;
14)将add指令和差分包数据集写入差分包中,并选择一种常规的压缩算法压缩差分包;
(2)用户将差分包上传到云端,云端将差分包下发到物联网设备上;
(3)物联网设备开始还原新固件并更新固件
31)设备端解压差分包并解析出头部信息;
32)验证差分包中旧版本号与当前设备运行的版本号是否相同,如果不同则将错误信息上发云端并退出程序。如果相同则开始还原新固件;
33)逐条将差分包中的copy指令输入到预测器中,预测器返回真实copy指令。执行返回的copy指令;
34)逐条执行差分包中的add指令,得到最终的新固件;
35)设备通过还原出来的新固件进行升级。
优选地,步骤13)具体包括:按顺序将copy指令输入到预测器中,预测器中有一个队列用于保存之前10条预测指令的预测误差,预测器将队列中的十个预测误差取平均值,将这个误差值加上上一条copy指令的f的值和t的值,得到这一条copy指令中f的预测值,预测器用这条copy中f的实际值减去这个预测值得到f的预测误差;将这个预测误差添加到队列中,并将删除队列中队首的预测误差;用得到的预测误差替换这条copy指令中f的值,输出这条copy指令。将这个copy指令写入差分包中。
优选地,步骤(2)具体包括:
(21)用户将步骤(1)中得到的差分包上传到云端;
(22)用户在云端指定设备进行升级;
(23)云端向设备端发送一条ota升级请求,升级请求中包含有差分包下载地址;
(24)设备端收到云端下发的请求,从升级请求中解析出差分包下载地址,并从改地址下载差分包。
优选地,步骤33)具体包括:按顺序将copy指令输入到预测器中,差分包中解析出来的copy指令中的f的值代表的是该条copy指令的预测误差,预测器中有一个队列用于保存之前10条输入的copy指令的f的值,也就是之前十条copy指令的预测误差,预测器将队列中的十个预测误差取平均值,将这个平均误差加上上一条copy指令的实际f的值和t的值,得到这一条copy指令中f的预测值,预测器用这个预测值加上传进来的copy指令中f的值得到这条copy指令中f的实际值;预测器将这条copy指令的f的预测误差添加到队列中,并将删除队列中队首的预测误差,输出这条copy指令;程序得到这个copy指令并执行copy操作。
本发明的优点是:可以减少差分包的体积,缓解设备进行差分升级时的网络压力和存储压力。
附图说明
图1是本发明的升级过程的工作流程图。
图2是本发明的用户通过差分算法生成差分包的工作流程图。
图3是本发明的设备端通过还原算法还原新固件并进行升级的工作流程图。
具体实施方式
下面结合附图进一步说明本发明的技术方案。
本发明仍使用传统的差分升级流程,使用预测器配合压缩算法进一步提升差分包的压缩率。主要过程为:1.本地制作差分包2.上传差分包到云端,云端下发差分包到设备端3.设备端接收差分包并进行差分升级。具体步骤如下所示:
(1)用户运行差分包制作程序,输入旧固件地址和新固件地址,差分包制作程序自动生成差分包,差分包制作程序内部流程如下;
(1.1)将新固件数据和旧固件数据读到内存中,通过后缀排序对旧固件数据内容进行排序,得到旧固件数据的字典序。
(1.2)遍历新固件数据,通过二分查找法查找当前新固件位置在旧固件数据中的最长匹配长度和在旧固件中对应的位置。生成对应的copy指令和add指令。
(1.3)按顺序将copy指令输入到预测器中,预测器中有一个队列用于保存之前10条预测指令的预测误差,预测器将队列中的十个预测误差取平均值,将这个误差值加上上一条copy指令的f的值和t的值,得到这一条copy指令中f的预测值,预测器用这条copy中f的实际值减去这个预测值得到f的预测误差。将这个预测误差添加到队列中,并将删除队列中队首的预测误差。用得到的预测误差替换这条copy指令中f的值,输出这条copy指令。将这个copy指令写入差分包中;
(1.4)等所有copy指令都写入差分包后将add指令逐条写入差分包中,再将差分包的数据集和头部信息写入差分包中,得到完整的差分包。选择一种常规的压缩算法将差分包进行压缩,得到最终的差分包。
(2)用户将差分包上传到云端,云端将差分包下发到物联网设备上;
(2.1)用户将步骤(1)中得到的差分包上传到云端;
(2.2)用户在云端指定设备进行升级;
(2.3)云端向设备端发送一条ota升级请求,升级请求中包含有差分包下载地址;
(2.4)设备端收到云端下发的请求,从升级请求中解析出差分包下载地址,并从改地址下载差分包;
(3)物联网设备运行升级程序,还原新固件并更新固件;
(3.1)解压差分包,读取差分包头部信息,包括旧版本的版本号,copy指令个数,add指令个数,新固件。
(3.2)验证差分包中旧版本号与当前设备运行版本号是否相同。如果不同则将错误信息上发云端并退出升级程序。如果相同,则继续升级;
(3.3)按顺序将copy指令输入到预测器中,差分包中解析出来的copy指令中的f的值代表的是该条copy指令的预测误差,预测器中有一个队列用于保存之前10条输入的copy指令的f的值,也就是之前十条copy指令的预测误差,预测器将队列中的十个预测误差取平均值,将这个平均误差加上上一条copy指令的实际f的值和t的值,得到这一条copy指令中f的预测值,预测器用这个预测值加上传进来的copy指令中f的值得到这条copy指令中f的实际值。预测器将这条copy指令的f的预测误差添加到队列中,并将删除队列中队首的预测误差,输出这条copy指令。程序得到这个copy指令并执行copy操作;
(3.4)逐条从差分包中读取add指令,并执行;
(3.5)所有add指令执行完后,所得到的新固件就是最终用于升级的固件。通过得到的固件进行升级,并将结果发给云端。
本说明书实施例所述的内容仅仅是对发明构思的实现形式的列举,本发明的保护范围不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于本领域技术人员根据本发明构思所能够想到的等同技术手段。