差分包生成方法,差分包生成设备,及升级方法与流程

文档序号:27684984发布日期:2021-12-01 01:01阅读:611来源:国知局
差分包生成方法,差分包生成设备,及升级方法与流程

1.本技术涉及嵌入式系统的固件升级方法,尤其涉及一种可供内存资源有限的嵌入式系统以分块方式进行升级的差分包。


背景技术:

2.传统嵌入式系统一般都是计算能力和内存资源受限的设备。当其中的固件需要升级时,可以采用整包升级法或差分升级法。整包升级法的好处是不需要旧的固件数据,直接以新档案覆盖。差分升级又称为增量升级(incremental upgrade),升级包中只携带了差异处的数据,至于与原文件相同处的数据,仍然仰赖固件提供,所以升级包的档案大小可以显着减少。差分包通常是由内存资源相对富裕的上位设备生成,再传送至嵌入式系统中进行还原组成。上位设备通常是指嵌入式系统的生产设备,也可以是云端服务器,或桌上型计算机。而嵌入式系统可以是低端的小型程控设备,例如网关,物联网装置,路由等。对于嵌入式系统而言,由于内存资源受限,差分包的还原组成过程较为困难。为了适应有限的内存容量,差分包可以切成多个小区块,分批写入。升级包以差分形式实作,目的在优化升级包大小。传统方式是以数据移动和数据删除的命令来减少必须携带的数据。然而,数据的添加是无法减除的。因此升级包的大小优化,主要受到数据添加的影响。当差分数据以多个小区块分批写入时,由于缺乏全局的信息判断,有概率导致固件中的原文件原本存在的有效信息被覆盖。为此,在生成差分包时,必须以数据添加的形式重复携带被覆盖的有效信息,使生成的差分包变大而失去优化的目的。
3.因此,一种适用于低端规格的嵌入式系统的优化差分包生成方法,是有待开发的。


技术实现要素:

