CN104932909A - 一种终端软件升级方法及装置 - Google Patents

一种终端软件升级方法及装置 Download PDF

Info

Publication number
CN104932909A
CN104932909A CN201410100573.1A CN201410100573A CN104932909A CN 104932909 A CN104932909 A CN 104932909A CN 201410100573 A CN201410100573 A CN 201410100573A CN 104932909 A CN104932909 A CN 104932909A
Authority
CN
China
Prior art keywords
data
software
source
version software
control command
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
CN201410100573.1A
Other languages
English (en)
Inventor
陈禧
双建平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN201410100573.1A priority Critical patent/CN104932909A/zh
Priority to PCT/CN2014/081013 priority patent/WO2015139381A1/zh
Publication of CN104932909A publication Critical patent/CN104932909A/zh
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种终端软件升级方法及装置,涉及差分升级技术,所述方法包括:持有源版本软件的终端获取用于升级源版本软件的差分包;通过解析所述差分包,得到由多个具有控制命令的元素组成的差分信息集合;按照各元素在所述差分信息集合中的顺序和各自具有的控制命令,依次对源版本软件中相应区域的数据进行更新,从而使源版本软件升级为目标版本软件。本发明实现在flash空间比较小的设备上进行版本升级。

Description

一种终端软件升级方法及装置
技术领域
本发明涉及差分升级技术,特别涉及一种专门针对内存空间很小的设备的分治差分升级方案。
背景技术
很多终端设备需要进行相应的固件升级,但是由于存储空间的限制导致不能容纳一个完整的版本数据进行升级,所以需要根据两个版本之间的差异性,制作差分升级包,以减少存储空间的开销。
但是目前主流的差分方案提供厂商并不开源,而开源的差分方案实际上并不能解决内存空间开销上过大,而实际的通讯设备如数据卡、uFi类设备,它们出于成本的考虑,用于放置版本数据的flash空间都比较小,要想在这一类设备上进行版本升级,就需要一个针对有限内存空间设备的差分算法方案。
发明内容
本发明的目的在于提供一种终端软件升级方法及装置,能更好地解决在内存空间较小的设备上实现软件升级的问题。
根据本发明的一个方面,提供了一种终端软件升级方法,包括:
持有源版本软件的终端获取用于升级源版本软件的差分包;
通过解析所述差分包,得到由多个具有控制命令的元素组成的差分信息集合;
按照各元素在所述差分信息集合中的顺序和各自具有的控制命令,依次对源版本软件中相应区域的数据进行更新,从而使源版本软件升级为目标版本软件。
优选地,所述的持有源版本软件的终端获取用于升级源版本软件的差分包的步骤包括:
终端从网络侧下载所述用于升级源版本软件的差分包,并将所述差分包读取到内存。
优选地,所述控制命令包括用来指示数据复制的控制命令和用来指示数据替换的控制命令,所述的按照各元素在所述差分信息集合中的顺序和各自具有的控制命令,依次对源版本软件中相应区域的数据进行更新的步骤包括:
终端利用当前元素所具有的用来指示数据替换的控制命令,获取用来替换源版本软件中指定区域数据的目标版本软件数据,并将所述目标版本软件数据覆盖写入到所述指定区域;
所述目标版本软件数据覆盖写入到所述指定区域后,终端按照所述差分信息集合中的元素顺序,对下一个元素指定区域的数据进行更新。
优选地,当当前元素具有用来指示数据复制的控制命令,则直接按照所述差分信息集合中的元素顺序,对下一个元素指定区域的数据进行更新。
优选地,还包括网络侧生成所述差分包的步骤,包括:
对源版本软件和目标版本软件的二进制数据分别进行处理,得到具有多个属性元素的源版本多重元素集合和目标版本多重元素集合;
按照源版本多重元素集合中各元素的升级顺序,依次计算所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息;
根据所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息,生成用于终端软件升级的差分包。
优选地,所述的根据所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息,生成用于终端软件升级的差分包的步骤包括:
利用所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息,生成相应的控制命令;
按照预定格式,对所生成的控制命令和所述差分信息进行封装并压缩,形成成差分包输出。
优选地,所述差分信息用于标识源版本软件和目标版本软件之间的匹配区域或非匹配区域。
优选地,当所述差分信息用于标识源版本软件和目标版本软件之间的匹配区域时,生成用来指示数据复制的控制命令。
优选地,当所述差分信息用于标识源版本软件和目标版本软件之间的非匹配区域时,生成用来指示数据替换的控制命令。
根据本发明的另一方面,提供了一种终端软件升级装置,包括:
差分包获取模块,用于获取用来升级终端源版本软件的差分包;
差分包解析模块,用于通过解析所述差分包,得到由多个具有控制命令的元素组成的差分信息集合;
软件升级模块,用于按照各元素在所述差分信息集合中的顺序和各自具有的控制命令,依次对源版本软件中相应区域的数据进行更新,从而使源版本软件升级为目标版本软件。
与现有技术相比较,本发明的有益效果在于:
本发明采用分治的思路节省了内存开销,解决了在内存空间很小的设备上进行原地差分升级的问题,并且利用各项优化措施在一定程度上提升了压缩效率和做包时间,减小了差分包尺寸,提升了工作效率,节约了人力成本,使得差分升级技术可以得到进一步推广和应用。
附图说明
图1是本发明提供的终端软件升级方法原理框图;
图2是本发明提供的终端软件升级装置框图;
图3是本发明实施例提供的分治差分算法示意图;
图4是本发明实施例提供的差分模块示意图;
图5是本发明实施例提供的差分方案的模块示意图;
图6是本发明实施例提供的元数据中控制区域的结构示意图;
图7是本发明实施例提供的分治差分方案的详细过程;
图8是本发明实施例提供的终端利用差分包更新软件版本的流程图;
图9是本发明实施例提供的终端利用差分数据更新版本数据元素的示意图;
图10是本发明实施例提供的控制命令结构组成图;
图11是本发明实施例提供的setPointerCache作为命令的缓存器,该缓存器的各项值表征意义的示意图;
图12是本发明实施例提供的SET_PTR_DELTA_COMMAND控制命令所用到的各项cache的索引值示意图;
图13是本发明实施例提供的所使用的几种Set命令对应的命令编码值示意图;
图14是本发明实施例提供的对所有表示长度的数据实施优化编码后的数据长度,即对各项值编码所需要用到的数据长度的示意图;
图15是本发明实施例提供的控制命令中代表长度的数据值在经过编码后的数据组成结构示意图。
具体实施方式
以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1是本发明提供的终端软件升级方法原理框图,如图1所述,步骤包括:
步骤S101:持有源版本软件的终端获取用于升级源版本软件的差分包;
在所述步骤S101中,终端从网络侧下载所述用于升级源版本软件的差分包,并将所述差分包读取到内存。
步骤S102:通过解析所述差分包,得到由多个具有控制命令的元素组成的差分信息集合;
步骤S103:按照各元素在所述差分信息集合中的顺序和各自具有的控制命令,依次对源版本软件中相应区域的数据进行更新,从而使源版本软件升级为目标版本软件。
在所述步骤S103中,所述控制命令包括用来指示数据复制的控制命令和用来指示数据替换的控制命令,终端利用当前元素所具有的用来指示数据替换的控制命令,获取用来替换源版本软件中指定区域数据的目标版本软件数据,并将所述目标版本软件数据覆盖写入到所述指定区域;所述目标版本软件数据覆盖写入到所述指定区域后,终端按照所述差分信息集合中的元素顺序,对下一个元素指定区域的数据进行更新。进一步地,当当前元素具有用来指示数据复制的控制命令,则直接按照所述差分信息集合中的元素顺序,对下一个元素指定区域的数据进行更新。
上述差分包在网络侧生成,具体步骤包括:对源版本软件和目标版本软件的二进制数据分别进行处理,得到具有多个属性元素的源版本多重元素集合和目标版本多重元素集合;按照源版本多重元素集合中各元素的升级顺序,依次计算所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息;根据所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息,生成用于终端软件升级的差分包。进一步地,利用所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息,生成相应的控制命令;按照预定格式,对所生成的控制命令和所述差分信息进行封装并压缩,形成成差分包输出。其中,所述差分信息用于标识源版本软件和目标版本软件之间的匹配区域或非匹配区域。当所述差分信息用于标识源版本软件和目标版本软件之间的匹配区域时,生成用来指示数据复制的控制命令。当所述差分信息用于标识源版本软件和目标版本软件之间的非匹配区域时,生成用来指示数据替换的控制命令。
图2是本发明提供的终端软件升级装置框图,如图2所示,包括差分包获取模块、差分包解析模块和软件升级模块,其中,差分包获取模块获取用来升级终端源版本软件的差分包,所述差分包解析模块通过解析所述差分包,得到由多个具有控制命令的元素组成的差分信息集合,所述软件升级模块按照各元素在所述差分信息集合中的顺序和各自具有的控制命令,依次对源版本软件中相应区域的数据进行更新,从而使源版本软件升级为目标版本软件。
下面结合图3至图7,以及图10至图15,对本发明的进一步说明。
本发明提供一种专门针对版本编译文件的分治差分算法,提供一种专门针对于flash空间很有限的设备的差分升级的算法方案。需要先获取两个版本的二进制文件,old和new版本数据(其中old就是源版本数据,new就是目标版本数据,之后两者会交替使用),然后对源版本数据和目标版本数据进行处理,再分析计算原版本和目标版本的差异性信息,最后生成差分升级包。
1、通过分治的方式分析并计算源版本和目标版本的差异性信息:在制作版本A到B的差分升级包的过程中,会对源版本数据A和目标版本数据B的二进制数据流进行处理,将之转为一个多重元素集合,也即是一个有着多个相同属性元素的集合,由于是原地升级,所以整个元素集合就存在一种偏序关系,这种偏序关系其实就是元素间的一个依赖关系,xi<xj就表示元素i必须要在元素j之前被更新。然后经过数学变换和排序将偏序嵌入到一个线性序中,也就是把各个元素安排成一个线性序列使得只要则有ak1<ak2。这意味着所有元素被重新安排成一条线,使得所有箭头都指向右。
2、算法的目标是以一种表格的方式记录控制命令对应的控制区域,而控制命令又分成SetCommand、CopyCommand两大类。这两类名字有着一个共同的数据结构的布局,其中需要精心编码的是SetCommand,它又分为了SET_COMMAND_BASE,SET_PTR_DELTA_COMMAND,SET_PTR_PAIR_COMMAND和SET_PTR_COMMAND。
3、上面的每一个元素其实是一组二进制数据,这些二进制数据是一个元素内部的数据,称之为元数据,首先需要使这些元素内部的元数据也有序,设计了一种带有缓存机制的差异性信息分析算法:针对每一个元素内部的元数据使用倍增法的思想来进行排序,首先通过一轮迭代将rank值相同的元数据归到一个元组(meta_group)中,记录当前迭代中各元组的名次(它代表了这一组中所有元数据的名次)和元组所含的元数据个数(也称之为元组的长度),以用到下一次迭代中,当元组的长度为1时,那么这个元组标记为已排好序的,也就是已经找到了它合适的位置。然后在下一次迭代时对同一个meta_group中的元数据使用优化过的快速排序方法进行排序,排序使用的主键是当前元组中每一个元数据之后的元数据的名次,次键是当前元组的名次,如果上一轮的比较迭代的比较长度是H-order,那么这一轮比较迭代就是2H-order的比较,所以是倍增的。经过一轮又一轮的比较迭代,直到比较长度等于元素内部元数据的长度的时候,该元素内部的比较就结束了,算法复杂度显而易见是O(logn),这样保证了元素内部的有序性。
而上述过程所产生的有序性的记录,会以特定格式将其序列化到文件中,文件名要具有唯一性。使得下次使用这写有序性数据的时候无需再次做一次处理,而是直接从文件中反序列化出来加以使用,从而略过产生中间临时数据这一过程以提升算法实际执行效率。
4、在对二进制数据搜索最优匹配的过程中,是在已经排过序的元数据基础之上进行二分搜索的,这也是整个算法高效的核心所在。会对已有的数据尽可能进行利用以达到减少搜索次数的目的。
利用搜索到的最优匹配,找到了绝对匹配区域,但实际在对二进制编译文件的研究中发现,实际上代码的一处修改,会导致整个编译文件的处处修改,所以认为如果在一定阈值范围内,区域仍然大致匹配的话,那么实际上这里不是代码修改导致的非匹配区域。因而的算法会将绝对匹配区域一直扩展下去,直到阈值范围以外。而这一段区域称之为模糊匹配区域。经过研究和验证,这一点改进是必要且可行的。
5、最后需要对差分模块输出的数据流进行优化和压缩,采用的方法主要是对所有表示长度的数据实施优化编码,减少这一部分数据所使用的字节数。
本发明中使用的分治差分算法包括,如图3所示,首先要获取两个版本数据,称之为源版本和目标版本,将之转为数学模型中的元素。然后预处理源版本和目标版本的元素建立元素间的有序关系,并以此作为处理的顺序,逐个元素地进行差分信息的计算,获得元素内部元数据的差分信息,所谓的差分信息其实就是找到对应的匹配区域和非匹配区域,用相应的控制命令取代数据本身生成的信息,最后将各个元素的差分信息以预定义的格式整合到一个差分数据结构中,进行输出,压缩模块会对输出的数据流进行压缩优化,最后输出到差分文件中,最终生成差分包。图3描述的制作差分包的大致过程如下:
步骤1:获取两个版本数据,称之为源版本和目标版本的二进制数据(也就是old和new的二进制数据)。将之转为数学模型中的元素。
步骤2:预处理源版本和目标版本中的元素,从而建立元素间的顺序关系。
步骤3:以步骤2输出的元素顺序作为处理的顺序,逐个元素地进行差分信息的计算,获得元素内部元数据的差分信息,所谓的差分信息其实就是找到对应的匹配区域和非匹配区域。
步骤4:用相应的控制命令取代数据本身生成的信息。
步骤5:最后将各个元素的差分信息以预定义的格式整合到一个差分数据结构中,进行输出。
步骤6:压缩模块会对输出的数据流进行压缩优化。
步骤7:最后输出到差分文件中,最终生成差分包。
差分的整体概念以及运用环境的说明如图4所示:源文件和目标文件作为输入传入差分模块,经由自研差分算法得出源版本到目标版本的差分包,然后再在持有源文件的设备上进行升级还原,也就是通过所持有的源文件与传入的差分包数据进行计算后得出目标文件的数据。图4描述的差分方案的整体过程如下:
步骤1:源文件和目标文件作为输入传入差分模块。
步骤2:经由自研差分算法得出源版本到目标版本的差分包。
步骤3:在持有源文件的设备上进行升级还原,也就是通过所持有的源文件与传入的差分包数据进行计算后得出目标文件的数据。
上述3步骤描述了如何做出从源版本到目标版本的差分包,再在设备上进行使用的。
差分方案的模块图如图5所示:首先要获取两个版本数据,称之为源版本和目标版本。经由Loader模块加载入内存,然后将之转为数学模型中的元素, OldFile = { old i : old e 1 . . . old e n , . . . old d 1 . . . old d n , . . . old a 1 } NewFile = { new i : new e 1 . . . new e n , . . . new d 1 . . . new d n , . . . new a 1 } . 然后通过预处理算法模块(PreProcessAlgorithm)计算进行处理,大体分为五步:首先建立元素集合的偏序关系,再使用BFS(广度优先搜索)模块优化这一偏序(通过计算依赖权重并聚合依赖权重大的元素),再找出该偏序关系所对应的有向图的强连通分量,对强连通分量进行分组并使用拓扑排序建立元素集合的有序关系,并以此作为处理的顺序,逐个元素地进行差分信息的计算,这部分计算是交给DiffAlgorithm模块计算,它利用Sort模块对Old元素内部元数据进行排序(这一个排序的动作对于后期进行搜索匹配区域的效率和匹配长度至关重要,而匹配的长度越长则差分效果越好),其中元数据是指:上面的每一个元素oldi其实是一组二进制数据,这些二进制数据是一个元素内部的数据,称之为元数据。再利用Search模块进行新旧数据的交叉搜索,以获取源数据到目标数据的差分信息,所谓的差分信息其实就是找到对应的匹配区域和非匹配区域,用相应的控制命令取代数据本身生成的信息,控制命令由Command模块生成,最后将各个元素的差分信息交由Compress模块压缩优化,输出数据流再交给Packager模块以预定义的格式整合到一个差分数据结构中,进行输出,最后输出到差分文件中,最终生成差分包。图5表述了差分方案中各模块是如何在整个方案中起作用的,步骤如下:
步骤1:首先要获取两个版本数据,称之为源版本和目标版本。经由Loader模块加载入内存。
步骤2:将内存中的文件数据转为数学模型中的元素, OldFile = { old i : old e 1 . . . old e n , . . . old d 1 . . . old d n , . . . old a 1 } NewFile = { new i : new e 1 . . . new e n , . . . new d 1 . . . new d n , . . . new a 1 } .
步骤3:通过预处理算法模块(PreProcessAlgorithm)对元素进行计算处理,大体分为五步:
步骤3.1:建立元素集合的偏序关系。
步骤3.2:使用BFS(广度优先搜索)模块优化这一偏序(通过计算依赖权重并聚合依赖权重大的元素)。
步骤3.3:找出该偏序关系所对应的有向图的强连通分量。
步骤3.4:对强连通分量进行分组。
步骤3.5:使用拓扑排序建立元素集合的有序关系。
步骤4:以步骤3的元素输出顺序作为处理的顺序,逐个元素进行差分信息的计算,这部分计算将交给DiffAlgorithm模块负责。
步骤4.1:利用Sort模块对Old元素内部元数据进行排序(这一个排序的动作对于后期进行搜索匹配区域的效率和匹配长度至关重要,而匹配的长度越长则差分效果越好),上面的每一个元素oldi其实是一组二进制数据,这些二进制数据是一个元素内部的数据,称之为元数据。
步骤4.2:利用Search模块进行新旧数据的交叉搜索,以获取源数据到目标数据的差分信息,所谓的差分信息其实就是找到对应的匹配区域和非匹配区域,用相应的控制命令取代数据本身生成的信息,控制命令由Command模块生成的。
步骤5:由Command模块生成控制命令。
步骤6:最后将各个元素的差分信息交由Compress模块进行压缩优化。
步骤7:将输出数据流再交给Packager模块以预定义的格式整合到一个差分数据结构中,进行输出。
步骤8:最后输出到差分文件中,最终生成差分包。
上述8步骤描述了各个模块是以怎样的方式做出从源版本到目标版本的差分包的。
预处理源文件和目标文件的步骤具体如下:
下面以一个例子讲解该算法过程,但是本算法的使用情况并不仅限于这个例子。
为了降低问题规模,采用分治的思路处理源文件和目标文件,首先对源文件和目标文件的数据进行建模,将文件数据转为相应的集合,然后计算集合中的每一个元素对偶(oldi,newi)的差分信息。
建立的集合一般是一个多重集合,也即是一个有着多个相同属性元素的集合,可以表示成:
OldFile = { old i : old e 1 . . . old e n , old d 1 . . . old d n , old a 1 . . . old a n }
NewFile = { new i : new e 1 . . . new e n , new d 1 . . . new d n , new a 1 . . . new a n }
以上就是一个有n个e元素,n个d元素,n个a元素的多重集合。而每一个元素并不是一个简单数据而是一个复合数据,包含了如位置,数值等等属性。
对每一个元素以一种原地升级的方式进行单独的差分升级,也就是进行oldi→newi的操作,所谓的原地升级就是将同一块区域的源数据直接更新成目标数据,具体地说,本发明所述的差分方案就是专门针对这一类flash空间很小的设备的,采用原地升级的升级方式,所谓的原地升级就是,依次更新设备上某一地址区间上的版本数据,然后将对应的目标版本的新数据直接覆盖写入这一地址区间。这样的话就会出现提前覆盖源数据这样的情况,而在更新下一个元素数据的时候有时是需要用到这一块的源数据的,所以为了避免这种情况,需要提前对各个元素进行一次排序。为了使得依赖关系尽可能的紧确,首先会预处理一次元素集合以找到集合的偏序关系,其实就是各元素间的依赖关系,根据这一偏序关系建立元素间的有向图,再使用Tarjan算法找到这一有向图的所有强连通分量:
OldFile = { old scc 1 , old scc 2 , . . . old scc i , old scc i + 1 , . . . }
NewFile = { new scc 1 , new scc 2 , . . . new scc i , new scc i + 1 , . . . }
其中,这里[dk,dj]是指一个强连通分量i所对应的元素索引范围。然后对各个强连通分量进行分组,再对组间的强连通分量进行拓扑排序,从而建立多重集合的有序关系:
也就是把各个元素安排成一个线性序列使得只要则有ak1<ak2。这意味着所有元素被重新安排成一条线,使得所有箭头都指向右。
使用优化的快速排序进行元数据的倍增排序,具体如下:
每一个元素是带有成员数据的数据结构,其实就是一组二进制数据,这些二进制数据是一个元素内部的数据,称之为元数据。首先需要使这些元素内部的元数据也有序,设计了一种带有缓存机制的排序算法,排序的目的是为了后期建立匹配区域和非匹配区域提供量化标准,以便搜索。因此针对每一个元素内部的元数据使用倍增法的思想来进行排序:首先通过一轮迭代将数据分组(即将rank值相同的元数据归到一个元组(meta_group)中),记录当前迭代中各元组的名次(它代表了这一组中所有元数据的名次)和元组中所含的元数据个数(也称之为元组的长度),以用到下一次迭代中,当元组的长度为1时,那么这个元组标记为已排好序的,也就是已经找到了它合适的位置。然后在下一次迭代时对同一个meta_group中的元数据使用优化过的快速排序方法进行排序,排序使用的主键是当前元组中每一个元数据之后的元数据的名次(注意数据的长度一定要是这个组所代表的长度,从而达到倍增的目的),次键是当前元组的名次,如果上一轮的比较迭代的比较长度是H-order,那么这一轮比较迭代就是2H-order的比较,所以是倍增的。以此类推直到比较长度等于元素内部数据的长度时,该元素内部的比较就结束了,算法复杂度显而易见是O(logn),这样能够保证了元素内部数据的有序性。
而上述过程所产生的有序性的记录,会以特定格式将其序列化到文件中,文件名要具有唯一性。使得下次使用这写有序性数据的时候无需再次做一次处理,而是直接从文件中反序列化出来加以使用,从而略过产生中间临时数据这一过程以提升算法实际执行效率。
同时在排序过程中我们使用了优化的快速排序,优化点有2点,分别是:消除尾递归、减少函数的调用堆栈深度。伪代码如下所示:
本来算法的末尾还有一次sfqsort(OldRank,selector+1,right)的调用,但是消除尾递归以后就会去掉这次sfqsort的函数调用,减少调用树的叶子节点数目。
降低最坏情况下的调用堆栈深度,让每一次的待排序子区间至少减半,而调用堆栈深度是跟子区间长度紧密相关的,因为调用树的每一层都会递减至少一半子区间的规模,而到达调用树的叶子节点时调用结束,而调用树的最大深度记为O(logn),所以调用堆栈深度最坏情况下就是O(logn),其中n是[left,right]的区间长度。伪代码如下所示:
排序的目的是为了给将来的搜索提供量化指标(也就是以什么样的标准来进行搜索),同时排序以后的数据才便于使用二分搜索查找相同数据建立匹配区域和非匹配区域。
建匹配区域和非匹配区域,具体如下:
在对二进制数据搜索最优匹配的过程中,我们是在已经排好序的数据基础之上进行二分搜索的,这也是整个算法高效的核心所在。
利用搜索到的最优匹配,找到绝对匹配区域,但实际在对二进制编译文件的研究中发现,实际上代码的一处修改,会导致整个编译文件的处处修改,所以如果在一定阈值范围内,区域仍然大致匹配的话,那么实际上这里不是代码修改导致的非匹配区域。因而算法会将绝对匹配区域一直扩展下去,直到阈值范围以外。而这一段区域称之为模糊匹配区域。经过研究和验证,这一点改进是必要且可行的。在元数据上的控制区域的结构示意图如图6所示,其中:
Equal区域是绝对匹配区域,Diff区域是绝对非匹配区域,括号部分是模糊匹配区域。区域的箭头代表绝对匹配区域的可扩展方向,将从上一次的模糊匹配区域开始进行前向扩展,同时从该次的绝对匹配区域开始进行后向扩展,如果在扩展区域中发现该区域满足了模糊匹配的条件,那么将该扩展区域标记为模糊匹配区域,并合入到上一次的匹配控制区域,这需要动态调整上一个控制命令。否则以一个新的控制命令来记录新的控制匹配区域。
计算源文件和目标文件的差分信息,具体如下:
建立了匹配区域和非匹配区域后,将对每一个区域以一个控制命令取代,即以一种表格的形式记录控制命令对应的控制区域,这样大量的信息就被短短几个字节所取代,从而达到差分的目的。控制命令分成SetCommand、CopyCommand两大类。SetCommand代表非匹配部分数据,这一部分数据在old数据中找不到匹配的数据,只能进行替换;CopyCommand代表匹配区域部分数据,这一部分数据可以在old源文件上查找到相应数据,所以只需要标记以后即可跳过,差分的效率主要体现在CopyCommand的个数上。
控制命令的结构分为4部分组成,组成如图10所示:
Type:表示该命令的类型,类型详情见上述;
From:表示该命令所控制的区域的起始地址;
LengthData:长度数据,是指所代表的数据的长度,对这一个值会进行精心的编码优化;
data:CopyCommand不需要这一部分在数据流中不会占据位置,而SetCommand需要这一部分表示需要插入的数据内容。
本发明还可以对SetCommand的编码进行优化,其中SetCommand命令分为:SET_COMMAND_BASE,SET_PTR_DELTA_COMMAND,SET_PTR_PAIR_COMMAND,SET_PTR_COMMAND,其中:
SET_COMMAND_BASE:最普通的SetCommand,查找Cache中匹配的DeltaValue,然后以Old value+Delta value,更新获得新的New Data;
SET_PTR_DELTA_COMMAND:查找Cache中匹配的索引值,直接获取其中的NewData;
SET_PTR_PAIR_COMMAND:暂作保留,尚未使用;
SET_PTR_COMMAND:当Cache为空或者说搜索不到相应的New Data和Delta Data时直接进行对应位置数据的设置,并将该项插入Cache。插入的方式是以MRU(Most Recently Used)算法思路进行,保证存在于Cache的项一定是最近最常使用的匹配项,这是一种遵循计算机中的就近原则的启发式的插入方法。
本算法对SetCommand进行的优化,其核心是使用了缓存,该缓存最多只能存储长度为4的命令(但已经足够),在图11中该缓存被命名为setPointerCache。各项值的意义如图11中说明所示:它的各项值代表的是每一个SET_PTR_DELTA_COMMAND控制命令所用到的cache索引值。还原模块将从该索引值对应的cache组中找到插入值进行还原。
如图13所示,本发明中所使用的几种SetCommand命令分别在以下五种情况下进行使用,其中Case0属于异常情况。
Case0:没有在对应cache单元中找到任何匹配项,指定的len超出了范围,那么返回错误码;
Case1:UA_ENCODING_SET_PTR_COMMAND_BASE是指没有在对应cache单元中找到任何匹配项,需要直接添加到cache中(>=0x94),命令计算公式:
decodedCommand=mismatchLen+UA_ENCODING_SET_PTR_COMMAND_BASE-1;
Case2:UA_ENCODING_SET_PTR_PAIR_COMMAND_BASE是指在对应的cache单元中找到Old Data|New Data匹配的Command(set pair command0x90-0x94),只会从cache中获取New Data,不会修改cache中New Data的值,命令计算公式:
decodedCommand=mismatchLen+UA_ENCODING_SET_PTR_PAIR_COMMAND_BASE-1;
Case3:UA_ENCODING_SET_PTR_DELTA_COMMAND_BASE是指在对应的cache单元中找到Delta Value匹配(0x10-0x90),命令计算公式:
decodedCommand=decodedCacheIndex+BaseAddress;其中,decodedCacheIndex是从Cache中找到mismatchLen对应的Delta Value的索引;
BaseAddress=deltaBaseAddress[mismatchLen-1];
Case4:UA_ENCODING_SET_COMMAND_BASE是剩下的所有需要用到SetCommand的情况。
综上所述,利用缓存的SetCommand查表可以避免在差分包中记录重复的SetCommand控制命令,减少了差分包的尺寸大小。
对数据流进行优化,具体如下:
对所有表示长度的数据实施优化编码,返回编码后的数据长度。编码的目的是压缩数据长度。对于小于0的整数不予编码,因为它们属于不合法的数据。最长可编码的数据长度达到5字节,但是这是十分罕见的大数据了,一般用不到这么大。经过编码的数据的第一个字节即表示数据0xFB与随后还有的数据长度N之和,对后面N个字节的数据进行拼接就得到编码前的数据了。对各项值所用的数据长度如图14所示,至少需要1个字节,至多需要5个字节,但需要5字节的数据是十分少见的,编码数据结构如图15所示,其中count是指原本数值在减去了0xFB后剩余数值的字节长度。
编码伪代码:
从可变长度的压缩流中解压出正整数值,返回压缩编码的真实数值。
解码伪代码:
这样编码后的控制命令相较于之前的控制命令所使用的字节数大大减少,也就使得最终记入差分包中的控制命令的字节数大大减少,优化了差分包的尺寸大小。但是最坏情况下是使得字节数有所增长,但这种情况极为少见。
分治差分方案的详细过程如图7所示:通过分治的方式分析并计算源版本和目标版本的差异性信息:在制作版本A到B的差分升级包的过程中,会对源版本数据A和目标版本数据B的二进制数据流进行处理,将之转为一个多重元素集合,也即是一个有着多个相同属性元素的集合,由于是原地升级,所以整个元素集合就存在一种偏序关系,这种偏序关系其实就是元素间的一个依赖关系,xi<xj就表示元素i必须要在元素j之前被更新。然后经过数学变换和排序将偏序嵌入到一个线性序中,也就是把各个元素安排成一个线性序列使得只要则有ak1<ak2。在图形上来看就是所有元素被重新安排成一条线,使得所有箭头都指向右。
算法的目标是是以一种表格的方式记录控制命令对应的控制区域,而控制命令又分成SetCommand、CopyCommand两大类。这两类名字有着一个共同的数据结构的布局,其中需要精心编码的是SetCommand,它又分为了SET_COMMAND_BASE,SET_PTR_DELTA_COMMAND,SET_PTR_PAIR_COMMAND和SET_PTR_COMMAND。
上面的每一个元素其实是一组二进制数据,这些二进制数据是一个元素内部的数据,称之为元数据,首先需要使这些元素内部的元数据也有序,设计了一种带有缓存机制的差异性信息分析算法:针对每一个元素内部的元数据使用倍增法的思想来进行排序,首先通过一轮迭代将rank值相同的元数据归到一个元组(meta_group)中,记录当前迭代中各元组的名次(它代表了这一组中所有元数据的名次)和元组所含的元数据个数(也称之为元组的长度),以用到下一次迭代中,当元组的长度为1时,那么这个元组标记为已排好序的,也就是已经找到了它合适的位置。然后在下一次迭代时对同一个meta_group中的元数据使用优化过的快速排序方法进行排序,排序使用的主键是当前元组中每一个元数据之后的元数据的名次,次键是当前元组的名次,如果上一轮的比较迭代的比较长度是H-order,那么这一轮比较迭代就是2H-order的比较,所以是倍增的。经过一轮又一轮的比较迭代,直到比较长度等于元素内部元数据的长度的时候,该元素内部的比较就结束了,算法复杂度显而易见是O(logn),这样保证了元素内部的有序性。
而上述过程所产生的有序性的记录,会以特定格式将其序列化到文件中,文件名要具有唯一性。使得下次使用这写有序性数据的时候无需再次做一次处理,而是直接从文件中反序列化出来加以使用,从而略过产生中间临时数据这一过程以提升算法实际执行效率。
在对二进制数据搜索最优匹配的过程中,是在已经排过序的元数据基础之上进行二分搜索的,这也是整个算法高效的核心所在。会对已有的数据尽可能进行利用以达到减少搜索次数的目的。
利用搜索到的最优匹配,找到了绝对匹配区域,但实际在对二进制编译文件的研究中发现,实际上代码的一处修改,会导致整个编译文件的处处修改,所以认为如果在一定阈值范围内,区域仍然大致匹配的话,那么实际上这里不是代码修改导致的非匹配区域。因而的算法会将绝对匹配区域一直扩展下去,直到阈值范围以外。而这一段区域称之为模糊匹配区域。经过研究和验证,这一点改进是必要且可行的。
最后需要对差分模块输出的数据流进行优化和压缩,采用的方法主要是对所有表示长度的数据实施优化编码,减少这一部分数据所使用的字节数。
图7详细描述了本发明所涉及的分治差分方案的流程:
步骤1:获取old和new版本二进制数据,也就是源版本数据和目标版本二进制数据,以字节流的形式被加载到内存,如果字节一致,则无需制作差分包,直接退出制作差分包,否则进入步骤2。
步骤2:对字节流数据进行抽象和建模,转为模型中的元素,首先对元素进行分组,得到如下所示的一个多重集合,其中分成了e.d.a三个组,各组之间由于不会影响,所以无所谓顺序:
OldFile = { old i : old e 1 . . . old e n , old d 1 . . . old d n , . . . old a 1 }
NewFile = { new i : new e 1 . . . new e n , new d 1 . . . new d n , . . . new a 1 }
步骤3:对组内元素进行预处理得到元素间的依赖关系,依据这种两两的依赖关系将组内元素建成一个有向图。
步骤4:建成有向图后,调用Tarjan算法求得有向图的强连通分量Sccs。
步骤5:利用强连通分量之间的依赖关系进行拓扑排序.至此,各个元素安排成了一个线性序列使得只要则有dk1<dk2
步骤6:遍历所有的(oldi,newi)对偶,对每一对对偶进行计算差分信息.计算差分信息的过程在关键技术点中已经进行了描述,这里不再赘述.
步骤7:最后需要对差分模块输出的数据流进行优化和压缩,采用的方法主要是对所有表示长度的数据实施优化编码,减少这一部分数据所使用的字节数。
步骤8:得到从源版本到目标版本的差分包文件。
差分算法中所采用的控制命令的组成结构分为4部分,组成如图10所示:
Type:表示该命令的类型,类型详情见上述。
From:表示该命令所控制的区域的起始地址。
LengthData:长度数据,是指所代表的数据的长度,对这一个值会进行精心的编码优化。
data:CopyCommand不需要这一部分在数据流中不会占据位置。而SetCommand需要这一部分,表示需要插入的数据内容。
下面结合图8至图9,对本发明的终端软件升级流程做出进一步说明。
图8描述了利用本发明制作的差分包的大致还原过程:
步骤1:将差分包读取到内存中。
步骤2:解析差分包数据,将差分信息提取出来,建立一个差分信息集合{diff1,diff2,...,diffn},而其中每一个元素diffi都实际是由图5所示的对偶计算而来,所以在还原过程中也将作用于对应源版本数据,使之更新为相应目标版本数据,并覆盖写入同一地址区间。
步骤3:对集合中元素逐个进行更新,根据元素中的控制命令进行数据更新,更新完成后覆盖写入设备上的同一地址区间(如图9所示)。
步骤4:所有元素更新完成后,更新成功,删除升级包。
利用控制命令进行数据更新:
需要注意的是在更新过程中,对编码过的数据要进行解码,解码过程(squeezer_unsqueeze)是编码过程(squeezer_squeeze)的逆过程.在前文已经阐述过编码优化的原理,这里不再赘述.
处理CopyCommand,该命令意义如下:From域意指从何处起始,LengthData域意指控制区域的长度,data域为空,无需使用。该命令代表从源版本地址From开始有长达LengthData这么多的数据与目标版本是相同的,所以直接跳过该命令的控制区域即可。
在整个更新过程中会维护一张缓存表Cache Table(如图11所示),处理SetCommand命令时需要用到,处理过程需要分为以下几种情况:
1.处理SET_COMMAND_BASE命令:这是最普通的SetCommand,当更新到某一数据时,该数据区域对应的是一个SET_COMMAND_BASE命令时,首先要提取出命令的LengthData域,依据此项定位到Cache Table的某一行,然后根据命令的编码值(如图13所示)定位到具体表项,将存在表项中的Delta Value提取出来,然后以Old value+Delta value,从而获得目标版本数据(New Data),而后进行覆盖写入。
2.SET_PTR_DELTA_COMMAND:当更新到某一数据时,该数据区域对应的是一个SET_PTR_DELTA_COMMAND命令时,依据LengthData域和Type域即可定位到Cache Table中某一项,直接获取存于其中的目标版本数据(New Data),而后进行覆盖写入。
3.SET_PTR_PAIR_COMMAND:暂作保留,尚未使用。
4.SET_PTR_COMMAND:当更新到某一数据时,该数据区域对应的是一个SET_PTR_COMMAND命令时,程序即可知此时Cache Table中没有相应的NewData或Delta Data,则直接提取出命令的data域数据作为目标版本数据(NewData)进行覆盖写入,并将此次操作所用到的(Old Data,New Data)插入对应的Cache Table表项中。
综上所述,本发明实现在内存空间比较小的设备上进行版本升级。
尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。

