具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在现有技术中,以嵌入式设备的网络环境运行为例,由于程序故障修复、性能改进等原因,需要对设备进行远程升级,如OTA(over the air)升级。一般是通过在WIFI网络中,实现嵌入式设备的在线固件更新,提供给用户更好体验的服务版本。
差分升级方案的大致实现流程为:将待升级软件的目标版本的固件(第二固件)与当前版本的固件(第一固件)进行遍历对比,确定第二固件中的数据与第一固件中的数据的各个最大长度的相似数据,并将第二固件中的与相似数据对应的数据确定为第二数据,可以将第二数据与对应的第一固件中的相似数据做减法运算,获得较小的差分数据,可以将第二固件中的除第二数据之外的数据确定为新增数据。服务器可以将差分数据和新增数据生成差分包并发送给终端设备。终端设备在基于差分包进行差分升级的过程中,首先解析差分包,解析得到差分数据和新增数据,并根据第一固件中的相似数据,在终端设备的存储第一固件的存储空间以外的区域生成整个第二固件,并将第二固件存储在第一固件在终端设备中的存储空间中,以实现软件升级。在现有技术中,在差分升级过程中由于终端设备中的存储空间不足可能无法一次性整体生成第二固件,并且在将整个第二固件覆盖第一固件的升级过程中可能出现断电等的突发情况,导致数据损失,升级失败。
针对现有技术中的上述问题,本申请实施例提出了一种改进的差分算法,可以通过以设定数据长度对第一固件进行分段升级,最终完成从第一固件到第二固件的升级,以在终端设备存储资源有限的条件下,利用存储有第一固件的存储资源,完成差分升级。本申请方案适用于任何需要将当前版本的软件升级到目标版本的软件的场景,并且本申请方案适用于任何一种差分升级方法。
本申请实施例所提供的方案可以由任一电子设备执行,该电子设备可以是用户终端(下文也可称为终端设备),也可以是服务器执行,其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统。用户终端可以包括以下至少一项:智能手机、平板电脑、笔记本电脑、台式计算机、智能电视、智能车载设备。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
本申请实施例提供的一种软件升级方法为将当前版本的软件升级到目标版本的软件。对于当前版本的软件,在安装该软件的用户终端的存储空间中包括第一存储区域和第二存储区域,其中,第一存储区域用于存储将当前版本的软件升级到目标版本的软件所用的差分包,第二存储区域用于存储该当前版本的软件对应的固件。
下面结合图1示出的一种软件升级方法对本申请方案进行说明,图1示出了本申请实施例提供的一种软件升级方法的流程示意图,该方法可以由服务器执行。如图1中所示,该方法可以包括以下步骤:
步骤S101,响应于终端设备针对目标软件的软件升级请求,确定第二固件中的新增数据和在第一固件中存在相似数据的各第二数据、以及各第二数据与第一固件中的第一数据之间的差分数据。
服务器可以从终端设备接收软件升级请求,上述软件升级请求中包括终端设备的目标软件的标识信息。服务器确定该目标软件的标识信息后,会基于标识信息,确定是哪个软件需要升级,并确定目标软件的当前版本的固件和目标版本的固件。其中,目标版本为当前版本所要升级到的版本,比如,当前版本为2.0版本,目标版本为3.0版本,则表示基于该软件升级请求,要将目标软件从2.0版本升级到3.0版本。
上述目标软件的标识信息用于标识该软件的身份,比如,该标识信息中可以包括目标软件的固件的版本标识,则服务器基于该版本标识可以知道该目标软件的当前版本,即用户终端当前所安装的目标软件的版本,并且服务器还可以知道目标软件是服务器对应的多个软件中的哪个软件。标识信息可通过文字、字符、数字中的至少一项表示,本申请实施例中不限定标识信息的具体表现形式。
服务器在确定目标软件对应的当前版本的固件(以下称为第一固件)和目标版本的固件(以下称为第二固件)后,服务器可以从自身存储的多个固件中确定出第一固件和第二固件,也可以从终端设备获取第一固件并存储在其存储空间中。服务器存储第一固件的空间可以称为第一空间。
服务器可以确定目标软件对应的第一固件和第二固件在服务器的存储空间,并且可以从第二固件的起始字节开始,对该第一固件和第二固件进行遍历对比,确定第一固件和第二固件中最大长度的相似数据。确定第一固件和第二固件中最大长度的相似数据的方法在本申请实施例不做限定,例如,可以通过现有的差分算法确定。通过遍历比对,可以确定第二固件相对于第一固件新增的数据(以下简称为新增数据)和第二固件在第一固件中存在相似数据的各第二数据。
其中,通过上述比对,可以确定第二固件中的第二数据与第一固件中的对应的相似数据(即,第一数据)的第一对应关系。该第一对应关系包括第二数据对应的相似数据的在第一固件中的存储空间,该存储空间可以包括存储地址、数据大小。其中,相似数据的在第一固件中的存储地址可以为该相似数据相对于第一固件在服务器的起始存储地址的地址偏移。例如,对于任一第二数据,其对应的相似数据可以表示为(x,y),其中,x表示该第二数据对应的相似数据相对于第一固件在服务器的起始存储地址的偏移量,y表示该第二数据对应的相似数据的大小。其中,数据的大小也可以称为数据的长度,可以以千字节KB(Kilobyte)为单位。
步骤S102,将第二固件划分为多个数据块,并按照各数据块在第二固件中的先后,依次对每个数据块执行以下操作:若数据块对应的第一空间中的第一存储空间中存储有第三数据,则确定该第三数据对应的第二数据在第一空间中对应的第二存储空间,并将该第三数据移存到第一空间中该第二存储空间之后的空闲区域中,其中,第三数据属于各第一数据中除该数据块对应的相似数据之外的数据,第一空间为服务器中用于存储第一固件的空间。
服务器在确定出第二固件中的各第二数据以及第一固件中对应的第一数据之后,可以将第二固件中的数据划分为多个数据块。其中,将第二固件划分的方式本申请实施例不做限定。可选地,服务器可以按照设定大小将第二固件中得到数据划分为大小相同的多个数据块。设定大小可以由用户设定或为默认值。可选地,服务器也可以按照具有一定规律的数据大小来划分第二固件。可选地,也可以由服务器根据获取的终端设备的存储空间大小来确定划分第二固件的方式。
可选地,服务器在将第二固件中的数据划分为多个数据块时,可以对应地将第一固件中的数据划分为对应的多个数据块,并确定第一固件和第二固件中的数据块的第二对应关系。各数据块在第二固件中的先后顺序即各数据块在服务器的存储空间的先后顺序。
对于第二固件中的各个数据块,第一空间中与该数据块的存储位置对应的该数据块大小的空间可以称为第一存储空间。对于任一数据块,若该数据块对应的第一存储空间中存储有第三数据,即若该数据块对应的第一存储空间中存储有除该数据块对应的相似数据之外的相似数据,则可以通过考虑该相似数据对应的第二数据在第一空间中的映射位置来移存该相似数据。例如,可以根据上述第一对应关系,确定该第三数据对应的第二数据在第一空间中对应的第二存储空间,并将该第三数据移存到第一空间中该第二存储空间之后的空闲区域中,其中,第二存储空间为第一空间中与任一第二数据的存储位置对应的空间,空闲区域是指第一固件中的除了存储第一数据的空间之外的空间,也即,空闲区域是指第一固件中的存储第一固件升级未使用的数据的空间。
换句话说,对于任意数据块,根据上述第一对应关系和第二对应关系,确定数据块在第一空间中的对应的第一存储空间,并确定在该第一存储空间中是否存储有除该数据块中包括的第二数据对应的相似数据之外的其他相似数据,若存在其他相似数据,则确定其他相似数据对应的第二数据在第一空间中对应的第二存储空间,并将该其他相似数据移存到第一空间中该第二存储空间后的空闲区域中。
步骤S103,生成每个数据块对应的还原指示信息以及第一数据中存储位置发生过移动的各第三数据的平移控制信息。
在对各数据块完成上述操作后,生成每个数据块对应的还原指示信息,一个数据块的还原指示信息用于确定还原该数据块所需的数据。
在对各个数据块完成对应的存储空间中的第三数据的移存后,对于第一数据中存储位置发生过移存的各第三数据,可以生成对应的平移控制信息,每个第三数据对应的平移控制信息用于指示该第三数据所对应的移动前的存储空间和移动后的存储空间。
上述步骤102和步骤103不限于上述执行顺序。可选地,可以在执行步骤102的同时执行步骤103。
步骤S104,根据新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息,生成差分包并发送至终端设备,以使终端设备根据差分包和第一固件升级得到第二固件。
服务器将所生成的新增数据、差分数据、各数据块对应的还原指示信息和各第三数据对应的平移控制信息生成差分包。可选地,可以将差分包压缩,并将压缩后的差分包发送至终端设备,使终端设备根据差分包和其所存储的第一固件升级得到第二固件。
可选地,在实际应用中,服务器对任意两个版本的固件,可以执行一次差分包生成过程,并将生成的差分包存储在服务器中,在其他终端设备请求该差分包时可以直接将所存储的差分包发送给该终端设备。可选地,服务器也可以根据所存储的固件的多种版本,预先生成相应两个版本之间的差分包,并在终端设备请求对应的差分包时将其发送给终端设备。
本申请实施例提供的分段升级方法中考虑了相似数据对应的第二数据的存储位置来移动相似数据,即将非该数据块对应的相似数据直接移动到该相似数据对应的第二数据的存储位置之后,则在该第二数据之前的还原过程中不会再次移动所述相似数据,从而大大减少了相似数据的移动次数。
本申请实施例所提供的方案,通过响应于终端设备针对目标软件的软件升级请求,确定第二固件中的新增数据和在第一固件中存在相似数据的各第二数据、以及各第二数据与第一固件中的第一数据之间的差分数据;将第二固件划分为多个数据块,并按照各数据块在第二固件中的先后,依次对每个数据块执行以下操作:若数据块对应的第一空间中的第一存储空间中存储有第三数据,则确定该第三数据对应的第二数据在第一空间中对应的第二存储空间,并将该第三数据移存到第一空间中该第二存储空间之后的空闲区域中,其中,第三数据属于各第一数据中除该数据块对应的相似数据之外的数据,第一空间为服务器中用于存储第一固件的空间;生成每个数据块对应的还原指示信息以及第一数据中存储位置发生过移动的各第三数据的平移控制信息;根据新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息,生成差分包并发送至终端设备,以使终端设备根据差分包和第一固件升级得到第二固件,即可以通过对第二固件划分为多个数据块,并对各个数据块分段处理,实现了终端设备的固件分段升级,进而充分地利用了第一固件在终端设备中的存储空间,并且通过将各数据块对应的第一存储空间中的第三数据移存到该第三数据对应的第二数据在第一空间中对应的存储空间之后的空闲区域中,在终端设备的升级过程中减少了数据的移动操作,从而减少了对终端设备的闪存(Flash)的移存操作,提升整体性能。
图2是本申请实施例提供的另一种软件升级方法的流程示意图。终端设备在接收到服务器发送的差分包后,可以根据第一固件进行升级,以得到第二固件,具体地,如图2所示,包括以下步骤:
步骤S201,解析差分包,得到新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息。
终端设备首先解析差分包,得到新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息,并将解析得到的数据存储在内存中的第一存储区域中。可选地,当差分包为压缩包时,首先解压差分包再解析差分包。此外,终端设备可以根据差分包包括的软件标识信息确定当前版本的第一固件以及存储第一固件的第二空间。
步骤S202,根据各平移控制信息,确定各平移控制信息在第二空间中对应的移动前的各第一子空间和移动后的第二子空间;其中,第二空间为终端设备中用于存储第一固件的空间。
根据各第三数据对应的平移控制信息,可以确定各第三数据在服务器端中对应的移动前的存储空间和移动后的存储空间。根据一定的对应规则,终端设备可以根据各第三数据在服务器端中对应的移动前的存储空间和移动后的存储空间,确定各第三数据在第二空间中对应的各第一子空间和第二空间,其中平移控制信息可以指示移动前的存储空间以及该移动前的存储空间在第二空间中的对应的第一子空间,并且平移控制信息还可以指示移动后的存储空间,以及该移动后的存储空间在第二空间中对应的移动后的第二子空间。
步骤S203,对于每个还原指示信息依次执行以下操作:确定还原一个数据块所需的数据,根据所确定的数据还原得到对应的数据块,并确定该数据块在第二空间中对应的第三存储空间。
其中,各数据块对应的还原指示信息可以具有指示其处理顺序的标签。例如,各数据对应的还原指示信息可以按照数据块的生成顺序排列,并生成对应于该顺序的标签。可选地,各数据块对应的还原指示信息可以任意排列,并按照其包含的标签所指示的处理顺序来进行处理。
按照还原指示信息所指示的顺序,对于每个还原指示信息,确定还原该还原指示信息对应的数据块所需的数据,并根据所确定的数据按照一定的还原规则还原得到对应的数据块。还原规则在此不做限定。在还原得到数据块后,终端设备需要确定要存储该数据块的存储空间。在本申请实施例中,终端可以将还原得到的数据块存储在存储有第一固件的第二空间中,以减少升级过程中使用的存储资源。因此,终端设备可以根据还原指示信息确定该数据块在第二空间中的对应第三存储空间。例如,在按照顺序依次生成数据块的情况下,可以根据该数据块的顺序和数据块的大小确定在第二空间中的对应第三存储空间。
步骤S204,若该第三存储空间中不包含第一子空间,则将该数据块存储到第三存储空间。
步骤S205,若该第三存储空间包含第一子空间,则根据该第一子空间对应的平移控制信息,将该第一子空间中的数据移存到该第一子空间对应的第二子空间中,并将该数据块存储到移除第一子空间后的第三存储空间。
在确定出数据块的第三存储空间后,可以根据上述平移控制信息,通过确定第三存储空间与任一第一子空间是否存在重叠空间来确定来第三存储空间中是否包含第一子空间。当第三存储空间与任一第一子空间存在重叠空间或者当任一第一子空间位于第三存储空间的范围内,则可以确定第三存储空间中包含第一子空间。
在本申请实施例中,第三存储空间中可以包含多个第一子空间,在这种情况下,终端设备可以将该多个第一子空间中的数据从各个第一子空间中取出,并且分别移存到对应的各个第二子空间中。最后,将步骤S203生成的数据块存储到移除第一子空间后的第三存储空间。
终端设备通过根据上述还原指示信息依次还原第二固件的数据块,可以利用第一固件的存储空间分段还原第二固件,节省了存储空间,并根据平移控制信息,将该数据块对应的第三存储空间中的各个第一子空间中的数据分别移存到对应的各个第二子空间中,可以减少对终端设备的闪存(Flash)的写入操作,即内容移存操作,提升整体性能。
本申请实施例在数据块对应的第一空间中的第一存储空间中存储有第三数据时,需要将该第三数据进行移存,以将生成的第三数据存储在该第一存储空间。移动的第三数据用于该第三数据对应的第二数据的数据还原过程。图3为本申请实施例提供的一种将第一存储空间中的第三数据移存到目标空间的流程示意图。如图3所示,包括以下步骤:
步骤S301,确定第三数据所需的存储空间大小。
其中,第三数据是指位于数据块对应的第一存储空间并且属于第一数据中除该数据块对应的相似数据之外的数据,即,第三数据为第一存储空间中的除该数据块中的第二数据对应的相似数据之外的相似数据。在本申请实施例中,第一存储空间可以包括对应于一个第二数据的一个第三数据。可选地,第一存储空间可以包括对应于不同第二数据的多个第三数据。
第三数据所需的存储空间大小可以为存储该第三数据的存储空间的字节长度,以KB为单位。
在本申请实施例中,在对第三数据进行移存之前,考虑到第二固件中的第二数据与第一固件中的各第一数据的对应关系,可以确定该第三数据对应的第二数据在第一空间中对应的第二存储空间,即确定其相似数据包含该第三数据的第二数据在第一空间中对应的第二存储空间。
步骤S302,确定第一空间中在第二存储空间之后的各空闲区域的大小。
根据上述可知,第一空间包括存储作为相似数据的第一数据的空间和存储各非相似数据的空闲区域。在确定第三数据所需的存储空间大小以及第二存储空间之后,可以确定第一空间中在第二存储空间之后的各空闲区域的大小。
步骤S303,若第一空间中该第二存储空间之后存在大于或等于第三数据所需的存储空间大小的空闲区域,则将第三数据移存到第一空间中该第二存储空间之后的大于或等于第三数据所需的存储空间大小的空闲区域中。
在确定第一空间中第二存储空间之后的空闲区域的大小之后,可以根据第三数据所需的存储空间大小,确定第一空间中第二存储空间之后是否存在大于或等于第三数据所需的存储空间大小的空闲区域。当存在时,将第三数据移存到第二存储空间之后的大于或等于第三数据所需的存储空间大小的任一空闲区域中。
可选地,上述步骤303的将该第三数据移存到第一空间中该第二存储空间之后的大于或等于第三数据所需的存储空间大小的空闲区域中,可以包括:将第二存储空间之后的大于或等于第三数据所需的存储空间大小的空闲区域中存储位置最靠近所述第二存储空间的空闲区域确定为目标空间;将第三数据移存到目标空间中。
可以将大于或等于第三数据所需的存储空间大小的空闲区域中存储位置最靠近第二存储空间的空闲区域确定为目标空间。换句话说,按照第一存储空间到第二存储空间的顺序,将第二存储空间之后的第一个大于或等于第三数据所需的存储空间大小的空闲区域确定为目标空间。在确定目标空间后,可以将第三数据移存到第二存储空间后的目标空间中。
步骤S304,若第一空间中该第二存储空间之后不存在大于或等于第三数据所需的存储空间大小的空闲区域,则将该第三数据移存到第一存储空间与第二存储空间之间的空闲区域中。
在本申请实施例中,在确定第一空间中第二存储空间之后的空闲区域的大小之后,若不存在大于或等于第三数据所需的存储空间大小的空闲区域,可以该第三数据移存到第一存储空间与第二存储空间之间的空闲区域中。
可选地,本申请实施例可以将第三数据移存到第一存储空间与第二存储空间之间的空间大小大于或等于该第三数据大小的任意空闲区域中。或者,可以将第三数据移存到第一存储空间与第二存储空间之间的存储位置最靠近第一存储空间并且空间大小大于或等于该第三数据大小的空闲区域中。本申请实施例对第三数据移存到的第一存储空间与第二存储空间之间的空闲区域不做限定。
本申请实施例中,根据第一固件中的第一数据分段还原第二固件的过程中,还未被还原过程使用的第一数据会被不断移动,以用于后续还原过程使用,通过将第三数据移存到对应的第二数据在第一空间中对应的第二存储空间之后,可以减少第三数据的移动次数,因此可以减少对终端设备的Flash的移动操作,提升整体性能。
图4为本申请实施例提供的确定目标空间的示意图。如图4所示,根据本申请实施例,服务器可以确定第二固件中的新增数据(如图4中D1、D2、D3和D4)和在第一固件中存在相似数据的各第二数据(如图4中T1、T2、T3和T4)、以及第一固件中作为每个第二数据的相似数据的第一数据(如图4中S1、S2、S3和S4)。第二固件中的第二数据T1对应的相似数据为第一固件中第一数据S1,第二固件中的第二数据T2对应的相似数据为第一固件中第一数据S2,以此类推。其中,K1、K2、K3和K4为空闲区域,即第一固件中存储非相似数据的空间,该空间在数据软件升级过程中可以被其他数据覆盖。
当将第二固件划分为多个数据块进行处理时,以第一次划分为例(图中实线所示),第一数据块在第一空间中对应的第一存储空间为K1+S5,其中S5为第一数据S3中位于第一数据块的第一存储空间的数据。由于第一数据块中包含的第二数据为T1,其对应的相似数据为S1,而不是S3,因此,需要将S5从第一存储空间移出以用于后续还原T3。S5对应的第二数据为T3,第二数据T3在第一空间中对应的第二存储空间为图4中两条虚线之间的空间。根据本申请实施例的原理,可以将S5移存到第二数据T3在第一空间中对应的第二存储空间之后的目标空间,即K4。
由于第二固件中包括第二数据和新增数据,所以在步骤S102的将第二固件划分为多个数据块之后,本申请实施例的软件升级方法还包括:
根据划分结果确定出每个数据块中包括的各目标子数据和/或新增子数据,并确定每个目标子数据各自对应的相似数据和差分数据,其中,目标子数据为第二固件中属于第二数据的数据,新增子数据为第二固件中属于除第二数据之外的数据。
通过将第二固件中的数据划分为多个数据块,根据上述第一固件和第二固件之间的第一对应关系和第二对应关系,可以将第二固件中的第二数据和新增数据划分为各数据块中包括的各个目标子数据和新增子数据,其中,目标子数据可以为位于一个数据块中的属于第二数据的数据,新增子数据为位于一个数据块中的属于新增数据的数据。新增数据为第二固件中除第二数据之外的数据,也即第二固件中除第二数据之外的数据。
在确定出数据块包括的目标子数据后,对于每个目标子数据,可以根据第一数据与第二数据的第一对应关系,确定出该目标子数据在第一固件中的对应的相似数据,并根据该目标子数据和对应的相似数据来确定对应的差分数据。确定差分数据的方法本申请实施例不做限定,例如,可以采用现有的差分算法来生成差分数据。
在确定出每个数据块中包括的各目标子数据和/或新增子数据后,生成每个数据块对应的还原指示信息包括:根据每个数据块中包括的各目标子数据和/或新增子数据确定该数据块对应的还原指示信息。
对于每个数据块,该数据块可以包括目标子数据和/或新增子数据。下面将具体说明与数据块的不同情况对应的还原指示信息。
可选地,根据每个数据块中包括的各目标子数据和/或新增子数据确定该数据块对应的还原指示信息,包括:
对于每个数据块,若该数据块为目标子数据,则该数据块对应的还原指示信息为第一指示信息;
若该数据块为新增子数据,则该数据块对应的还原指示信息为第二指示信息;
若该数据块包括目标子数据和新增子数据,则该数据块对应的还原指示信息包括第一指示信息和第二指示信息,
其中,第一指示信息用于确定目标子数据对应的相似数据的存储空间,第二指示信息用于从新增数据中确定该数据块对应的新增子数据。
本申请实施例根据数据块包括的数据的不同,数据块对应的还原指示信息可以不同。若数据块是目标子数据,即,数据块只包括目标子数据,则该数据块对应的还原指示信息为第一指示信息;若该数据块是新增子数据,即,数据块只包括新增子数据,则该数据块对应的还原指示信息为第二指示信息;若该数据块包括至少一个目标子数据和至少一个新增子数据,则该数据块对应的还原指示信息包括第一指示信息和第二指示信息。
在确定出还原指示信息后,可以根据还原指示信息确定还原数据块所需的数据,并根据所确定的数据还原得到对应的数据块。具体过程如下所述。
可选地,确定还原一个数据块所需的数据,并根据所确定的数据还原得到对应的数据块,包括:
若该数据块对应的还原指示信息为第一指示信息,则根据第一指示信息确定该数据块对应的相似数据的存储空间,根据该存储空间中的相似数据和该相似数据对应的差分数据还原得到该数据块的数据;
若该数据块对应的还原指示信息为第二指示信息,则根据第二指示信息从新增数据中确定该数据块对应的新增子数据,将该新增子数据确定为该数据块的数据;
若该数据块对应的还原指示信息包括第一指示信息和第二指示信息,则根据第一指示信息确定该数据块对应的相似数据的存储空间,并根据该相似数据和该相似数据对应的差分数据还原得到该目标子数据,根据第二指示信息得到新增子数据,并根据目标子数据和新增子数据得到对应的数据块的数据。
可选地,可以根据第一指示信息确定目标子数据对应的相似数据的存储空间,并且可以根据该存储空间中的相似数据和差分数据还原得到数据块。可选地,相似数据对应的差分数据可以例如根据当前数据块的顺序来确定。例如,在数据块依次还原的情况下,由于生成的差分数据依次排列,则可以根据数据块的顺序确定所有差分数据中与该数据块对应的差分数据。可选地,可以根据第二指示信息从新增数据中确定该数据块对应的新增子数据,例如,可以根据当前数据块的顺序确定新增子数据位于新增数据中的位置。可选地,确定目标子数据对应的相似数据的存储空间将在下面详细描述。
可选地,对于一个目标子数据,该目标子数据的第一指示信息包括该目标子数据对应的相似数据的存储地址偏移和目标子数据大小,存储地址偏移是指相对于第一空间的第一起始存储地址的偏移量。
例如,对于一个目标子数据,该目标子数据对应的相似数据的相对于第一空间的第一起始存储地址的存储地址偏移为x,并且目标子数据大小为y,则该目标子数据对应的第一指示信息可以表示为(x,y)。
可选地,若该数据块对应的还原指示信息包括第一指示信息,则根据第一指示信息确定该数据块对应的相似数据的存储空间,包括:
确定第二空间的第二起始存储地址;
根据第二起始存储地址和存储地址偏移,确定该目标子数据对应的相似数据在第二空间的起始存储地址;
根据在第二空间的起始存储地址和目标子数据大小确定该目标子数据对应的相似数据的存储空间。
例如,该目标子数据对应的第一指示信息可以表示为(x,y),其中存储地址偏移为x并且目标子数据大小为y。首先,确定第二空间的第二起始存储地址,为了便于描述,以下以第二空间的第二起始存储地址为0为例进行说明,则该数据块对应的相似数据在第二空间的起始存储地址x,根据起始存储地址x和目标子数据大小y可以确定该目标子数据对应的相似数据的存储空间为(x,y)。
上述步骤S202中的根据各平移控制信息,确定各平移控制信息在第二空间中对应的移动前的各第一子空间和移动后的第二子空间可以具体如下实现。
根据本申请的实施例,对于每个平移控制信息,该平移控制信息包括移动前存储地址偏移、移动后存储地址偏移和被移动数据的数据大小,存储地址偏移是指相对于第一空间的第一起始存储地址的偏移量。
例如,对于每个平移控制信息,该平移控制信息包括移动前存储地址偏移x、移动后存储地址偏移y和被移动数据的数据大小z,则该平移控制信息可以表示为(x,y,z)。
可选地,根据各平移控制信息,确定各平移控制信息在第二空间中对应的移动前的各第一子空间和移动后的第二子空间,包括:
确定第二空间的第二起始存储地址;
根据第二起始存储地址和移动前存储地址偏移和被移动数据的数据大小,确定该平移控制信息在第二空间中对应的移动前的第一子空间;
根据第二起始存储地址、移动后存储地址偏移和被移动数据的数据大小,确定该平移控制信息第二空间中对应的移动后的第二子空间。
如以上实施例所述,对于每个第三数据对应有平移控制信息,该平移控制信息指示第三数据的移动前的存储空间和移动后的存储空间。例如,平移控制信息可以表示为(x,y,z),其中,移动前存储地址偏移为x、移动后存储地址偏移为y和被移动数据的数据大小为z。首先,确定第二空间的第二起始存储地址,为了便于描述,以下以第二空间的第二起始存储地址为0为例进行说明。
根据第二起始存储地址0、移动前存储地址偏移为x和被移动数据的数据大小z,确定在第二空间中对应的移动前的至少一个第一子空间(x,z)。根据第二起始存储地址0、移动后存储地址偏移为y和被移动数据的数据大小z,确定在第二空间中对应的移动后的存储空间(y,z)。
终端设备通过利用平移控制信息中包括各种地址信息以及其存储在第一固件的第二空间的存储地址,可以确定要移动的各个第三数据移动前的各第一子空间和对应的移动后的第二子空间。
基于上述实施例相同的原理,本申请实施例提供了另一种软件升级方法,该方法可以应用于终端设备。终端设备在接收到差分包后,可以根据差分包进行软件升级过程,具体包括:
解析差分包,得到新增数据、各差分数据、各还原指示信息以及各平移控制信息,其中,各差分数据为第二固件中的第二数据与第一固件中的对应第一数据的差分数据,还原指示信息用于确定还原数据块所需的数据,平移控制信息用于指示第一数据中要移动的数据所对应的移动前的存储空间和移动后的存储空间;
根据各平移控制信息,确定各平移控制信息在第二空间中对应的移动前的各第一子空间和移动后的第二子空间;其中,第二空间为终端设备中用于存储第一固件的空间;
对于每个还原指示信息依次执行以下操作:
确定还原一个数据块所需的数据,并根据所确定的数据还原得到对应的数据块,确定该数据块在第二空间中对应的第三存储空间;
若该第三存储空间中不包含第一子空间,则将该数据块存储到第三存储空间;
若该第三存储空间包含第一子空间,则根据该第一子空间对应的平移控制信息,将该第一子空间中的数据移存到该第一子空间对应的第二子空间中,并将该数据块存储到移除第一子空间后的第三存储空间,其中,第二子空间为该第一子空间中的数据对应的第二数据在第二空间中对应的第四存储空间之后的空闲区域。
本申请实施例通过根据还原指示信息和平移控制信息逐个还原数据块并存储在第一固件的对应存储空间中,实现了终端设备的第一固件分段升级到第二固件,充分地利用了第一固件在终端设备中的存储空间,并且通过将数据块的对应存储空间中的相似数据移存到该相似数据对应的第二数据在第一固件中对应的存储空间之后的空闲区域中,可以在升级过程中减少该相似数据的移动操作,减少终端设备的Flash的移动操作,提升整体性能。
为了更清楚的示出本申请的软件升级方法的原理,下面以具体示例详细描述软件升级过程。图5a至图5f为本申请实施例提供的一种软件升级方法的示例图。可选地,本申请实施例的软件升级方法可以由服务器执行。
可选地,服务器在确定目标软件对应的当前版本的固件(以下称为第一固件)和目标版本的固件(以下称为第二固件)后,服务器可以根据现有差分算法确定第二固件和第一固件中的数据的对应关系。
图5a示出了第二固件和第一固件中的数据的对应关系的示意图。
根据本申请实施例,通过上述对应关系的确定,服务器可以确定第二固件中的新增数据和在第一固件中存在相似数据的各第二数据、以及第一固件中作为每个第二数据的相似数据的第一数据。可选地,服务器可以确定第一固件中的除了第一数据之外的数据,以下称为非相似数据,其存储空间可以成为空闲区域。
其中,新增数据块是指第二固件相对于第一固件新增的数据,以D1、D2、D3表示;第二数据是指在第一固件中存在相似数据的数据,以T1、T2、T3表示;第一数据是指第二固件中的第二数据在第一固件中对应的相似数据,以S1、S2、S3表示;非相似数据是指第一固件中的升级到第二固件未使用的数据,以K1、K2、K3表示。
图5b至图5f示出了以设定数据大小对第二固件进行划分的过程示意图。
图5b和图5c示出了第一次划分过程,根据划分结果可以确定出第二固件中包含的目标子数据T11,并根据前述确定的对应关系,可以确定出目标子数据T11对应的相似数据,即S1中对应的部分,并且可以根据T11与S1中的对应部分确定差分数据。可选地,在对T11与S1中的对应部分进行差分之后,由于T11对应的相似数据已使用完毕,可以将T11对应的相似数据的存储空间确定为空闲区域,以增大可用空间资源。
由于第一次划分的数据块对应的第一存储空间中存储有第三数据,即,S3中的一部分(记为S5),则需要将第一存储空间中的S5移存到第一空间的空闲区域中。此时,确定S5所需的存储空间大小,并确定S5对应的第二数据T3在第一空间中对应的第二存储空间之后的各空闲区域的大小,如图所示即确定T3对应的第二存储空间之后的空闲区域K4的大小,通过判断K4的大小大于S5的大小,将S5移存到K4中。对于存储位置发生过移动的第三数据S5,生成第三数据S5对应的平移控制信息(x5,y5,z5),该平移控制信息用于指示第三数据S5所对应的移动前的存储空间和移动后的存储空间。在对该数据块完成平移操作后,生成该数据块对应的还原指示信息,由于该数据块只包括目标子数据T11,则还原指示信息为第一指示信息(x1,y1)。
图5c和图5d示出了第二次划分过程,根据划分结果可以确定出第二固件中包含的目标子数据T12,并根据前述确定的对应关系,可以确定出目标子数据T12对应的相似数据,即S1中对应的部分,并且可以根据T12与S1中的对应部分确定差分数据。可选地,在对T12与S1中的对应部分进行差分之后,可以将T12对应的相似数据的存储空间确定为空闲区域。
由于第二次划分的数据块对应的第一存储空间中存储有第三数据,即,S3中的一部分(记为S6),则需要将第一存储空间中的S6移存到第一空间的空闲区域中。此时,确定S6所需的存储空间大小,并确定S6对应的第二数据T3在第一空间中对应的第二存储空间之后的各空闲区域的大小,如图所示即确定T3对应的第二存储空间之后的空闲区域K41的大小,通过判断K41的大小大于S6的大小,将S6移存到K41中。对于存储位置发生过移动的第三数据S6,生成第三数据S6对应的平移控制信息(x6,y6,z6),该平移控制信息用于指示第三数据S6所对应的移动前的存储空间和移动后的存储空间。在对该数据块完成平移操作后,生成该数据块对应的还原指示信息,由于该数据块只包括目标子数据T12,则还原指示信息为第一指示信息(x2,y2)。
图5e示出了第三次划分过程,根据划分结果可以确定出第二固件中包含的目标子数据T13,并根据前述确定的对应关系,可以确定出目标子数据T13对应的相似数据,即S1中对应的部分,并且可以根据T13与S1中的对应部分确定差分数据。可选地,在对T13与S1中的对应部分进行差分之后,可以将T13对应的相似数据的存储空间确定为空闲区域。
由于第三次划分的数据块对应的第一存储空间中存储有第三数据,即,S3中的一部分(记为S7),则需要将第一存储空间中的S7移存到第一空间的空闲区域中。此时,确定S7所需的存储空间大小,并确定S7对应的第二数据T3在第一空间中对应的第二存储空间之后的各空闲区域的大小,如图所示即确定T3对应的第二存储空间之后的空闲区域K42的大小,通过判断K42的大小小于S7的大小,则将S7移存到数据块对应的第一存储空间与确定的第二存储空间之间的空闲区域中,即K2中。对于存储位置发生过移动的第三数据S7,生成第三数据S7对应的平移控制信息(x7,y7,z7),该平移控制信息用于指示第三数据S7所对应的移动前的存储空间和移动后的存储空间。
在对该数据块完成平移操作后,生成该数据块对应的还原指示信息,由于该数据块包括目标子数据T13和新增数据D1中的部分数据,则还原指示信息包括第一指示信息(x3,y3)和第二指示信息(z1),其中第二指示信息(z1)用于指示从新增数据中获取z1大小的新增子数据。
图5f示出了第四次划分过程,根据划分结果可以确定出第二固件中包含的目标子数据T21,并根据前述确定的对应关系,可以确定出目标子数据T21对应的相似数据,即S2中对应的部分,并且可以根据T21与S2中的对应部分确定差分数据。可选地,在对T21与S2中的对应部分进行差分之后,可以将T21对应的相似数据的存储空间确定为空闲区域。此时,空闲区域K42的空间大小相应地增大了T21对应的大小。
由于第四次划分的数据块对应的第一存储空间中存储有第三数据,即,S3和S7中的一部分(记为S8),则需要将第一存储空间中的S3和S8移存到第一空间的空闲区域中。此时,确定S3所需的存储空间大小,并确定S3对应的第二数据T3在第一空间中对应的第二存储空间之后的各空闲区域的大小,如图所示即确定T3在第一空间中对应的第二存储空间之后的空闲区域K42的大小,通过判断K42的大小大于S3的大小,将S3移存到第二存储空间之后的空闲区域中,即K42中。同理,确定S8对应的第二数据T3在第一空间中对应的第二存储空间之后的空闲区域K42的大小大于S8的大小,将S8移存到第二存储空间之后的空闲区域K42中。
对于存储位置发生过移动的第三数据S3和S8,生成第三数据S3和S8各自对应的平移控制信息(x3,y3,z3)和(x8,y8,z8),该平移控制信息用于指示第三数据S3和S8所对应的移动前的存储空间和移动后的存储空间。
在对该数据块完成平移操作后,生成该数据块对应的还原指示信息,由于该数据块包括目标子数据T21和新增数据D1中的部分数据,则还原指示信息包括第一指示信息(x4,y4)和第二指示信息(z2),其中,第二指示信息(z2)用于指示从新增数据中获取z2大小的新增子数据。
如上所述,在对整个第二固件完成划分与平移过程后,根据新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息,生成差分包并发送至终端设备,以使终端设备根据差分包和第一固件升级得到第二固件。
终端设备可以根据获取的差分包与所存储的第一固件,按照上述数据块生成顺序依次还原数据块,进而得到第二固件,还原过程只会占据很小的空间,有利地解决了内存空间不足,无法一次性还原第二固件的问题,并且终端设备根据平移控制信息,将该数据块对应的第二存储空间中的各个第一子空间中的数据移存到其对应的第二数据在第二空间中的存储空间之后的第二子空间中,可以减少对终端设备的闪存(Flash)的内容移动操作,提升整体性能。
可选地,在还原过程中,当使用第一固件中的相似数据还原第二固件数据后,该相似数据一般后续不再使用,可以将该相似数据所在存储空间释放。通过本申请实施例,以数据块为单位还原第二固件,并将还原数据块使用的相似数据的空间释放,可以在还原过程中占用较小的使用空间,并在还原过程中增大可利用空间。
基于与上述软件升级相同的原理,本申请实施例提供了一种软件升级装置。如图6所示,该软件升级装置600包括:数据确定模块601、平移控制模块602、信息生成模块603、差分包生成模块604。
数据确定模块601,用于响应于终端设备针对目标软件的软件升级请求,确定第二固件中的新增数据和在第一固件中存在相似数据的各第二数据、以及各第二数据与第一固件中的第一数据之间的差分数据;
平移控制模块602,用于将第二固件划分为多个数据块,并按照各数据块在第二固件中的先后,依次对每个数据块执行以下操作:
若数据块对应的第一空间中的第一存储空间中存储有第三数据,则确定该第三数据对应的第二数据在第一空间中对应的第二存储空间,并将该第三数据移存到第一空间中该第二存储空间之后的空闲区域中,其中,第三数据属于各第一数据中除该数据块对应的相似数据之外的数据,第一空间为服务器中用于存储第一固件的空间;
信息生成模块603,用于生成每个数据块对应的还原指示信息以及第一数据中存储位置发生过移动的各第三数据的平移控制信息;
差分包生成模块604,用于根据新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息,生成差分包并发送至终端设备,以使终端设备根据差分包和第一固件升级得到第二固件。
可选地,平移控制模块,还用于确定该第三数据所需的存储空间大小;确定第一空间中该第二存储空间之后的各空闲区域的大小;若第一空间中该第二存储空间之后存在大于或等于第三数据所需的存储空间大小的空闲区域,则将第三数据移存到第一空间中该第二存储空间之后的大于或等于第三数据所需的存储空间大小的空闲区域中。
可选地,平移控制模块还用于,将第二存储空间之后的大于或等于第三数据所需的存储空间大小的空闲区域中存储位置最靠近第二存储空间的空闲区域确定为目标空间;将第三数据移存到目标空间中。
可选地,平移控制模块还用于,若第一空间中该第二存储空间之后不存在大于或等于第三数据所需的存储空间大小的空闲区域,则将该第三数据移存到第一存储空间与第二存储空间之间的空闲区域中。
可选地,平移控制模块还用于,根据划分结果确定出每个数据块中包括的各目标子数据和/或新增子数据,并确定每个目标子数据各自对应的相似数据和差分数据,其中,目标子数据为第二固件中属于第二数据的数据,新增子数据为第二固件中属于除第二数据之外的数据。
可选地,信息生成模块还用于根据每个数据块中包括的各目标子数据和/或新增子数据确定该数据块对应的还原指示信息。
可选地,信息生成模块还用于,对于每个数据块,若该数据块为目标子数据,则该数据块对应的还原指示信息为第一指示信息;若该数据块为新增子数据,则该数据块对应的还原指示信息为第二指示信息;若该数据块包括目标子数据和新增子数据,则该数据块对应的还原指示信息包括第一指示信息和第二指示信息,其中,第一指示信息用于确定目标子数据对应的相似数据的存储空间,第二指示信息用于从新增数据中确定该数据块对应的新增子数据。
基于与上述软件升级相同的原理,本申请实施例提供了另一种软件升级装置,该软件升级装置可以为终端设备,用于根据差分包进行软件升级。如图7所示,该软件升级装置700包括解析模块701、平移控制模块702、还原控制模块703和存储模块704。
解析模块701,用于解析差分包,得到新增数据、各差分数据、各还原指示信息以及各平移控制信息,其中,各差分数据为第二固件中的第二数据与第一固件中的对应第一数据的差分数据,还原指示信息用于确定还原数据块所需的数据,平移控制信息用于指示第一数据中要移动的数据所对应的移动前的存储空间和移动后的存储空间;
平移控制模块702,用于根据各平移控制信息,确定各平移控制信息在第二空间中对应的移动前的各第一子空间和移动后的第二子空间;其中,第二空间为终端设备中用于存储第一固件的空间;
还原控制模块703,用于对于每个还原指示信息依次执行以下操作:确定还原一个数据块所需的数据,并根据所确定的数据还原得到对应的数据块,确定该数据块在第二空间中对应的第三存储空间;
存储模块704,用于若该第三存储空间中不包含第一子空间,则将该数据块存储到第三存储空间;
平移控制模块701,还用于若该第三存储空间包含第一子空间,则根据该第一子空间对应的平移控制信息,将该第一子空间中的数据移存到该第一子空间对应的第二子空间中,并且存储模块704还用于将该数据块存储到移除第一子空间后的第三存储空间,其中,第二子空间为该第一子空间中的数据对应的第二数据在第二空间中对应的第四存储空间之后的空闲区域。
本申请实施例实现了终端设备的第一固件的分段升级,充分地利用了第一固件在终端设备中的存储空间,并且在升级过程中可以减少对终端设备的闪存(Flash)的移存操作,提升整体性能。
本申请实施例提供了一种电子设备,如图8所示,图8所示的电子设备8000包括:处理器8001和存储器8003。其中,处理器8001和存储器8003相连,如通过总线8002相连。可选地,电子设备8000还可以包括收发器8004。需要说明的是,实际应用中收发器8004不限于一个,该电子设备8000的结构并不构成对本申请实施例的限定。
其中,处理器8001应用于本申请实施例中,用于实现图6所示的数据确定模块601、平移控制模块602、信息生成模块603、差分包生成模块604以及图7所示的解析模块701、平移控制模块702、还原控制模块703和存储模块704的功能。收发器8004包括接收机和发射机,收发器8004应用于本申请实施例中。
处理器8001可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器8001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线8002可包括一通路,在上述组件之间传送信息。总线8002可以是PCI总线或EISA总线等。总线8002可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器8003可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、新增数据光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器8003用于存储执行本申请方案的应用程序代码,并由处理器8001来控制执行。处理器8001用于执行存储器8003中存储的应用程序代码,以实现图6所示实施例提供的软件升级装置600和图7所示实施例提供的软件升级装置700的动作。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时可以实现上述软件升级方法。本申请实施例提供的计算机可读存储介质适用于上述方法任一实施例。在此不再赘述。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。