一种终端软件升级方法及装置的制造方法_2

文档序号:9217050阅读:来源:国知局
发明提供的终端软件升级装置框图,如图2所示,包括差分包获取模块、 差分包解析模块和软件升级模块,其中,差分包获取模块获取用来升级终端源版本软件的 差分包,所述差分包解析模块通过解析所述差分包,得到由多个具有控制命令的元素组成 的差分信息集合,所述软件升级模块按照各元素在所述差分信息集合中的顺序和各自具有 的控制命令,依次对源版本软件中相应区域的数据进行更新,从而使源版本软件升级为目 标版本软件。
[0055] 下面结合图3至图7,以及图10至图15,对本发明的进一步说明。
[0056] 本发明提供一种专门针对版本编译文件的分治差分算法,提供一种专门针对于 flash空间很有限的设备的差分升级的算法方案。需要先获取两个版本的二进制文件,old 和new版本数据(其中old就是源版本数据,new就是目标版本数据,之后两者会交替使 用),然后对源版本数据和目标版本数据进行处理,再分析计算原版本和目标版本的差异 性信息,最后生成差分升级包。
[0057] 1、通过分治的方式分析并计算源版本和目标版本的差异性信息:在制作版本A 到B的差分升级包的过程中,会对源版本数据A和目标版本数据B的二进制数据流进行处 理,将之转为一个多重元素集合,也即是一个有着多个相同属性元素的集合,由于是原地升 级,所以整个元素集合就存在一种偏序关系,这种偏序关系其实就是元素间的一个依赖关 系,Xi〈&就表示元素i必须要在元素j之前被更新。然后经过数学变换和排序将偏序嵌 入到一个线性序中,也就是把各个元素安排成一个线性序列…Old,,、,,使得只要 fdd,.则有akl〈ak2。这意味着所有元素被重新安排成一条线,使得所有箭头都指向 右。
[0058] 2、算法的目标是以一种表格的方式记录控制命令对应的控制区域,而控制命令 又分成SetCommand、CopyCommand两大类。这两类名字有着一个共同的数据结构的布 局,其中需要精心编码的是SetCommand,它又分为了SET_C0MMAND_BASE,SET_PTR_DELTA_ COMMAND,SET_PTR_PAIR_C0MMAND和SET_PTR_C0MMAND。
[0059] 3、上面的每一个元素〇齡^其实是一组二进制数据,这些二进制数据是一个元素 内部的数据,称之为元数据,首先需要使这些元素内部的元数据也有序,设计了一种带有缓 存机制的差异性信息分析算法:针对每一个元素内部的元数据使用倍增法的思想来进行排 序,首先通过一轮迭代将rank值相同的元数据归到一个元组(meta_group)中,记录当前 迭代中各元组的名次(它代表了这一组中所有元数据的名次)和元组所含的元数据个数 (也称之为元组的长度),以用到下一次迭代中,当元组的长度为1时,那么这个元组标记为 已排好序的,也就是已经找到了它合适的位置。然后在下一次迭代时对同一个meta_group 中的元数据使用优化过的快速排序方法进行排序,排序使用的主键是当前元组中每一个元 数据之后的元数据的名次,次键是当前元组的名次,如果上一轮的比较迭代的比较长度是 H-order,那么这一轮比较迭代就是2H-〇rder的比较,所以是倍增的。经过一轮又一轮的比 较迭代,直到比较长度等于元素内部元数据的长度的时候,该元素内部的比较就结束了,算 法复杂度显而易见是O(logn),这样保证了元素内部的有序性。
[0060] 而上述过程所产生的有序性的记录,会以特定格式将其序列化到文件中,文件名 要具有唯一性。使得下次使用这写有序性数据的时候无需再次做一次处理,而是直接从文 件中反序列化出来加以使用,从而略过产生中间临时数据这一过程以提升算法实际执行效 率。
[0061] 4、在对二进制数据搜索最优匹配的过程中,是在已经排过序的元数据基础之上进 行二分搜索的,这也是整个算法高效的核心所在。会对已有的数据尽可能进行利用以达到 减少搜索次数的目的。
[0062] 利用搜索到的最优匹配,找到了绝对匹配区域,但实际在对二进制编译文件的研 究中发现,实际上代码的一处修改,会导致整个编译文件的处处修改,所以认为如果在一定 阈值范围内,区域仍然大致匹配的话,那么实际上这里不是代码修改导致的非匹配区域。因 而的算法会将绝对匹配区域一直扩展下去,直到阈值范围以外。而这一段区域称之为模糊 匹配区域。经过研究和验证,这一点改进是必要且可行的。
[0063] 5、最后需要对差分模块输出的数据流进行优化和压缩,采用的方法主要是对所有 表示长度的数据实施优化编码,减少这一部分数据所使用的字节数。
[0064] 本发明中使用的分治差分算法包括,如图3所示,首先要获取两个版本数据,称之 为源版本和目标版本,将之转为数学模型中的元素。然后预处理源版本和目标版本的元素 建立元素间的有序关系,并以此作为处理的顺序,逐个元素地进行差分信息的计算,获得元 素内部元数据的差分信息,所谓的差分信息其实就是找到对应的匹配区域和非匹配区域, 用相应的控制命令取代数据本身生成的信息,最后将各个元素的差分信息以预定义的格式 整合到一个差分数据结构中,进行输出,压缩模块会对输出的数据流进行压缩优化,最后输 出到差分文件中,最终生成差分包。图3描述的制作差分包的大致过程如下:
[0065]步骤1:获取两个版本数据,称之为源版本和目标版本的二进制数据(也就是old和new的二进制数据)。将之转为数学模型中的元素。
[0066] 步骤2 :预处理源版本和目标版本中的元素,从而建立元素间的顺序关系。
[0067]步骤3 :以步骤2输出的元素顺序作为处理的顺序,逐个元素地进行差分信息的计 算,获得元素内部元数据的差分信息,所谓的差分信息其实就是找到对应的匹配区域和非 匹配区域。
[0068] 步骤4 :用相应的控制命令取代数据本身生成的信息。
[0069] 步骤5:最后将各个元素的差分信息以预定义的格式整合到一个差分数据结构 中,进行输出。
[0070] 步骤6:压缩模块会对输出的数据流进行压缩优化。
[0071] 步骤7 :最后输出到差分文件中,最终生成差分包。
[0072] 差分的整体概念以及运用环境的说明如图4所示:源文件和目标文件作为输入传 入差分模块,经由自研差分算法得出源版本到目标版本的差分包,然后再在持有源文件的 设备上进行升级还原,也就是通过所持有的源文件与传入的差分包数据进行计算后得出目 标文件的数据。图4描述的差分方案的整体过程如下:
[0073] 步骤1 :源文件和目标文件作为输入传入差分模块。
[0074] 步骤2 :经由自研差分算法得出源版本到目标版本的差分包。
[0075] 步骤3 :在持有源文件的设备上进行升级还原,也就是通过所持有的源文件与传 入的差分包数据进行计算后得出目标文件的数据。
[0076] 上述3步骤描述了如何做出从源版本到目标版本的差分包,再在设备上进行使用 的。
[0077] 差分方案的模块图如图5所示:首先要获取两个版本数据,称之为源版本和目标 版本。经由Loader模块加载入内存,然后将之转为数学模型中的元素,
然后通过预处理算法模块(PreProcessAlgorithm)计算进行处理,大体分为五步:首先建 立元素集合的偏序关系,再使用BFS(广度优先搜索)模块优化这一偏序(通过计算依赖权 重并聚合依赖权重大的元素),再找出该偏序关系所对应的有向图的强连通分量,对强连通 分量进行分组并使用拓扑排序建立元素集合的有序关系,并以此作为处理的顺序,逐个元 素地进行差分信息的计算,这部分计算是交给DiffAlgorithm模块计算,它利用Sort模块 对Old元素内部元数据进行排序(这一个排序的动作对于后期进行搜索匹配区域的效率和 匹配长度至关重要,而匹配的长度越长则差分效果越好),其中元数据是指:上面的每一个 元素〇1屯其实是一组二进制数据,这些二进制数据是一个元素内部的数据,称之为元数据。 再利用Search模块进行新旧数据的交叉搜索,以获取源数据到目标数据的差分信息,所谓 的差分信息其实就是找到对应的匹配区域和非匹配区域,用相应的控制命令取代数据本身 生成的信息,控制命令由Co_and模块生成,最后将各个元素的差分信息交由Compress模 块压缩优化,输出数据流再交给Packager模块以预定义的格式整合到一个差分数据结构 中,进行输出,最后输出到差分文件中,最终生成差分包。图5表述了差分方案中各模块是 如何在整个方案中起作用的,步骤如下:
[0078] 步骤1 :首先要获取两个版本数据,称之为源版本和目标版本。经由Loader模块 加载入内存。
[0079] 步骤2 :将内存中的文件数据转为数学模型中的元素,
[0080] 步骤3 :通过预处理算法模块(PreProcessAlgorithm)对元素进行计算处理,大体 分为五步:
[0081] 步骤3. 1 :建立元素集合的偏序关系。
[0082] 步骤3. 2:使用BFS(广度优先搜索)模块优化这一偏序(通过计算依赖权重并聚 合依赖权重大的元素)。
[0083] 步骤3. 3:找出该偏序关系所对应的有向图的强连通分量。
[0084]
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1