4.为了在嵌入式系统的固件中完整还原新文件,本技术的实施例在上位设备端生成差分包时,考虑了原文件和新文件之间的数据差异特性,以及嵌入式系统的容量特征,以最大化原文件中有效信息的再利用率,确保还原成功。
5.为了解决上述技术问题,本技术提出一种差分包生成方法,可使内存资源缺乏的嵌入式系统以分块的方式执行差分升级。差分包是在上位设备中生成。所述上位设备首先对原文件以及新文件进行差分比对,产生全局差分信息。所述全局差分信息包括所述新文件与所述原文件匹配部份的地址和长度。接着根据所述全局差分信息,将所述新文件分割成多个子区块,并决定所有子区块的补丁参数。接着根据所述补丁参数,将每个子区块与所述原文件进行差分比对,生成对应每一子区块的差分块。最后,集成所述差分块,生成所述差分包。
6.若所述新文件与原文件的大小不同,在将所述新文件分割之前,可将所述原文件及所述新文件中相对小的文件尾部补上固定数据,使所述原文件及所述新文件等长。
7.将每个子区块与所述原文件进行差分比对时,如果比对结果一致,则标记所述子区块为无需更新。相对地,如果比对结果不一致,则标记所述子区块为待更新区块。
8.更具体地,每个子区块的补丁参数可包括差分起始位置,处理次序,以及处理方向。
9.在决定所有子区块的补丁参数时,可根据原文件中需被新增、删除和保留的部份决定处理次序和处理方向。本技术实施例通过处理次序和处理方向的安排,可确保原文件中需被保留的部份不被覆盖。
10.在进一步实施例中,根据所述补丁参数,将每个子区块与所述原文件进行差分比对时,可根据所述子区块的所述处理次序和所述处理方向,生成从所述差分起始位置起算的所述差分块。
11.借此,在集成所述差分块,生成差分包时,可依照所述处理次序,将每个子区块对应生成的差分块压缩并合并,形成所述差分包。
12.更进一步地,从每个子区块生成对应的差分块时,可将所述子区块更新至所述原文件的对应位置。当所述原文件被更新至与所述新文件完全一致时,确定所述差分包生成完成。
13.在另一实施例中,每一差分块中可包括至少下列其中之一:删除数据的命令,或新增数据的命令,供所述嵌入式系统更新时执行。所述删除数据的命令还可包括欲删除数据的起始地址和长度。所述新增数据的命令还可包括欲新增的数据的起始地址和所述欲新增的数据。
14.每一差分块可进一步包括移动数据的命令,使所述嵌入式系统更新时移动固件中原有的数据。
15.本技术亦提出差分包生成设备,即所述嵌入式系统的上位设备的实施例。一种差分包生成设备,可用于生成优化的差分包,使嵌入式系统以分块的方式读取所述差分包,将所述嵌入式系统中的固件中的原文件升级为新文件。在所述差分包生成设备中,包括存储器,存有代码,可用于执行前述各种差分包生成方法的实施例。内存连接所述存储器,用于载入所述代码。处理器,连接所述内存和存储器,用于执行所述代码,以生成所述差分包。
16.本技术亦提出一种应用所述差分包的升级方法,用于使嵌入式系统升级固件。首先由待升级的嵌入式系统逐一加载所述差分包中的每一所述差分块。接着使所述固件以分块的方式依照对应的所述补丁参数而升级。本技术实施例的特点,就是在生成差分包的时候,以顺序和方向的安排调度,事先排除了分块执行差分更新时可能遇到的各种冲突,使内存有限的嵌入式系统可以在不需要升级硬件的前提下顺利地以分块的方式读取差分包,进行差分升级。不但保留了差分升级的效率,也降低了硬件需求成本。
附图说明
17.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
18.图1是本技术一实施例的差分包生成设备和嵌入式系统。
19.图2是原文件和新文件进行全局差分比对的实施例。
20.图3是本技术实施例的差分包生成方法的流程图。
21.图4是本技术新文件切块及决定补丁参数的实例说明。
22.图5a至5c是本技术的生成差分升级块的实例说明。
具体实施方式
23.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
24.图1是本技术一实施例的差分包生成设备100和嵌入式系统110。差分包生成设备100一般可以是生产线上的设备,或是用户自备的桌机,在此又可称为上位设备。升级包120是在差分包生成设备100中生成,再通过网络或各种存储介质传送给嵌入式系统110。差分包生成设备100中基本包括存储器106,用于储存代码108。所述代码108可被加载至内存104中,由处理器102执行后,依照本说明书实施例介绍的差分包生成方法,生成升级包120。嵌入式系统110可以是任何生活中常见的智能家电,例如物联网设备,路由或网关。基本包括闪存116,可储存固件118,使处理器112和内存114加载并执行固件118中的功能,实现嵌入式系统110的基本运作。由于闪存116通常是可重复读写的,因此服务商可以经常性的对售出的嵌入式系统110提供固件118的升级包,即升级包120。在大部份的嵌入式系统110中,内存114是有限资源,因此要以升级包120升级固件118,必须使用分块加载的方式。然而如果升级包120是以差分包的形式存在,以分块方式执行补丁升级会因缺乏全局信息而造成有效数据被覆盖,导致升级不正确。
25.针对现有技术的缺陷,本技术提出的差分包生成方法,充分利用上位设备分析原文件和新文件的差异信息,以特定的次序分块生成差分包。所述差分包,又可称为补丁包(patch file),其中组成格式,适合内存资源缺乏的嵌入式系统以分块的方式升级固件。本技术提出的方法,同时拥有传统差分包轻省的优点,也兼具低硬件需求的优点。
26.图2是原文件和新文件进行全局差分比对的实施例。原文件202存放在内存或闪存中,其中的内容位置可表示为分布在地址a0至a6的区块a、b、c、d、e,及f。当新文件204出现,其中的区块表示为a、c、h、i、d、e。当原文件202和新文件204进行全局差分比对(diff)后,得到的全局差分信息206。一般diff比对的结果,可以最精简的格式描述原文件202和新文件204之间的差异。举例来说,diff比对的结果可指示地址a1有区块b被删除的情况(b
‑‑
),地址a2开始有新增区块h和j的情形(h++,j++),而地址a5有删除区块5的情形(f
‑‑
)。在本实施例中,全局差分信息206可用来描述原文件202和新文件204之间的匹配状况。举例来说,全局差分信息206可以是一种映射表的形式,记录了新文件中每一子区块在原文件中出现的起始地址和长度。以图2为例,可以通过一个全局差分信息206了解新文件中的区块a、c、d、e是与原文件匹配的,而且记录了这些区块在原文件中对应的起始位置和长度。借由此信息,可使后续步骤决定最优化的补丁参数,包括处理次序、起始位置和处理方向。依照所述处理次序和处理方向,每个子区块与原文件进行差分比对,得到的结果简称差分块。这些差分块最后依照所述处理次序逐个压缩进一档案中,就完成了差分包。对嵌入式系统而言,只要依序使用差分包中每一差分块所记录的数据对固件中的原文件进行补丁运算(patch),就可以在固件中无缝还原新文件。
27.图3是本技术实施例的差分包生成方法的流程图。实施具体步骤如下。
28.在步骤301中,对原文件202(待升级文件)以及新文件204(目标文件)整体做差分比对,得到全局差分信息206,包括目标文件数据在待升级文件中匹配的位置和长度的映像
表。一般差分比对可将两个文件的差异处,以特定格式记录(例如diff档),包括文件中添加及删减的片段和地址。本实施例的全局差分信息206则是将目标文件与待升级文件中匹配的部份的地址和长度记录为一个映射表,以利优化后续步骤。
29.在步骤303中,接着将新文件204进行分块,将所述新文件204分割成多个子区块。若新文件204与原文件202的大小不同,在进行分块之前,将两文件中相对小的那份的文件尾部补0xff,使两文件等长。分块的大小可以是固定大小,也可以是弹性决定的浮动值,以不超过嵌入式系统一次可处理的能力上限为原则。举例来说,分块可以是固定的地址分段(segment),例如4k,8k,16k比特区块。分块的大小也可以是由算法视情况安排,例如将新文件204中与原文件202有差异的连续的多个差异片段配置为一子区块。至于两文件中相同的片段,虽然不需要更新,但是通常会受到新增和删除片段的影响而必须移动位置。因此也可以通过子区块的形式,于后续步骤进行处理。
30.在步骤305中,开始一递回执行程序,将新文件204切割出来的每一子区块与原文件202进行逐个对比。因此步骤307至315以「所述子区块」形容每回合轮到的子区块。
31.在步骤307中,判断所述子区块与所述原文件202的对应位置内容进行一致性检查。若内容一致,则在步骤309中标记该子区块为无需更新,并直接跳至步骤317。相对的,内容不一致的子区块则表示为待更新区块。每一待更新区块代表的是新文件204中的对应片段。后续步骤311至315将会以每一待更新区块为单位逐步进行差分包的生成。
32.在步骤311中、依据步骤301中得到的全局差分信息206,试算出用于生成差分包的补丁参数,包括每个待更新区块的差分起始位置、处理方向和处理次序。在决定所有子区块的补丁参数时,可根据原文件和新文件中匹配的部份决定处理次序和处理方向。本技术实施例通过处理次序和处理方向的安排,可确保原文件中需被保留的匹配部份不被覆盖。
33.所述差分起始位置是指在原文件中即将被待更新区块进行差分更新的起始地址,每一个待更新区块会在原文件中有不同的差分起始位置。
34.所述每个待更新区块的处理方向可以是正向,即从低地址往高地址进行差分比对,或反向,即从高地址往低地址进行差分比对。考虑到新文件相对于原文件改动,添加,删除,由前两个带来数据的正向和反向移动。若是文件数据正向或者反向差分,势必会导致待升级中有效信息被覆盖,导致做出来的效果比较差。而本实施例充分利用已知的全局差分信息206,来弹性决定每个待更新区块的处理方向。举例来说,由于补丁的过程中,目标固件中同一地址的原数据可能需要先移动至目标位置,才能空出空间让新数据写入。因此在每个待更新区块中,有些情况用正向更新可以满足先移动后写入的顺序,有些情况则适合反向更新。这种弹性配置方式可以减少原数据的损失,进而减少在差分包中需要携带的数据量。
35.所述每个待更新区块的处理次序,可以是指在生成差分包的过程中,所有待更新区块被处理的先后顺序。其决定的原则与处理方向类似,只是进一步考虑了全局的状况,后续步骤详述。
36.在步骤313中、按照设定的补丁参数,对原文件和子区块进行差分,生成差分块,压缩并附加至差分包。换句话说,多个待更新区块依照处理次序和原文件进行差分比对,会得到多个差分块。将这些差分块集合在一起,就是差分包。
37.在步骤315中,每生成一差分块后,还可将原文件对应位置的数据,更新为待更新
区块的内容。
38.在步骤317中,检查被待更新区块更新后的原文件202和新文件204是否一致。如果不是,则重复进行步骤305。如此循环地依序处理所有待更新区块,直到原文件与新文件数据完全一致,即可在步骤319中确认差分包完成。
39.所述差分包可以是压缩的格式,例如zip。其中的内容格式,除了包括对应每个待更新区块的差分块,也可以包括对应每个待更新区块的差分起始位置,以及处理方向。
40.所生成的差分包可以使嵌入式系统在执行差分升级的时候,能在容量有限的内存中,逐个使用每个差分块对目标固件进行补丁,从所述嵌入式系统的固件中的原文件还原出新文件。并且在更新过程中避免了传统技术中会覆盖原始有效数据的问题。
41.图4是本技术新文件切块及决定补丁参数的实例说明。如步骤303所述,新文件204被切成三个子区块410,420及430。这些子区块的补丁参数412,422和432,对应地根据原文件202和新文件204的全局差分信息206而产生。从子区块410可知,区块a保持不变,而区块b变成了c。换言之,区块b被删除了,而且不再被新文件204中其他部份所需要。因此子区块410的处理次数可以无后顾之忧的安排为1。由起始位置a1为出发点往右处理。为了表达方便,在本实施例中以数字1代表方向右,数字2代表方向左。在子区块420中观察原文件202和新文件204的变化,可发现区块c变成了h,而区块d变成了i。然而区块d在此阶段还不能删除,因为新文件204的其他部位需要d。因此子区块420的处理次序往后延迟,先决定其他子区块的补丁参数。接着在处理子区块430时,观察到区块e变成d,而f变成e。这种情况适合以a6为起始位置往前更新,借此原文件202的区块e可以先被移到f的位置,再把d填入e原本的位置。所以在本实施例中,补丁参数432的设定就是处理次序为2,处理方向为2(反向),而差分起始位置为a6。
42.一般差分比对时,两个文件之间的数据差异可以分为几种情况:新增,删除,或不变。数据的新增,使对应位置的原文件必须整体向后移动。相对地,数据的删除使对应位置的原始数据必须整体向前移动。至于不变的数据,在此又称为原始有效数据,在差分升级时由于受到新增和删除数据的影响,大部份的情况下会被移动位置。因此不变的数据又分为移动和不移动两种状况。
43.在本技术的实施例中,在试算所述补丁参数时,可以考虑以下原则。首先优先处理删除数据的区块,空出固件空间,以利安排后续数据的新增和移动。接着尽可能安排目标位置有空出空间的原始有效数优先据移动,依此递回。关于移动,具体来说就是复制数据至新位置,再删除旧位置数据。由于原始有效数据已经存在原有固件中,所以这个步骤不需要由差分包提供数据,只需要原始有效数据的新旧地址信息。例如,可在差分包中记录移动命令,用于指示需移动的每一段原始有效数据的原起始地址,新起始地址,及需要移动的数据大小。
44.在计算所述补丁参数中的处理方向、处理次序的过程中,考虑到嵌入式系统升级时是局限在有限的固件空间中运作,预多越多空间可以提升处理效率,所以原则上算法会安排在完成删除和移动数据的相关处理后,才将新增数据相关的区块安排在处理顺序中。
45.所述演算原则可以最大化原始有效数据的再利用率,消除数据丢失的问题。然而上述演算原则仅为众多可能实施方式之一,实际代码的实作并不在本技术中加以限定。此外,在实作代码的过程可能会遇到许多例外状况要处理,例如在试算所述补丁参数中的处
理方向、处理次序的过程中,可能会发生多个待处理区块中彼此同时有移动、新增、删除的交叉相关性,形成僵局deadlock的情况。举例来说,有一种僵局的可能性是a和b要互换位置,但彼此都在等待对方移动,若无第三方介入,将永无解除的可能。因此本实施例在遇到类似的僵局的时候,可将冲突位置的数据附加至差分包中,解决交互相关的死结,借此使补丁顺利。
46.图5a至5c是本技术的生成差分升级块的实例说明。理解了补丁参数412,422和432的生成原则后,接下来如图3步骤313至317所述,开始逐一将新文件204中的每个子区块与原文件202进行差分比对,并将比对结果生成的子差分块组合成差分包500。
47.图5a显示了由子区块410生成子差分块510的实施例。根据补丁参数412,子区块410是第一个顺位被处理。由子区块410和原文件202进行差分比对,得到的子差分块510显示了在起始地址为a1的地方,需要向右做一个删除b(b
‑‑
)和新增c(c++)的动作。然而从全局差分信息206中可以知道,区块c的数据已存在于原文件中,不需要再重复携带添加数据。于是这个子差分块510只需要带指令,不需要带数据,就能使原文件的区块b更新为c。具体来说,所带的指令就是删除b和移动c。子差分块510的比对确定后就被压缩进差分包500中。对第1图中的嵌入式系统110而言,在执行更新的时候,就会依照子差分块510的描述,在起始地址a1的地方做一个删除b和移动c的动作。另一方面来说,由于指令明确描述了起始于地址a1的区块b是被新区块c覆盖,因此未必需要先执行删除的动作,也可以直接覆盖。本技术的实作方式,可在生成差分包500的时候,通过事先取得的全局差分信息206判断起始于地址a1所需要的区块c本来就存在于原文件202中的地址a2至a3,因此在组成子差分块510时不需要携带区块c的数据,使升级效率更高。
48.另一方面,如图3的步骤315所述,在子差分块510生成后,可进一步将子区块410的变化更新至原文件202中,使原文件202变成更新的原文件202a。如图5a所示,其中起始于a1的区块b变成了c。至于区块a,原本就没有改变。至此,原文件202a和新文件204中相同的区块以灰网点表示。
49.图5b显示了由子区块430生成子差分块520的实施例。根据补丁参数432,子区块430是第二个顺位被处理的区块。由子区块430和原文件202a进行差分比对,得到的子差分块520显示了在起始地址为a6的地方,需要向左做一个删除f(f
‑‑
)和新增e(e++)的动作。在起始地址为a5的地方,需要向左做一个删除e(e
‑‑
)和新增d(d++)的动作。然而从全局差分信息206中可以知道,区块d和e的数据已存在于原文件中,不需要再重复携带添加数据。于是这个子差分块510只需要带指令,不需要带数据,就能使原文件的区块e和f更新为d和e。子差分块520的比对确定后就被压缩进差分包500中,附加于子差分块510之后。对第1图中的嵌入式系统110而言,在执行更新的时候,就会依照子差分块520的描述,从右往左,先处理a6再处理a5。先在起始地址a6的地方做一个删除f的动作,和从地址a4移动e的动作,然后在起始地址a5的地方做一个删除e的动作,和从地址a3移动d的动作。同图5a,删除的动作,可以直接以新资料覆盖来取代。在图5b的情况中,区块d和e仅为移动,而非新增。因此差分包500可以省去携带区块d和e的必要性,使升级效率更高。
50.另一方面,如图3的步骤315所述,在520生成后,可进一步将子区块430的变化更新至原文件202a中,使原文件202a变成更新的原文件202b。如图5b所示,其中起始于a5的区块e变成了d,起始于a6的区块f变成了e。原文件202b和新文件204中相同的区块以灰网点表
示,在图5b的情况可看出,已有三分之二完成更新。
51.图5c显示了由420生成530的实施例。根据补丁参数422,子区块420是第三个顺位被处理的区块。由子区块420和原文件202b进行差分比对,得到的子差分块530显示了在起始地址为a2的地方,需要向右做一个删除c(c
‑‑
)和新增h(h++)的动作。在起始地址为a3的地方,需要向右做一个删除d(d
‑‑
)和新增i(i++)的动作。从全局差分信息206可知,区块h和i都是新添加的数据,必须通过子差分块530携带。于是这个子差分块530就携带了区块h和i的数据,被压缩进差分包500中,附加于子差分块510和520之后。对第1图中的嵌入式系统110而言,在执行更新的时候,就会依照子差分块530的描述,在起始地址a2的地方向右做一个删除c和新增h的动作,然后在起始地址a3的地方往左做一个删除d和新增i的动作。同图5a和5b,删除的动作,可以直接以新资料覆盖来取代。
52.另一方面,如图3的步骤315所述,在子差分块530生成后,可进一步将子区块420的内容更新至原文件202b中,使原文件202b变成更新的原文件202c。如图5c所示,其中起始于a2的区块c变成了h,起始于a3的区块d变成了i。原文件202c和新文件204中相同的区块以灰网点表示,在图5c的情况可看出,全部更新已经完成,差分包500已经准备好可以传送给图1的嵌入式系统110进行差分升级。
53.综上所述,基于所述演算原则而编写的计算代码,最后计算出来补丁参数,除了包括每个待更新区块的起始位置,处理次序,处理方向,也可以包括用于移动原始有效数据的移动命令。在确保不丢失原始有效数据的前提下,生成优化的差分包,使硬件能力低的嵌入式系统,可以正确地将固件中的原文件以分块差分的方式还原出新文件。
54.在进一步的实施例中,提出一种升级方法,使嵌入式系统应用前述实施例所生成的优化的差分包,升级固件。首先由待升级的嵌入式系统逐一加载所述差分包中的每一所述差分块。接着使所述固件以分块的方式依照对应的所述补丁参数而升级。举例来说,优化的差分包中已依照处理次序存储有多个待升级文件的子区块。只要依照处理方向和起始位置逐块进行差分写入,就能正确的使固件升级。详细的流程与第5a至5c图中所述更新原文件202a、202b和202c的过程类似,不再重复说明。本技术所提出的差分包优化方法,可将必须携带的添加数据降至最低,尤其适合应用于低端硬件规格的计算机系统。
55.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
56.上面结合附图对本技术的实施例进行了描述,但是本技术并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本技术的启示下,在不脱离本技术宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本技术的保护之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1