本发明涉及计算机技术领域,具体涉及一种固件差异化升级方法。
背景技术:
固件firmware是写入可擦写可编程只读存储器eprom或电可擦可编程只读存储器eeprom中的程序。固件是指设备内部保存的设备“驱动程序”,通过固件,操作系统才能按照标准的设备驱动实现特定机器的运行动作,比如光驱、刻录机等都有内部固件。固件是担任着一个系统最基础最底层工作的软件。固件就决定着硬件设备的功能及性能。通常这些硬件内所保存的程序是无法被用户直接读出或修改的。早期是没有必要对固件进行升级操作的,即使在固件内发现了严重的bug也必须由专业人员带着写好程序的芯片把原来机器上的更换下来。早期固件芯片一般采用了rom设计,它的固件firmware代码是在生产过程中固化的,用任何手段都无法修改。随着技术的不断发展,修改固件以适应不断更新的硬件环境成了用户们的迫切要求,所以,可重复写入的可编程可擦除只读存储器eprom、eeprom和flash出现了。这些芯片是可以重复刷写的,让固件得以修改和升级。
随着智能终端以及随着物联网的不断发展和建设,大量终端设备不仅具有使其智能化的固件,还通过基于窄带物联网通信技术,如lora、nb等其他通讯技术联网,如智能电表。当这些智能终端进行升级时,可依赖窄带物联网通信技术进行远程的升级。远程升级时需要下载较大的升级包,占用大量时间和流量,效率低下。差异化软件升级算法,寻找软件新旧版本之间的差异,软件升级包仅包含差异部分的信息,而不必包含全部新版本软件的信息,能够大幅缩小升级包的大小,尤其适合软件的小规模升级更新中。然而目前的软件差异化升级算法,生成的升级包文件大小相对窄带物联网通信的带宽而言,仍然太大,因而需要进一步缩小升级包文件的大小。
如中国专利cn104572178a,公开日2015年4月29日,一种电能表嵌入式软件远程差异化升级方法,其包括如下步骤:客户端比对最新软件版本信息与从电能表获取的软件版本信息,获得差异化数据信息;客户端将生成的切换升级命令发送至电能表;电能表将执行切换升级命令生成的切换操作结果信息发送至客户端;若切换成功时,客户端遍历计算最新软件版本信息的应用代码的第一crc校验和;客户端将差异化数据信息发送至电能表,以及发送完成后,发送升级完成命令至电能表;电能表根据差异化数据信息和升级完成命令进行升级处理。其通过差异性数据信息进行升级的方式,达到了节省人工成本以及提高升级速度的技术效果。但其并不能解决差异化数据信息仍然过大的技术问题。
技术实现要素:
本发明要解决的技术问题是:目前窄带通信中固件的升级包过大,占用过多通信带宽和时间的技术问题。提出了一种占用带宽小的适用于小容量存储终端设备的固件差异化升级方法。
为解决上述技术问题,本发明所采取的技术方案为:一种固件差异化升级方法,包括以下步骤:a)导入新固件new_image.bin和旧固件old_image.bin到上位pc机;b)在上位pc机运行差异寻找算法寻找新固件和旧固件的差异,获得差异文件patch.bin;c)在上位pc机上运行压缩算法,将差异文件patch.bin压缩获得升级包文件patch_compressed.bin;d)将升级包文件patch_compressed.bin传输到下位机;e)下位机运行解压算法将升级包文件patch_compressed.bin解压获得差异文件patch.bin;f)下位机读取旧固件old_image.bin,结合旧固件old_image.bin与差异文件patch.bin,通过复原算法获得新固件复原文件new_image_recovered.bin;g)将新固件复原文件new_image_recovered.bin复制到下位机的rom中,完成固件升级。通过差异化升级算法以及压缩算法缩小升级包文件的大小,降低对通信带宽的需求,提高固件升级效率。
作为优选,步骤b)中运行差异寻找算法的同时运行循环冗余校验算法,生成校验位并纳入差异文件patch.bin中,步骤e)中对解压获得的差异文件patch.bin进行校验,若校验通过则进入步骤f),反之,通知上位机,重新传输升级包文件patch_compressed.bin至下位机。通过循环冗余校验算法提高数据传输的准确性。
作为优选,步骤c)中,在上位pc机上运行压缩算法前,首先将差异文件patch.bin分段,每段的长度为t,而后对每个分段运行压缩算法,获得分段的升级包文件;步骤e)中,下位机逐段解压分段的升级包文件,逐段拼凑获得差异文件patch.bin。下位机解压升级包文件patch_compressed.bin时,需要较大的存储容量来存储临时数据,导致部分小容量存储的终端设备难以完成固件的差异化升级,通过分段,循环压缩及解压,可以减少临时数据的产生量,降低对存储容量的需求。
作为优选,步骤c)中,在上位pc机上运行压缩算法前,首先将差异文件patch.bin分段,每段的长度为t,统计每段中0的比例,若0的比例大于设定阈值,则运行压缩算法对该分段进行压缩,反之,则不压缩本段,并做标记,获得分段的升级包文件;步骤e)中,下位机逐段解压分段的升级包文件,逐段拼凑获得差异文件patch.bin。分段压缩时,每一段中0的比例与压缩率是存在关系的。当0的比例小于3%时,文件难以被压缩;0的比例大于30%时,较容易被压缩;大于80%时,压缩效率很高;当0的比例达到100%时,16kb的0可以被压缩为50个字节。通过计算待压缩文件中0的比例,压缩结果大小就可以被预判。当0的比例小于3%的时候可认为压缩是没有意义的,文件体积是没有通过压缩缩小的,因此可直接跳过不压缩。当比例在3%到30%之间可以尝试性的压缩。当比例大于30%时,可以直接压缩。
作为优选,步骤c)中,在上位pc机上运行压缩算法前,将差异文件patch.bin进行动态分段,所述动态分段为变长度分段,所述变长度分段使压缩后的文件长度相比定长度分段更短,建立分段索引表,所述分段索引表记录每段的标号以及分段长度t,随后对每个分段运行压缩算法,压缩后的分段以及分段索引表一起作为升级包文件;步骤e)中,下位机根据分段索引表,依照每个分段的压缩信息逐段解压升级包文件,逐段拼凑获得差异文件patch.bin。
作为优选,步骤c)中,在上位pc机上运行压缩算法前,将差异文件patch.bin进行动态分段,所述动态分段为变长度分段,所述变长度分段使分段中的0的占比超过设定阈值k,建立分段索引表,所述分段索引表记录每段的标号以及分段长度t,随后对每个分段运行压缩算法,压缩后的分段以及分段索引表一起作为升级包文件;步骤e)中,下位机根据分段索引表,依照每个分段的压缩信息逐段解压升级包文件,逐段拼凑获得差异文件patch.bin。当比例大于30%时,可以直接压缩,通过预判的方式,缩短动态压缩时寻找合适的压缩输入文件大小花费的时间。
作为优选,在上位机pc中建立压缩算法库,所述压缩算法库包括若干个压缩算法,不压缩视为压缩算法纳入压缩算法库中;步骤c)中,在上位pc机上运行压缩算法前,首先将差异文件patch.bin进行分段,并建立分段索引表,所述分段索引表记录每段的标号、分段长度t以及压缩算法的标记,所述压缩算法信息记录对应分段采用的压缩算法;判断每个分段的最佳压缩算法,最佳压缩算法使压缩后的分段长度最短,若压缩算法压缩后的长度均大于设定阈值,则该分段不压缩,并在分段索引表对应位置放入不压缩的标记;对每个分段采用最佳压缩算法进行压缩,压缩后的分段、分段索引表以及压缩算法所需约定文件一起作为升级包文件。通过多种压缩算法以及变长度分段技术,进一步缩小升级包文件的大小。
作为优选,判断每个分段的最佳压缩算法的方法包括:将长度为t的分段依次运行压缩算法库中的压缩算法,获得最佳压缩算法,所述最佳压缩算法包含不压缩,将最佳压缩算法与该分段关联后作为样本数据,重复执行获得多个样本数据,将样本数据分为训练样本和测试样本;建立输入为t维的分类神经网络模型,使用训练样本训练分类神经网络模型,并使用测试样本对分类神经网络模型的准确度进行测试,若准确度未达到预设值,则获得更多样本数据重新进行训练和测试,若准确度达到预设值,则将步骤c)中的差异文件patch.bin的分段输入分类神经网络模型,将分类神经网络模型输出的压缩算法作为对应分段的最佳压缩算法。通过分类神经网络快速判断分段的最佳压缩算法,降低寻找最佳压缩算法的时间。
作为优选,若长度为t的分段的最佳压缩算法为不压缩时,执行以下步骤:c21)取该分段的前一部分,长度记为t’;c22)寻找使分段长度t’的部分的压缩比达到设定值的压缩算法,若找到则记录找到的压缩算法,并进入步骤c24),反之进入步骤c23);c23)进一步缩小t’的值,若t’达到预设下阈值,则将不压缩作为分段长度t’的最佳压缩算法,并进入步骤c24),反之,则返回步骤c22执行;c24)将长度t’以及对应的最佳压缩算法加入二维向量v,对分段剩余的长度(t-t’)执行步骤c25);c25)若(t-t’)小于设定下阈值,则将(t-t’)的最佳压缩算法标记为不压缩,将向量v作为长度为t的分段的最佳压缩算法,反之,将分段剩余的部分循环执行步骤c21)至c25),直到分段全部部分均被标记有最佳压缩算法,将二维向量v作为该分段的最佳压缩算法。不同的压缩算法在不同的被压缩数据时的压缩率并不相同,当缩小被压缩数据的长度时,可能带来更好的压缩效果,将剩余部分不压缩或者以同样的方式寻找其部分压缩,均可带来整体压缩率提高的有益效果。
本发明的实质性效果是:通过差异化升级算法以及压缩算法缩小升级包文件的大小;通过分段压缩获得分段的升级包文件,可分散传输,降低对通信带宽的要求;同时降低了下位机解压时所需要的存储容量,更适用于小容量存储的终端设备;通过多种压缩算法以及变长度分段技术,进一步缩小升级包文件的大小;通过分类神经网络快速判断分段的最佳压缩算法。
附图说明
图1为实施例一固件差异化升级方法流程框图。
图2为实施例二压缩差异文件的方法流程框图。
图3为实施例二判断每个分段的最佳压缩算法的方法流程框图。
具体实施方式
下面通过具体实施例,并结合附图,对本发明的具体实施方式作进一步具体说明。
实施例一:
一种固件差异化升级方法,如图1所示,本实施例包括以下步骤:a)导入新固件new_image.bin和旧固件old_image.bin到上位pc机。
b)在上位pc机运行差异寻找算法寻找新固件和旧固件的差异,获得差异文件patch.bin,同时运行循环冗余校验算法,生成校验位并纳入差异文件patch.bin中。
c)将差异文件patch.bin动态分段,每段的长度为t,统计每段中0的比例,若0的比例大于设定阈值,则运行压缩算法对该分段进行压缩,反之,则不压缩本段,并做标记,获得分段的升级包文件。选用的压缩算法需要具备内存占用低和压缩率高。如表1所示,为两种压缩算法bzip2和deflate进行压缩后的文件大小比较。固件大小为240kb,经过差异寻找算法后,形成的差异文件大小为243kb,这243kb被分包后进行压缩。可通过本方法寻找最优的压缩算法。
表1两种压缩算法进行压缩后的文件大小比较
d)将升级包文件patch_compressed.bin传输到下位机。
e)下位机逐段解压分段的升级包文件,逐段拼凑获得差异文件patch.bin,对解压获得的差异文件patch.bin进行校验,若校验通过则进入步骤f),反之,通知上位机,重新传输升级包文件patch_compressed.bin至下位机。
f)下位机读取旧固件old_image.bin,结合旧固件old_image.bin与差异文件patch.bin,通过复原算法获得新固件复原文件new_image_recovered.bin。
g)将新固件复原文件new_image_recovered.bin复制到下位机的rom中,完成固件升级。
如在某型电表上使用的单片机app大小为124kb。采用现有的升级算法需下发124kb的升级包。如下表,采用本实施例提供的差异升级算法,下发的升级包可以缩小到12kb以下,节省90%以上的传输流量,如表2所示。
表2差异化升级算法与现有升级算法的比较
本实施例具有缩小升级包文件的大小,降低对通信带宽的要求,降低了下位机解压时所需要的存储容量,更适用于小容量存储的终端设备的有益效果。
实施例二:
一种固件差异化升级方法,本实施例在实施例一的基础上对压缩差异文件的方法进行了进一步的改进。如图2所示,本实施例中,在上位机pc中建立压缩算法库,压缩算法库包括若干个压缩算法,不压缩视为压缩算法纳入压缩算法库中。步骤c)中,在上位pc机上运行压缩算法前,首先将差异文件patch.bin进行分段,并建立分段索引表,分段索引表记录每段的标号、分段长度t以及压缩算法的标记,压缩算法信息记录对应分段采用的压缩算法;判断每个分段的最佳压缩算法,最佳压缩算法使压缩后的分段长度最短,若压缩算法压缩后的长度均大于设定阈值,则该分段不压缩,并在分段索引表对应位置放入不压缩的标记;对每个分段采用最佳压缩算法进行压缩,压缩后的分段、分段索引表以及压缩算法所需约定文件一起作为升级包文件。
如图3所示,判断每个分段的最佳压缩算法的方法包括:将长度为t的分段依次运行压缩算法库中的压缩算法,获得最佳压缩算法,最佳压缩算法包含不压缩,将最佳压缩算法与该分段关联后作为样本数据,重复执行获得多个样本数据,将样本数据分为训练样本和测试样本;建立输入为t维的分类神经网络模型,使用训练样本训练分类神经网络模型,并使用测试样本对分类神经网络模型的准确度进行测试,若准确度未达到预设值,则获得更多样本数据重新进行训练和测试,若准确度达到预设值,则将步骤c)中的差异文件patch.bin的分段输入分类神经网络模型,将分类神经网络模型输出的压缩算法作为对应分段的最佳压缩算法。通过分类神经网络快速判断分段的最佳压缩算法,降低寻找最佳压缩算法的时间。
若长度为t的分段的最佳压缩算法为不压缩时,执行以下步骤:c21)取该分段的前一部分,长度记为t’;c22)寻找使分段长度t’的部分的压缩比达到设定值的压缩算法,若找到则记录找到的压缩算法,并进入步骤c24),反之进入步骤c23);c23)进一步缩小t’的值,若t’达到预设下阈值,则将不压缩作为分段长度t’的最佳压缩算法,并进入步骤c24),反之,则返回步骤c22执行;c24)将长度t’以及对应的最佳压缩算法加入二维向量v,对分段剩余的长度(t-t’)执行步骤c25);c25)若(t-t’)小于设定下阈值,则将(t-t’)的最佳压缩算法标记为不压缩,将向量v作为长度为t的分段的最佳压缩算法,反之,将分段剩余的部分循环执行步骤c21)至c25),直到分段全部部分均被标记有最佳压缩算法,将二维向量v作为该分段的最佳压缩算法。不同的压缩算法在不同的被压缩数据时的压缩率并不相同,当缩小被压缩数据的长度时,可能带来更好的压缩效果,将剩余部分不压缩或者以同样的方式寻找其部分压缩,均可带来整体压缩率提高的有益效果。
以上所述的实施例只是本发明的一种较佳的方案,并非对本发明作任何形式上的限制,在不超出权利要求所记载的技术方案的前提下还有其它的变体及改型。
1.一种固件差异化升级方法,其特征在于,
包括以下步骤:
a)导入新固件new_image.bin和旧固件old_image.bin到上位pc机;
b)在上位pc机运行差异寻找算法寻找新固件和旧固件的差异,获得差异文件patch.bin;
c)在上位pc机上运行压缩算法,将差异文件patch.bin压缩获得升级包文件patch_compressed.bin;
d)将升级包文件patch_compressed.bin传输到下位机;
e)下位机运行解压算法将升级包文件patch_compressed.bin解压获得差异文件patch.bin;
f)下位机读取旧固件old_image.bin,结合旧固件old_image.bin与差异文件patch.bin,通过复原算法获得新固件复原文件new_image_recovered.bin;
g)将新固件复原文件new_image_recovered.bin复制到下位机的rom中,完成固件升级。
2.根据权利要求1所述的一种固件差异化升级方法,其特征在于,
步骤b)中运行差异寻找算法的同时运行循环冗余校验算法,生成校验位并纳入差异文件patch.bin中,步骤e)中对解压获得的差异文件patch.bin进行校验,若校验通过则进入步骤f),反之,通知上位机,重新传输升级包文件patch_compressed.bin至下位机。
3.根据权利要求1或2所述的一种固件差异化升级方法,其特征在于,
步骤c)中,在上位pc机上运行压缩算法前,首先将差异文件patch.bin分段,每段的长度为t,而后对每个分段运行压缩算法,获得分段的升级包文件;
步骤e)中,下位机逐段解压分段的升级包文件,逐段拼凑获得差异文件patch.bin。
4.根据权利要求1或2所述的一种固件差异化升级方法,其特征在于,
步骤c)中,在上位pc机上运行压缩算法前,首先将差异文件patch.bin分段,每段的长度为t,统计每段中0的比例,若0的比例大于设定阈值,则运行压缩算法对该分段进行压缩,反之,则不压缩本段,并做标记,获得分段的升级包文件;
步骤e)中,下位机逐段解压分段的升级包文件,逐段拼凑获得差异文件patch.bin。
5.根据权利要求1或2所述的一种固件差异化升级方法,其特征在于,
步骤c)中,在上位pc机上运行压缩算法前,将差异文件patch.bin进行动态分段,所述动态分段为变长度分段,所述变长度分段使压缩后的文件长度相比定长度分段更短,建立分段索引表,所述分段索引表记录每段的标号以及分段长度t,随后对每个分段运行压缩算法,压缩后的分段以及分段索引表一起作为升级包文件;
步骤e)中,下位机根据分段索引表,依照每个分段的压缩信息逐段解压升级包文件,逐段拼凑获得差异文件patch.bin。
6.根据权利要求1或2所述的一种固件差异化升级方法,其特征在于,
在上位机pc中建立压缩算法库,所述压缩算法库包括若干个压缩算法,不压缩视为压缩算法纳入压缩算法库中;
步骤c)中,在上位pc机上运行压缩算法前,首先将差异文件patch.bin进行分段,并建立分段索引表,所述分段索引表记录每段的标号、分段长度t以及压缩算法的标记,所述压缩算法信息记录对应分段采用的压缩算法;
判断每个分段的最佳压缩算法,最佳压缩算法使压缩后的分段长度最短,若压缩算法压缩后的长度均大于设定阈值,则该分段不压缩,并在分段索引表对应位置放入不压缩的标记;
对每个分段采用最佳压缩算法进行压缩,压缩后的分段、分段索引表以及压缩算法所需约定文件一起作为升级包文件。
7.根据权利要求6所述的一种固件差异化升级方法,其特征在于,
判断每个分段的最佳压缩算法的方法包括:
将长度为t的分段依次运行压缩算法库中的压缩算法,获得最佳压缩算法,所述最佳压缩算法包含不压缩,将最佳压缩算法与该分段关联后作为样本数据,重复执行获得多个样本数据,将样本数据分为训练样本和测试样本;
建立输入为t维的分类神经网络模型,使用训练样本训练分类神经网络模型,并使用测试样本对分类神经网络模型的准确度进行测试,若准确度未达到预设值,则获得更多样本数据重新进行训练和测试,若准确度达到预设值,则将步骤c)中的差异文件patch.bin的分段输入分类神经网络模型,将分类神经网络模型输出的压缩算法作为对应分段的最佳压缩算法。
8.根据权利要求6所述的一种固件差异化升级方法,其特征在于,
若长度为t的分段的最佳压缩算法为不压缩时,执行以下步骤:
c21)取该分段的前一部分,长度记为t’;
c22)寻找使分段长度t’的部分的压缩比达到设定值的压缩算法,若找到则记录找到的压缩算法,并进入步骤c24),反之进入步骤c23);
c23)进一步缩小t’的值,若t’达到预设下阈值,则将不压缩作为分段长度t’的最佳压缩算法,并进入步骤c24),反之,则返回步骤c22执行;
c24)将长度t’以及对应的最佳压缩算法加入二维向量v,对分段剩余的长度(t-t’)执行步骤c25);
c25)若(t-t’)小于设定下阈值,则将(t-t’)的最佳压缩算法标记为不压缩,将向量v作为长度为t的分段的最佳压缩算法,反之,将分段剩余的部分循环执行步骤c21)至c25),直到分段全部部分均被标记有最佳压缩算法,将二维向量v作为该分段的最佳压缩算法。
技术总结