具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在现有技术中,以嵌入式设备的网络环境运行为例,由于程序故障修复、性能改进等原因,需要对设备进行远程升级,如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,生成每个数据块对应的还原指示信息以及第一数据中存储位置发生过移动的各部分数据的平移控制信息。
在对各数据块完成上述操作后,生成每个数据块对应的还原指示信息,一个数据块的还原指示信息用于确定还原该数据块所需的数据。
在对各个数据块完成对应的存储空间中的第三数据的移动后,对于第一数据中存储位置发生过移动的各部分数据(为了方便描述,以下可以将第一数据中存储位置发生过移动的各部分数据称为第四数据),可以生成对应的平移控制信息,每个第四数据对应的平移控制信息用于指示该第四数据所对应的移动前的存储空间和移动后的存储空间。
步骤S104,根据新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息,生成差分包并发送至终端设备,以使终端设备根据差分包和第一固件升级得到第二固件。
服务器将所生成的新增数据、差分数据、各数据块对应的还原指示信息和各第四数据对应的平移控制信息生成差分包。可选地,可以将差分包压缩,并将压缩后的差分包发送至终端设备,使终端设备根据差分包和其所存储的第一固件升级得到第二固件。
可选地,在实际应用中,服务器对任意两个版本的固件,可以执行一次差分包生成过程,并将生成的差分包存储在服务器中,在其他终端设备请求该差分包时可以直接将所存储的差分包发送给该终端设备。可选地,服务器也可以根据所存储的固件的多种版本,预先生成相应两个版本之间的差分包,并在终端设备请求对应的差分包时将其发送给终端设备。
本申请实施例所提供的方案,通过响应于终端设备针对目标软件的软件升级请求,确定第二固件中的新增数据和在第一固件中存在相似数据的各第二数据、以及各第二数据与第一固件中的第一数据之间的差分数据;将第二固件划分为多个数据块,并按照各数据块在第二固件中的先后,依次对每个数据块执行以下操作:若数据块对应的第一固件中的第一存储空间中存储有第三数据,则将第一存储空间中的第三数据整体移存到第一空间的空闲区域中;其中第三数据属于各第一数据中除该数据块对应的相似数据之外的数据,第一空间为服务器中用于存储第一固件的空间;生成每个数据块对应的还原指示信息以及第一数据中存储位置发生过移动的各部分数据的平移控制信息;根据新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息,生成差分包并发送至终端设备,以使终端设备根据差分包和第一固件升级得到第二固件,可以通过对第二固件划分为多个数据块,并对各个数据块分段处理,实现了终端设备的固件分段升级,进而充分地利用了第一固件在终端设备中的存储空间,并且服务器通过将各数据块对应的第一存储空间中的非该数据块对应的相似数据整体移存到空闲区域中,在终端设备的升级过程中可以在还原数据块的同时将未被还原使用的相似数据整体移存,并用于后续数据块的还原,减少了对终端设备的闪存(Flash)的移动操作,提升整体性能。
图2是本申请实施例提供的另一种软件升级方法的流程示意图。终端设备在接收到服务器发送的差分包后,可以根据第一固件进行升级,以得到第二固件,具体地,如图2所示,包括以下步骤。
步骤S201,解析差分包,得到新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息。
终端设备首先解析差分包,得到新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息,并将解析得到的数据存储在内存中的第一存储区域中。可选地,当差分包为压缩包时,首先解压差分包再解析差分包。此外,终端设备可以根据差分包包括的软件标识信息确定当前版本的第一固件以及存储第一固件的第二空间。
步骤S202,根据各平移控制信息,确定各平移控制信息在第二空间中对应的移动前的各第一子空间和移动后的第二子空间;其中,第二空间为终端设备中用于存储第一固件的空间。
根据各第四数据对应的平移控制信息,可以确定各第四数据在服务器端中对应的移动前的存储空间和移动后的存储空间。根据一定的对应规则,终端设备可以根据各第四数据在服务器端中对应的移动前的存储空间和移动后的存储空间,确定各第四数据在第二空间中对应的各第一子空间和第二子空间,其中平移控制信息可以指示一个或多个移动前的存储空间以及该一个或多个移动前的存储空间在第二空间中的对应的一个或多个第一子空间,并且平移控制信息还可以指示一个移动后的存储空间,以及该移动后的存储空间在第二空间中对应的移动后的第二子空间。
步骤S203,对于每个还原指示信息依次执行以下操作:确定还原一个数据块所需的数据,并根据所确定的数据还原得到对应的数据块,确定该数据块在第二空间中对应的第二存储空间。
其中,各数据块对应的还原指示信息可以具有指示其处理顺序的标签。例如,各数据对应的还原指示信息可以按照数据块的生成顺序排列,并生成对应于该顺序的标签。可选地,各数据块对应的还原指示信息可以任意排列,并按照其包含的标签所指示的处理顺序来进行处理。
按照还原指示信息所指示的顺序,对于每个还原指示信息,确定还原该还原指示信息对应的数据块所需的数据,并根据所确定的数据按照一定的还原规则还原得到对应的数据块。还原规则在此不做限定。在还原得到数据块后,终端设备需要确定要存储该数据块的存储空间。在本申请实施例中,终端可以将还原得到的数据块存储在存储有第一固件的第二空间中,以减少升级过程中使用的存储资源。因此,终端设备可以根据还原指示信息确定该数据块在第二空间中的对应第二存储空间。例如,在按照顺序依次生成数据块的情况下,可以根据该数据块的顺序和数据块的大小确定在第二空间中的对应第二存储空间。
步骤S204,若该第二存储空间中不包含第一子空间,则将该数据块存储到第二存储空间。
步骤S205,若该第二存储空间包含至少一个第一子空间,则根据该至少一个第一子空间对应的平移控制信息,将该至少一个第一子空间中的数据整体移存到该至少一个第一子空间对应的第二子空间中,并将该数据块存储到移除第一子空间后的第二存储空间。
在确定出数据块的第二存储空间后,可以根据上述平移控制信息,通过确定第二存储空间与任一第一子空间是否存在重叠空间来确定来第二存储空间中是否包含第一子空间。当第二存储空间与任一第一子空间存在重叠空间或者当任一第一子空间位于第二存储空间的范围内,则可以确定第二存储空间中包含第一子空间。
若该第二存储空间中包含至少一个第一子空间,根据该至少一个第一子空间对应的平移控制信息,将该至少一个第一子空间中的数据整体移存到该至少一个第一子空间对应的第二子空间中。
在本申请实施例中,第二存储空间中可以包含多个第一子空间,在这种情况下,终端设备可以将该多个第一子空间中的数据从各个第一子空间中取出,并且整体移存到对应的第二子空间中。整体移存到对应的第二子空间中是指以一次写入操作写入第二子空间中。最后,将步骤S203生成的数据块存储到移除第一子空间后的第二存储空间。
终端设备通过根据上述还原指示信息依次还原第二固件的数据块,可以利用第一固件的存储空间分段还原第二固件,节省了存储空间,并根据平移控制信息,将该数据块对应的第二存储空间中的各个第一子空间中的数据整体移存到对应的第二子空间中,可以减少对终端设备的闪存(Flash)的写入操作,即内容移动操作,提升整体性能。
本申请实施例为了减少Flash的写入操作,服务器在对未被差分的数据进行移存时,可以将多个数据作为整体移存。
图3为本申请实施例提供的一种将第一存储空间中的第三数据整体移存到第一空间的空闲区域中的流程示意图。如图3所示,包括以下步骤:
步骤S301,确定第三数据所需的存储空间大小。
其中,第三数据是指位于数据块对应的第一存储空间并且属于第一数据中除该数据块对应的相似数据之外的数据,即,第三数据为第一存储空间中的除该数据块对应的相似数据之外的其它相似数据。
可选地,第一存储空间中的第三数据可以对应于同一第二数据。可选地,第一存储空间中的第三数据可以对应于不同第二数据。根据上述可知,第三数据可以包括一个或多个第四数据。确定第三数据所需的存储空间大小即确定第三数据包括的各个第四数据大小之和,并根据各个第四数据大小之和来确定所需的存储空间大小,其中存储空间大小可以以KB为单位。
步骤S302,确定第一空间中的各空闲区域的大小。
根据上述可知,第一空间包括存储作为相似数据的第一数据的空间和存储作为非相似数据的空闲区域。在确定第三数据所需的存储空间大小之后,可以确定第一空间中的各空闲区域的大小,以将待移动的第三数据移存到空闲区域中。
步骤S303,判断第一空间中是否存在大于或等于第三数据所需的存储空间大小的空闲区域,当存在时,将空间最小且大于或等于第三数据所需的存储空间大小的空闲区域确定为目标空间。
在确定第一空间中的空闲区域的大小之后,可以根据第三数据所需的存储空间大小,确定第一空间中是否存在大于或等于第三数据所需的存储空间大小的空闲区域。当存在时,将空间最小且大于或等于第三数据所需的存储空间大小的空闲区域确定为目标空间,换句话说,将大于或等于第三数据所需的存储空间大小的空闲区域中空间最小的空闲区域确定为目标空间。
步骤304,将第三数据整体移存到目标空间中。
将第三数据整体移存到目标空间中,即将第三数据包括的第四数据整体移存到目标空间中。具体地,可以将第三数据包括的各第四数据从各自的存储空间中读出,将各第四数据合并后一次性写入目标空间中。
本申请实施例通过将第三数据中的各第四数据整体移存到第一空间中的目标空间中,可以减少Flash写入操作,提升操作性能。
本申请实施例中,当第三数据包括多个第四数据时,可以有多种存储情况。为了更清楚的示出将第三数据整体移存的过程,图4a和图4b示出了第一存储空间中的第三数据的不同存储情况。
图4a示出了第一存储空间中的第三数据包括连续存储的两个第四数据的情况。如图4a所示,第二固件中的数据块2对应的第一存储空间中包括第四数据4和第四数据5,该第四数据4和第四数据5的存储空间连续。服务器可以确定第四数据4和第四数据5的存储空间大小之和,例如,第四数据4的存储空间大小为1KB,第四数据5的存储空间大小为2KB,则第四数据4和第四数据5的存储空间之和为3KB,即,第一存储空间中的第三数据所需的存储空间大小为3KB。
服务器在确定第三数据所需的存储空间大小之后,可以确定第一空间中的各空闲区域的大小。判断第一空间中是否存在大于或等于第三数据所需的存储空间大小3KB的空闲区域,当存在时,将空间最小且大于或等于第三数据所需的存储空间大小3KB的空闲区域确定为目标空间,并且将第四数据4和第四数据5整体移存到所确定的目标空间中。
图4b示出了第一存储空间中的第三数据包括不连续存储的第四数据的情况。如图4b所示,第二固件中的数据块2对应的第一存储空间中包括第四数据4和第四数据5,该第四数据4和第四数据5的存储空间不连续。服务器可以确定第四数据4和第四数据5的存储空间大小之和,例如,第四数据4的存储空间大小为1KB,第四数据5的存储空间大小为2KB,则第四数据4和第四数据5的存储空间之和为3KB,,即,第一存储空间中的第三数据所需的存储空间大小为3KB。
服务器在确定第三数据所需的存储空间大小之后,可以确定第一空间中的各空闲区域的大小。判断第一空间中是否存在大于或等于第三数据所需的存储空间大小3KB的空闲区域,当存在时,将空间最小且大于或等于第三数据所需的存储空间大小3KB的空闲区域确定为目标空间,并且将第四数据4和第四数据5整体移存到所确定的目标空间中。
可选地,服务器可以先确定第一空间中在数据块2对应的第一存储空间之后的各个空闲区域的大小,并判断是否存在大于或等于第三数据所需的存储空间大小3KB的空闲区域,当存在时,将数据块2对应的第一存储空间之后的空间最小且大于或等于第三数据所需的存储空间大小3KB的空闲区域确定为目标空间,并且将第三数据整体向后移存到所确定的目标空间中。在确定第一空间中在数据块2对应的第一存储空间之后不存在大于或等于第三数据所需的存储空间大小3KB的空闲区域时,确定第一空间中在数据块2对应的第一存储空间之前大于或等于第三数据所需的存储空间大小3KB的空闲区域为目标空间,并第三数据整体移存到所确定的目标空间中。
可选地,将第一存储空间中的第三数据整体移存到第一空间的空闲区域中,还包括:
若第一空间中不存在大于或等于第三数据所需的存储空间大小的空闲区域,则将第三数据以分片数最小原则进行拆分,并将拆分后的分片数据移存到多个空闲区域中,其中,多个空闲区域的空间大小不小于第三数据所需的存储空间大小。
可选地,根据各空闲区域的空间从大到小的顺序,将第三数据尽可能少地拆分为与各空闲区域的存储空间大小对应的多个分片数据,并将该多个分片数据分别存储到各空闲区域中,其中,所存储的多个空闲区域的空间大小之和大于或等于第三数据所需的存储空间大小。
其中,上述分片数最小原则为将第三数据划分为尽可能少的分片数据。如果没有找到足够大能够存储第三数据(大小为X)的连续存储空间S,则寻找最佳匹配空间S1(最接近X大小的存储空间),然后把X大小的第三数据当作一个整体进行拆分为S1大小的分片数据和X-S1大小的分片数据,并将S1大小的分片数据和X-S1大小的分片数据分别存储到对应大小的存储空间中。
例如,第三数据所需的存储空间大小为5KB,但是第一空间中的空闲区域中不存在大于或等于5KB的空闲区域,而是包括2KB的空闲区域、3KB的空闲区域和多个1KB的空闲区域,则可以确定从大到小的空闲区域为3KB的空闲区域、2KB的空闲区域、1KB的空闲区域。根据分片数最小原则,可以将该第三数据划分为3KB和2KB大小的两个分片数据,并将划分后的3KB和2KB大小的两个分片数据分别移动到对应的3KB的空闲区域和2KB的空闲区域中,而不是将第三数据移存到多个1KB的空闲区域中。以上描述只是示例性的,第三数据还可以存储在大于两个的空闲区域中。
可选地,当第一空间中的空闲区域中不存在大于或等于5KB的空闲区域时,服务器可以先判断第一空间中的第一存储空间之后的各空闲区域的大小,并根据各空闲区域的大小和分片数最小原则,将第三数据拆分为多个分片数据并存储在第一存储空间之后的空闲区域中。可选地,根据第一存储空间之后的各空闲区域的空间从大到小的顺序,将第三数据尽可能少地拆分为与各空闲区域的存储空间大小对应的多个分片数据,并将该多个分片数据分别存储到各空闲区域中。
根据本申请实施例,针对每一个数据块,可以将该数据块对应的第一存储空间中的第三数据整体移存到第一空间的空闲区域中,并且当第一空间中不存在足够容纳第三数据的空闲区域时,可以根据分片数最小原则将第三数据划分并存储,在终端设备进行固件升级时,可以显著降低Flash内容移动操作步数。
在步骤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至图5h为本申请实施例提供的一种软件升级方法的示例图。可选地,本申请实施例的软件升级方法可以由服务器执行。
可选地,服务器在确定目标软件对应的当前版本的固件(以下称为第一固件)和目标版本的固件(以下称为第二固件)后,服务器可以根据现有差分算法确定第二固件和第一固件中的数据的对应关系。
图5a示出了第二固件和第一固件中的数据的对应关系的示意图。
根据本申请实施例,通过上述对应关系的确定,服务器可以确定第二固件中的新增数据和在第一固件中存在相似数据的各第二数据、以及第一固件中作为每个第二数据的相似数据的第一数据。可选地,服务器可以确定第一固件中的除了第一数据之外的数据,以下称为非相似数据,其存储空间可以称为空闲区域。
其中,新增数据块是指第二固件相对于第一固件新增的数据,以D1、D2、D3表示;第二数据是指在第一固件中存在相似数据的数据,以T1、T2、T3表示;第一数据是指第二固件中的第二数据在第一固件中对应的相似数据,以S1、S2、S3表示;非相似数据是指第一固件中的升级到第二固件未使用的数据,以K1、K2、K3表示。
图5b至图5h示出了以设定数据大小对第二固件进行划分的过程示意图。
图5b和图5c示出了第一次划分过程,根据划分结果可以确定出第二固件中包含的目标子数据T11,并根据前述确定的对应关系,可以确定出目标子数据T11对应的相似数据,即S1中对应的部分,并且可以根据T11与S1中的对应部分确定差分数据。可选地,在对T11与S1中的对应部分进行差分之后,可以将与S1的对应部分确定为空闲区域。
由于第一次划分的数据块对应的第一存储空间中存储有第三数据,即,S3中的一部分(记为S5),则需要将第一存储空间中的S5整体移存到第一空间的空闲区域中。此时,确定S5所需的存储空间大小,并确定第一空间中在第一存储空间之后的各空闲区域的大小,将S5整体移存到大于或等于S5所需的存储空间大小且空间最小的空闲区域中,即将S5整体移存到K2中。对于存储位置发生过移动的第四数据S5,生成第四数据S5对应的平移控制信息(x5,y5,z5),该平移控制信息用于指示第四数据S5所对应的移动前的存储空间和移动后的存储空间。
在对该数据块完成平移操作后,生成该数据块对应的还原指示信息,由于该数据块只包括目标子数据T11,则还原指示信息为第一指示信息(x1,y1)。
图5d和图5e示出了第二次划分过程,根据划分结果可以确定出第二固件中包含的目标子数据T12,并根据前述确定的对应关系,可以确定出目标子数据T12对应的相似数据,即S1中对应的部分,并且可以根据T12与S1中的对应部分确定差分数据。可选地,在对T12与S1中的对应部分进行差分之后,可以将与S1的对应部分确定为空闲区域。
由于第二次划分的数据块对应的第一存储空间中存储有第三数据,即,S3中的一部分(记为S6),则需要将第一存储空间中的S6整体移存到第一空间的空闲区域中。此时,确定S6所需的存储空间大小,并确定第一空间中在第一存储空间之后的各空闲区域的大小,将S6整体移存到大于或等于S6所需的存储空间大小且空间最小的空闲区域中,即将S6整体移存到K3中。对于存储位置发生过移动的第四数据S6,生成第四数据S6对应的平移控制信息(x6,y6,z6),该平移控制信息用于指示S6所对应的移动前的存储空间和移动后的存储空间。
在对该数据块完成平移操作后,生成该数据块对应的还原指示信息,由于该数据块只包括目标子数据T12,则还原指示信息为第一指示信息(x2,y2)。
图5f和图5g示出了第三次划分过程,根据划分结果可以确定出第二固件中包含的目标子数据T13,并根据前述确定的对应关系,可以确定出目标子数据T13对应的相似数据,即S1中对应的部分,并且可以根据T13与S1中的对应部分确定差分数据。可选地,在对T13与S1中的对应部分进行差分之后,可以将与S1的对应部分确定为空闲区域。
由于第三次划分的数据块对应的第一存储空间中存储有第三数据,即,S3中的一部分(记为S7),则需要将第一存储空间中的S7整体移存到第一空间的空闲区域中。此时,确定S7所需的存储空间大小,并确定第一空间中在第一存储空间之后的各空闲区域的大小,将S7整体移存到大于或等于S7所需的存储空间大小且空间最小的空闲区域中,即将S7整体移存到K4中。对于存储位置发生过移动的第四数据S7,生成第四数据S7对应的平移控制信息(x7,y7,z7),该平移控制信息用于指示S7所对应的移动前的存储空间和移动后的存储空间。
在对该数据块完成平移操作后,生成该数据块对应的还原指示信息,由于该数据块包括目标子数据T13和新增数据D1中的部分数据,则还原指示信息包括第一指示信息(x3,y3)和第二指示信息(z1),其中第二指示信息(z1)用于指示从新增数据中获取z1大小的新增子数据。
图5h示出了第四次划分过程,根据划分结果可以确定出第二固件中包含的目标子数据T21,并根据前述确定的对应关系,可以确定出目标子数据T21对应的相似数据,即S2中对应的部分,并且可以根据T21与S2中的对应部分确定差分数据。可选地,在对T21与S2中的对应部分进行差分之后,可以将与S2的对应部分确定为空闲区域。
由于第三次划分的数据块对应的第一存储空间中存储有第三数据,即,S3中的一部分(即S3和S5),则需要将第一存储空间中的S3和S5整体移存到第一空间的空闲区域中。此时,确定S3和S5所需的存储空间大小之和,并确定第一空间中在第一存储空间之后的各空闲区域的大小,将S3和S5整体移存到大于或等于S3和S5之和且空间最小的空闲区域中,即将S3和S5整体移存到K4中。对于存储位置发生过移动的第四数据S3和第四数据S5,生成第四数据S3和第四数据S5对应的平移控制信息(x3’,y3’,z3’)和(x5’,y5’,z5’)。
在对该数据块完成平移操作后,生成该数据块对应的还原指示信息,由于该数据块包括目标子数据T21和新增数据D1中的部分数据,则还原指示信息包括第一指示信息(x4,y4)和第二指示信息(z2),其中,第二指示信息(z2)用于指示从新增数据中获取z2大小的新增子数据。
可选地,当第一固件中没有足够容纳S3和S5的空闲区域时,则确定各空闲区域的空间从大到小的顺序,并根据分片数最小原则将S3和S5之和划分为与从大到小的各空闲区域的大小对应的各个部分,并将划分后的各个部分分别移动到对应的空闲区域中。
根据本申请实施例,针对每一个数据块,可以将该数据块对应的第一存储空间中的第三数据整体移存到第一空间的空闲区域中,并且当第一空间中不存在足够容纳第三数据的空闲区域时,可以将第三数据按照分片数最小原则和第一空间中的空闲区域的大小进行划分并存储。
如上所述,在对整个第二固件完成划分与平移过程后,根据新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息,生成差分包并发送至终端设备,以使终端设备根据差分包和第一固件升级得到第二固件。
终端设备可以根据获取的差分包与所存储的第一固件,按照上述数据块生成顺序依次还原数据块,从而得到第二固件,还原过程只会占据很小的空间,有利地解决了内存空间不足,无法一次性还原第二固件的问题,并且终端设备根据平移控制信息,将该数据块对应的第二存储空间中的各个第一子空间中的数据整体移存到对应的第二子空间中,可以减少对终端设备的闪存(Flash)的内容移动操作,提升整体性能。
可选地,在还原过程中,当使用第一固件中的相似数据还原第二固件数据后,该相似数据一般后续不再使用,可以将该相似数据所在存储空间释放,即将该相似数据的存储空间确定为空闲区域。通过本申请实施例,以数据块为单位还原第二固件,并将对应的相似数据的空间释放,可以在还原过程中占用较小的使用空间,并在还原过程中增大可利用空间。
由于Flash的特性是擦写必须是扇区4K为单位操作,那么一次移动,都需要读取扇区内容,插入移动的数据,写回扇区内容,因此,当移动次数较多时,升级时间较长并且性能低下。
假设针对每个数据块的还原过程,移动的数据为x1,x2,x3,x4,x5,x6,…,xn,那么平移控制信息就有n个,且移动时要考虑到不能破坏存储空间的扇区内原有内容。下面将详细介绍移动数据对存储性能的影响。
以x1移动到k1为例,k1要考虑是否横跨了不同的Flash的扇区,如果横跨了不同的Flash扇区,则针对不同Flash扇区,要对不同的扇区执行删除与写入操作,还要考虑可能导致破坏首部扇区的后半部分数据和尾部扇区的前半部分数据导致数据丢失或错误的情况。因此,针对每个数据块的还原过程如果要移动多个小块x1,x2…xn的话,会显著增加Flash的移动操作步骤。
即使x1,x2,x3在同一个扇区内移动,也要进行三次移动,且每次移动还要考虑不能破坏原有的数据内容。
根据本申请实施例,针对每一个数据块,可以将该数据块对应的第一存储空间中的第三数据整体移存到第一空间的空闲区域中,并且当第一空间中不存在足够容纳第三数据的空闲区域时,可以将第三数据按照分片数最小原则进行划分并存储,可以显著降低Flash的移动操作步数。
基于与上述软件升级相同的原理,本申请实施例提供了一种软件升级装置。如图6所示,该软件升级装置600包括:数据确定模块601、平移控制模块602、信息生成模块603和差分包生成模块604。
数据确定模块601,用于响应于终端设备针对目标软件的软件升级请求,确定第二固件中的新增数据和在第一固件中存在相似数据的各第二数据、以及各第二数据与第一固件中的第一数据之间的差分数据;
平移控制模块602,用于将第二固件划分为多个数据块,并按照各数据块在第二固件中的先后,依次对每个数据块执行以下操作:若数据块对应的第一固件中的第一存储空间中存储有第三数据,则将第一存储空间中的第三数据整体移存到第一空间的空闲区域中;其中,第三数据属于各第一数据中除该数据块对应的相似数据之外的数据,第一空间为服务器中用于存储第一固件的空间;
信息生成模块603,用于生成每个数据块对应的还原指示信息以及第一数据中存储位置发生过移动的各部分数据的平移控制信息;
差分包生成模块604,用于根据新增数据、各差分数据、各数据块对应的还原指示信息以及各平移控制信息,生成差分包并发送至终端设备,以使终端设备根据差分包和第一固件升级得到第二固件。
可选地,将第二固件划分为多个数据块之后,数据确定模块还用于:根据划分结果确定出每个数据块中包括的各目标子数据和/或新增子数据,并确定每个目标子数据各自对应的相似数据和差分数据,其中,目标子数据为第二固件中属于第二数据的数据,新增子数据为第二固件中属于新增数据的数据。
可选地,信息生成模块还用于,根据每个数据块中包括的各目标子数据和/或新增子数据确定该数据块对应的还原指示信息。
可选地,对于每个数据块,对于每个数据块,若该数据块为目标子数据,则该数据块对应的还原指示信息为第一指示信息;若该数据块为新增子数据,则该数据块对应的还原指示信息为第二指示信息;若该数据块包括目标子数据和新增子数据,则该数据块对应的还原指示信息包括第一指示信息和第二指示信息,其中,第一指示信息用于确定目标子数据对应的相似数据的存储空间,第二指示信息用于从新增数据中确定该数据块对应的新增子数据。
本申请实施例所提供的方案,可以通过对第二固件划分为多个数据块,并对各个数据块分段处理,实现了终端设备的固件分段升级,从而充分地利用了第一固件在终端设备中的存储空间,并且服务器通过将各数据块对应的第一存储空间中的非该数据块对应的相似数据整体移存到空闲区域中,在终端设备的升级过程中可以在还原数据块的同时将未被还原使用的相似数据整体移存,并用于后续数据块的还原,减少了对终端设备的闪存(Flash)的移动操作,提升整体性能。
基于与上述软件升级相同的原理,本申请实施例提供了另一种软件升级装置,该软件升级装置可以为终端设备,用于根据差分包进行软件升级。如图7所示,该软件升级装置700包括:解析模块701、平移控制模块702、还原控制模块703和存储模块704。
解析模块701,用解析差分包,得到新增数据、各差分数据、各还原指示信息以及各平移控制信息,其中,各差分数据为第二固件中的第二数据与第一固件中的对应第一数据的差分数据,还原指示信息用于确定还原数据块所需的数据,平移控制信息用于指示第一数据中要移动的数据所对应的移动前的存储空间和移动后的存储空间;
平移控制模块702,用于根据各平移控制信息,确定各平移控制信息在第二空间中对应的移动前的各第一子空间和移动后的第二子空间;其中,第二空间为终端设备中用于存储第一固件的空间;
还原控制模块703,用于对于每个还原指示信息依次执行以下操作:确定还原一个数据块所需的数据,并根据所确定的数据还原得到对应的数据块,确定该数据块在第二空间中对应的第二存储空间;
存储模块704,用于若该第二存储空间中不包含第一子空间,则将该数据块存储到第二存储空间;
平移控制模块702,还用于若该第二存储空间包含至少一个第一子空间,则根据该至少一个第一子空间对应的平移控制信息,将该至少一个第一子空间中的数据整体移存到该至少一个第一子空间对应的第二子空间中,并且存储模块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的动作。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时可以实现上述软件升级方法。本申请实施例提供的计算机可读存储介质适用于上述方法任一实施例。在此不再赘述。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。