Claims (10)

1.一种终端软件升级方法,其特征在于,包括:
持有源版本软件的终端获取用于升级源版本软件的差分包;
通过解析所述差分包,得到由多个具有控制命令的元素组成的差分信息集合;
按照各元素在所述差分信息集合中的顺序和各自具有的控制命令,依次对源版本软件中相应区域的数据进行更新,从而使源版本软件升级为目标版本软件。
2.根据权利要求1所述的方法,其特征在于,所述的持有源版本软件的终端获取用于升级源版本软件的差分包的步骤包括:
终端从网络侧下载所述用于升级源版本软件的差分包,并将所述差分包读取到内存。
3.根据权利要求1所述的方法,其特征在于,所述控制命令包括用来指示数据复制的控制命令和用来指示数据替换的控制命令,所述的按照各元素在所述差分信息集合中的顺序和各自具有的控制命令,依次对源版本软件中相应区域的数据进行更新的步骤包括:
终端利用当前元素所具有的用来指示数据替换的控制命令,获取用来替换源版本软件中指定区域数据的目标版本软件数据,并将所述目标版本软件数据覆盖写入到所述指定区域;
所述目标版本软件数据覆盖写入到所述指定区域后,终端按照所述差分信息集合中的元素顺序,对下一个元素指定区域的数据进行更新。
4.根据权利要求3所述的方法,其特征在于,当当前元素具有用来指示数据复制的控制命令,则直接按照所述差分信息集合中的元素顺序,对下一个元素指定区域的数据进行更新。
5.根据权利要求1-4任意一项所述的方法,其特征在于,还包括网络侧生成所述差分包的步骤,包括:
对源版本软件和目标版本软件的二进制数据分别进行处理,得到具有多个属性元素的源版本多重元素集合和目标版本多重元素集合;
按照源版本多重元素集合中各元素的升级顺序,依次计算所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息;
根据所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息,生成用于终端软件升级的差分包。
6.根据权利要求5所述的方法,其特征在于,所述的根据所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息,生成用于终端软件升级的差分包的步骤包括:
利用所述源版本多重元素集合和目标版本多重元素集合之间的各对应元素的差分信息,生成相应的控制命令;
按照预定格式,对所生成的控制命令和所述差分信息进行封装并压缩,形成成差分包输出。
7.根据权利要求6所述的方法,其特征在于,所述差分信息用于标识源版本软件和目标版本软件之间的匹配区域或非匹配区域。
8.根据权利要求7所述的方法,其特征在于,当所述差分信息用于标识源版本软件和目标版本软件之间的匹配区域时,生成用来指示数据复制的控制命令。
9.根据权利要求7所述的方法,其特征在于,当所述差分信息用于标识源版本软件和目标版本软件之间的非匹配区域时,生成用来指示数据替换的控制命令。
10.一种终端软件升级装置,其特征在于,包括:
差分包获取模块,用于获取用来升级终端源版本软件的差分包;
差分包解析模块,用于通过解析所述差分包,得到由多个具有控制命令的元素组成的差分信息集合;
软件升级模块,用于按照各元素在所述差分信息集合中的顺序和各自具有的控制命令,依次对源版本软件中相应区域的数据进行更新,从而使源版本软件升级为目标版本软件。
CN201410100573.1A 2014-03-17 2014-03-17 一种终端软件升级方法及装置 Withdrawn CN104932909A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201410100573.1A CN104932909A (zh) 2014-03-17 2014-03-17 一种终端软件升级方法及装置
PCT/CN2014/081013 WO2015139381A1 (zh) 2014-03-17 2014-06-27 一种终端软件升级方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410100573.1A CN104932909A (zh) 2014-03-17 2014-03-17 一种终端软件升级方法及装置

Publications (1)

Publication Number Publication Date
CN104932909A true CN104932909A (zh) 2015-09-23

Family

ID=54120085

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410100573.1A Withdrawn CN104932909A (zh) 2014-03-17 2014-03-17 一种终端软件升级方法及装置

Country Status (2)

Country Link
CN (1) CN104932909A (zh)
WO (1) WO2015139381A1 (zh)

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105740132A (zh) * 2016-01-25 2016-07-06 中国人民解放军国防科学技术大学 基于修改日志的软件包来源自动分析方法
CN106843954A (zh) * 2017-01-16 2017-06-13 武汉慧联无限科技有限公司 传感器节点远程升级方法
CN107273159A (zh) * 2017-06-08 2017-10-20 深圳市华信天线技术有限公司 适于嵌入式系统的差量式补丁升级方法及装置
CN108491225A (zh) * 2018-03-15 2018-09-04 维沃移动通信有限公司 一种更新包生成方法及移动终端
CN109298873A (zh) * 2017-07-18 2019-02-01 中兴通讯股份有限公司 一种系统升级方法及装置
CN109358872A (zh) * 2018-09-21 2019-02-19 广东美的暖通设备有限公司 远程固件升级方法、装置及计算机可读存储介质
CN110795131A (zh) * 2018-08-01 2020-02-14 技嘉科技股份有限公司 服务器固件更新方法
CN111258620A (zh) * 2018-11-30 2020-06-09 中兴通讯股份有限公司 差分升级包的生成方法、装置和设备
CN111367544A (zh) * 2018-12-26 2020-07-03 美的集团股份有限公司 多外设固件升级控制方法、智能设备、固件及电子设备
CN112068865A (zh) * 2020-09-02 2020-12-11 上海飞奥燃气设备有限公司 高效智能燃气表差分固件升级方法
CN112286565A (zh) * 2020-10-30 2021-01-29 浙江正泰中自控制工程有限公司 一种基于存储容器的嵌入式系统差分升级方法
CN112398666A (zh) * 2019-08-13 2021-02-23 中兴通讯股份有限公司 软件差分升级方法、装置、设备及存储介质
CN113539405A (zh) * 2021-06-24 2021-10-22 北京天健源达科技股份有限公司 电子病历表格运算控件的处理方法
CN113721967A (zh) * 2021-08-30 2021-11-30 苏州磐联集成电路科技股份有限公司 差分包生成方法,差分包生成设备,及升级方法
CN113947397A (zh) * 2021-03-09 2022-01-18 同济大学 统一移动支付平台的对账方法、系统、存储介质及终端
CN110275728B (zh) * 2019-06-28 2023-11-07 瓴盛科技有限公司 更新固件的系统及其方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111104149A (zh) 2018-10-25 2020-05-05 华为技术有限公司 一种固件升级方法、装置及终端

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101153803A (zh) * 2006-09-29 2008-04-02 爱信艾达株式会社 数据更新系统、导航装置、及数据更新方法
KR100825348B1 (ko) * 2005-03-22 2008-04-28 닛본 덴끼 가부시끼가이샤 서버 시스템 및 온라인 소프트웨어 갱신 방법
CN101420431A (zh) * 2008-11-28 2009-04-29 中兴通讯股份有限公司 Fota服务器、终端及其软件版本的处理方法和系统
CN102693145A (zh) * 2012-05-31 2012-09-26 红石阳光(北京)科技有限公司 用于嵌入式系统的差分升级方法
CN103200219A (zh) * 2013-02-05 2013-07-10 北京小米科技有限责任公司 数据包更新方法、装置、终端设备和服务器

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8554748B1 (en) * 2005-11-30 2013-10-08 Netapp, Inc. Method and apparatus for differential file based update for embedded systems
CN101383847A (zh) * 2008-08-25 2009-03-11 中兴通讯股份有限公司 一种无线数据终端的固件升级方法及装置
CN102346673A (zh) * 2010-07-27 2012-02-08 比亚迪股份有限公司 一种手机系统升级的方法及装置
CN103123588A (zh) * 2013-02-05 2013-05-29 东莞宇龙通信科技有限公司 一种获取差分升级补丁的方法及系统
CN103313229B (zh) * 2013-05-27 2017-04-19 华为终端有限公司 一种空中下载技术升级的方法及设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100825348B1 (ko) * 2005-03-22 2008-04-28 닛본 덴끼 가부시끼가이샤 서버 시스템 및 온라인 소프트웨어 갱신 방법
CN101153803A (zh) * 2006-09-29 2008-04-02 爱信艾达株式会社 数据更新系统、导航装置、及数据更新方法
CN101420431A (zh) * 2008-11-28 2009-04-29 中兴通讯股份有限公司 Fota服务器、终端及其软件版本的处理方法和系统
CN102693145A (zh) * 2012-05-31 2012-09-26 红石阳光(北京)科技有限公司 用于嵌入式系统的差分升级方法
CN103200219A (zh) * 2013-02-05 2013-07-10 北京小米科技有限责任公司 数据包更新方法、装置、终端设备和服务器

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105740132B (zh) * 2016-01-25 2018-07-06 中国人民解放军国防科学技术大学 基于修改日志的软件包来源自动分析方法
CN105740132A (zh) * 2016-01-25 2016-07-06 中国人民解放军国防科学技术大学 基于修改日志的软件包来源自动分析方法
CN106843954A (zh) * 2017-01-16 2017-06-13 武汉慧联无限科技有限公司 传感器节点远程升级方法
CN107273159A (zh) * 2017-06-08 2017-10-20 深圳市华信天线技术有限公司 适于嵌入式系统的差量式补丁升级方法及装置
CN109298873B (zh) * 2017-07-18 2023-05-09 中兴通讯股份有限公司 一种系统升级方法及装置
CN109298873A (zh) * 2017-07-18 2019-02-01 中兴通讯股份有限公司 一种系统升级方法及装置
CN108491225A (zh) * 2018-03-15 2018-09-04 维沃移动通信有限公司 一种更新包生成方法及移动终端
CN110795131A (zh) * 2018-08-01 2020-02-14 技嘉科技股份有限公司 服务器固件更新方法
CN109358872A (zh) * 2018-09-21 2019-02-19 广东美的暖通设备有限公司 远程固件升级方法、装置及计算机可读存储介质
CN111258620A (zh) * 2018-11-30 2020-06-09 中兴通讯股份有限公司 差分升级包的生成方法、装置和设备
CN111258620B (zh) * 2018-11-30 2022-02-22 中兴通讯股份有限公司 差分升级包的生成方法、装置和设备
CN111367544A (zh) * 2018-12-26 2020-07-03 美的集团股份有限公司 多外设固件升级控制方法、智能设备、固件及电子设备
CN111367544B (zh) * 2018-12-26 2021-09-03 美的集团股份有限公司 多外设固件升级控制方法、智能设备、固件及电子设备
CN110275728B (zh) * 2019-06-28 2023-11-07 瓴盛科技有限公司 更新固件的系统及其方法
CN112398666A (zh) * 2019-08-13 2021-02-23 中兴通讯股份有限公司 软件差分升级方法、装置、设备及存储介质
CN112398666B (zh) * 2019-08-13 2024-04-30 中兴通讯股份有限公司 软件差分升级方法、装置、设备及存储介质
WO2022048511A1 (zh) * 2020-09-02 2022-03-10 上海飞奥燃气设备有限公司 智能燃气表差分固件升级方法
CN112068865A (zh) * 2020-09-02 2020-12-11 上海飞奥燃气设备有限公司 高效智能燃气表差分固件升级方法
CN112286565B (zh) * 2020-10-30 2023-03-10 浙江正泰中自控制工程有限公司 一种基于存储容器的嵌入式系统差分升级方法
CN112286565A (zh) * 2020-10-30 2021-01-29 浙江正泰中自控制工程有限公司 一种基于存储容器的嵌入式系统差分升级方法
CN113947397A (zh) * 2021-03-09 2022-01-18 同济大学 统一移动支付平台的对账方法、系统、存储介质及终端
CN113539405A (zh) * 2021-06-24 2021-10-22 北京天健源达科技股份有限公司 电子病历表格运算控件的处理方法
CN113539405B (zh) * 2021-06-24 2024-03-19 北京天健源达科技股份有限公司 电子病历表格运算控件的处理方法
CN113721967A (zh) * 2021-08-30 2021-11-30 苏州磐联集成电路科技股份有限公司 差分包生成方法,差分包生成设备,及升级方法

Also Published As

Publication number Publication date
WO2015139381A1 (zh) 2015-09-24

Similar Documents

Publication Publication Date Title
CN104932909A (zh) 一种终端软件升级方法及装置
US7031972B2 (en) Algorithms for block-level code alignment of software binary files
US8838551B2 (en) Multi-level database compression
Nong et al. Linear suffix array construction by almost pure induced-sorting
CN115220918A (zh) 一种神经网络的内存分配方法及装置
US7676479B2 (en) Method and system for updating versions of content stored in a storage device
CN103984582A (zh) 一种热更新方法和装置
CN105683940A (zh) 处理混合流的数据流图
CN105808209A (zh) 用于内嵌在存储器层级内的经熵编码软件的存储和翻译的方法和设备
Andrzejewski et al. GPU-WAH: Applying GPUs to compressing bitmap indexes with word aligned hybrid
CN104267978A (zh) 一种生成差分包的方法及装置
CN106778079A (zh) 一种基于MapReduce的DNA序列k‑mer频次统计方法
CN104834539A (zh) 一种数据增量更新方法
CN109284424B (zh) 构造滑动情况表的方法
CN108141225B (zh) 使用simd引擎的通用数据压缩
CN103984609A (zh) 一种基于写时复制的文件系统中回收检查点的方法和装置
CN105302915B (zh) 基于内存计算的高性能数据处理系统
Diekert et al. Efficient algorithms for highly compressed data: The Word Problem in Higman's group is in P
CN105488471A (zh) 一种字形识别方法及装置
CN111026736B (zh) 数据血缘管理方法及装置、数据血缘解析方法及装置
Ni et al. Incremental updates based on graph theory for consumer electronic devices
US8805891B2 (en) B-tree ordinal approximation
Andrzejewski et al. GPU-PLWAH: GPU-based implementation of the PLWAH algorithm for compressing bitmaps
CN111427857B (zh) 一种基于分区参照技术的fpga配置文件压缩解压方法
Ju et al. Strong Morse–Lyapunov functions for Morse decompositions of attractors of random dynamical systems

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication

Application publication date: 20150923

WW01 Invention patent application withdrawn after publication