本公开数据处理技术领域,尤其涉及一种空中升级固件的方法及其所应用的终端、服务器及系统。
背景技术:
设备空中固件升级技术(firmwareover-the-air,简称fota),利用设备要升级的新固件和旧固件进行差分处理dfota方式,为具有连网功能的设备进行系统修复和优化。差分升级一般通过下载差分升级文件到本地非易失性内存flash,然后根据非易失性内存的旧固件和差分文件合并为新的固件,再将新的固件替换掉旧的固件完成升级。升级过程中把新的固件写入旧固件存储的非易失性内存时,如果出现异常,比如掉电,那么新合成的固件数据将会丢失,而存储旧固件的非易失性内存区域因写入新的固件也遭到了破坏,整个系统就不可再恢复,设备不能再启动,出现变砖的情况。
为了避免设备掉电异常不能重启的情况,通常两种方法,一种是采用双固件区域,当系统升级异常,一个固件区域遭到破坏,使用另外一个备份区域恢复系统,这种采用双固件区域方法不仅增加了存储成本,而且异常后升级需要重新开始;另外一种方法是先将合并生成新固件先写入到临时非易失性内存中,然后再从临时非易失性内存中读取新固件替换旧固件,在替换旧文件时出现掉电等异常,新固件不会丢失,重新上电可以继续替换旧的固件。但是这种使用临时非易失性内存来存储整个新生成的固件增加了产品的成本。
可见,现有的空中升级固件的方案存在成本较高或者掉电异常时损坏固件的技术问题。
技术实现要素:
有鉴于此,本公开实施例提供一种空中升级固件的方法及其所应用的终端、服务器及系统,至少部分解决现有技术中存在的问题。
第一方面,本公开实施例提供了一种空中升级固件的方法,应用于终端,所述方法包括:
从服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数;
确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个;
将所述目标升级块存放到临时存储区域;
从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
根据本公开实施例的一种具体实现方式,所述确定当前待更新的目标升级块的步骤,包括:
确定当前待更新的全部升级块;
查询每个升级块对应的旧切割块的被依赖程度,其中,所述旧切割块的被依赖程度为所述旧切割块被其他升级块依赖升级的关系;
将被依赖度最小的升级块作为所述目标升级块。
根据本公开实施例的一种具体实现方式,所述确定当前待更新的全部升级块的步骤,包括:
查询升级状态表中升级状态为未升级的全部升级块;
所述从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域的步骤之后,所述方法还包括:
在所述升级状态表中,清除所述升级块的升级状态,或者,更新所述目标升级块的升级状态为已升级。
根据本公开实施例的一种具体实现方式,所述从服务器下载对应旧固件的固件升级文件到新固件存储区域的步骤之后,所述方法还包括:
解析所述固件升级文件,获得所述固件升级文件中的基准校验和以及每个升级块的图像内容;
根据每个升级块的图像内容,计算实际校验和;
判断所述实际校验和与所述基准校验和是否相同;
若所述实际校验和与所述基准校验和相同,则确认所述固件升级文件无损,执行对所述旧固件的升级操作;
若所述实际校验和与所述基准校验和不相同,则确认所述固件升级文件受损,不执行对所述旧固件的升级操作。
第二方面,本公开实施例提供了一种空中升级固件的方法,应用于服务器,所述方法包括:
获取终端内待升级的旧固件,以及所述旧固件对应的新固件;
按照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n;
对每个新切割块与旧切割块做预处理,得到对应的升级块;
将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块;
向所述终端发送所述固件升级文件,以使所述终端依次升级所述m个升级块。
根据本公开的一种具体实现方式,所述对每个新切割块与旧切割块做预处理,得到对应的升级块的步骤,包括:
对所述新切割块与n个旧切割块中的每个旧切割块均做差分处理,得到所述新切割块与每个旧切割块的差分结果;
根据所述新切割块与每个旧切割块的差分结果,确定所述新切割块的最小差分结果,以及所述最小差分结果关联的目标切割块,其中,所述目标切割块为n个旧切割块的任一个;
根据所述新切割块的最小差分结果及所述最小差分结果关联的目标切割块,形成对应所述新切割块的升级块。
根据本公开的一种具体实现方式,所述根据所述新切割块与每个旧切割块的差分结果,确定所述新切割块的最小差分结果,以及所述最小差分结果关联的目标切割块的步骤之前,所述方法还包括:
将所述新切割块做压缩处理,作为所述新切割块与自身压缩文件的差分结果;
所述根据所述新切割块与每个旧切割块的差分结果,确定所述新切割块的最小差分结果,以及所述最小差分结果关联的目标切割块的步骤,包括:
根据所述新切割块与每个旧切割块的差分结果,以及所述新切割块与自身压缩文件的差分结果,确定所述新切割块的最小差分结果,以及,所述最小差分结果关联的目标切割块,其中,所述目标切割块为n个旧切割块和所述新切割块自身压缩文件的任一个。
根据本公开的一种具体实现方式,所述将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件的步骤,包括:
采用免费备份修复fbf文件结构处理方法,将m个升级文件进行组包处理,得到所述固件升级文件;其中,
所述固件升级文件的头部包括每个升级块的参数信息,所述固件升级文件的中部包括全部升级块的内容数据,每个升级块的参数信息至少包括所述升级块的标识、校验和、新升级块对应的待覆盖区域和所更新的旧切割块的存储区域中的任一项。
第三方面,本公开实施例还提供了一种空中升级固件的方法,应用于空中升级固件的系统,所述系统包括服务器和终端;所述方法包括:
所述服务器获取终端内待升级的旧固件,以及所述旧固件对应的新固件,照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n,对每个新切割块与旧切割块做预处理,得到对应的升级块,将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块,向所述终端发送所述固件升级文件;
所述终端从所述服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数,确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个,将所述目标升级块存放到临时存储区域,从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
第四方面,本公开实施例还提供了一种终端,包括:
下载模块,用于从服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数;
确定模块,用于确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个;
存放模块,用于将所述目标升级块存放到临时存储区域;
读写模块,用于从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
第五方面,本公开实施例还提供了一种服务器,包括:
获取模块,用于获取终端内待升级的旧固件,以及所述旧固件对应的新固件;
切割模块,用于按照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n;
处理模块,用于对每个新切割块与旧切割块做预处理,得到对应的升级块;
打包模块,用于将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块;
发送模块,用于向所述终端发送所述固件升级文件,以使所述终端依次升级所述m个升级块。
第六方面,本公开实施例还提供了一种空中升级固件的系统,包括终端和服务器;其中,
所述服务器用于获取终端内待升级的旧固件,以及所述旧固件对应的新固件,照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n,对每个新切割块与旧切割块做预处理,得到对应的升级块,将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块,向所述终端发送所述固件升级文件;
所述终端用于从所述服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数,确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个,将所述目标升级块存放到临时存储区域,从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
第七方面,本公开实施例还提供了一种电子设备,该电子设备包括:
至少一个处理器;以及,
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述第一方面至第三方面的任一实现方式中的空中升级固件的方法。
第八方面,本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述第一方面至第三方面的任一实现方式中的空中升级固件的方法。
第九方面,本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述第一方面至第三方面的任一实现方式中的空中升级固件的方法。
本公开实施例中的空中升级固件的方案,包括:终端从服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数;确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个;将所述目标升级块存放到临时存储区域;从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。通过本公开的方案,解决掉电异常时终端不能重启继续升级的问题,同时有效降低升级时对非易失性内存的需求,提高升级可靠性同时降低成本。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本公开实施例提供的一种空中升级固件的方法的流程示意图;
图2为本公开实施例提供的空中升级固件的系统的交互示意图;
图3为本公开实施例提供的另一种空中升级固件的方法的流程示意图;
图4为本公开实施例提供的空中升级固件的方法所涉及的新旧固件的切割块示意图;
图5为本公开实施例提供的空中升级固件的方法的部分流程示意图;
图6为本公开实施例提供的空中升级固件的方法所涉及的非对齐差分处理的过程示意图;
图7为本公开实施例提供的空中升级固件的方法所涉及的非对齐差分处理的结果示意图;
图8为本公开实施例提供的空中升级固件的方法所涉及的固件升级文件的结构示意图;
图9为本公开实施例提供的另一种空中升级固件的方法的流程示意图;
图10为本公开实施例提供的空中升级固件的方法所涉及的下载过程示意图;
图11为本公开实施例提供的空中升级固件的方法的部分流程示意图;
图12为本公开实施例提供的空中升级固件的方法的另一种流程示意图;
图13为本公开实施例提供的空中升级固件的方法的升级升级块更新过程示意图;
图14为本公开实施例提供的空中升级固件的方法中新旧固件增减内容示意图;
图15为本公开实施例提供的一种终端的结构示意图;
图16为本公开实施例提供的一种服务器的结构示意图;
图17为本公开实施例提供的电子设备的示意图。
具体实施方式
下面结合附图对本公开实施例进行详细描述。
以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图式中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。
本公开实施例提供一种空中升级固件的方法。本实施例提供的空中升级固件的方法可以由一计算装置来执行,该计算装置可以实现为软件,或者实现为软件和硬件的组合,该计算装置可以集成设置在服务器、终端等中。
参见图1,为本公开实施例提供的一种空中升级固件的方法。所提供的空中升级固件的方法,应用于空中升级固件的系统。如图2所示,所述系统包括服务器201和终端202,所述服务器201与所述终端202之间建立通信连接,其中,所述终端202的数量可以为多个。如图1所示,所述方法主要包括:
s101,服务器获取终端内待升级的旧固件,以及所述旧固件对应的新固件,照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n,对每个新切割块与旧切割块做预处理,得到对应的升级块,将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块,向终端发送所述固件升级文件;
s102,所述终端从所述服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数,确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个,将所述目标升级块存放到临时存储区域,从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
本实施例提供的空中升级固件的方法,用于将终端内的旧固件升级为新固件。具体实施时,服务器端先获取该终端内待升级的旧固件,以及用于替换掉旧固件的新固件。预先确定切割尺寸,对新固件和旧固件均对应对应切割,得到新固件对应的m个新切割块,以及旧固件对应的n个旧切割块。考虑到升级过程都伴随着数据的增多,m通常大于或者等于n。
接着,服务器获得针对每个新切割块的升级块。具体的,服务器针对每个新切割块及旧切割块做预处理,如非对齐差分处理,得到最小差分结果,并结合关联的旧切割块形成对应的升级块,以此可得m个升级块。最后,服务器将该m个升级块打包,打包时,需要将各个升级块的待覆盖地址、长度等参数信息记录到打包形成的固件升级文件内,然后将所生成的固件升级文件发送到待升级固件的终端内。
另一方面,终端从服务器下载固件升级文件,先将该固件升级文件存放到非易失性内存中,定义为新固件存储区域。该固件升级文件内包括m个升级块,该m个升级块依次更新到终端内旧固件的存储区域内。考虑到升级块关联的旧切割块之间可能存在依赖关系,要确定m个升级块之间的先后顺序,将当前待更新的升级块定义为目标升级块。终端将该目标升级块存放到临时存储区域内,再从该临时存储区域内读取目标升级块并写入覆盖存储区域,完成该目标升级块的更新覆盖操作。依次执行此类更新覆盖操作,直至全部升级块均更新完成。若某一升级块在更新过程中终端出现掉电异常,则可以在终端重启后继续该升级块的更新操作,其他已经更新好的升级块不会受损,存储在新升级块存储区域也不会受损,有效解决了掉电异常造成的问题。
上述本公开实施例中的空中升级固件的方案,解决掉电异常时终端不能重启继续升级的问题,同时有效降低升级时对非易失性内存的需求,提高升级可靠性同时降低成本。
下面将分别从服务器端具体描述服务器生成固件升级文件的过程,以及终端下载固件升级文件来升级固件的过程。
参见图3,为本公开实施例提供的另一种空中升级固件的方法。本实施例提供的空中升级固件的方法应用于服务器。如图3所示,所述方法主要包括:
s301,获取终端内待升级的旧固件,以及所述旧固件对应的新固件;
s302,按照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n;
本实施例中,把待升级的旧固件及对应的新固件做切割处理,将新固件和旧固件均切割成一个个模块。设定新固件大小为10mbyte,旧固件大小为9mbyte,预设切割尺寸为2mbyte,如图4所示,新固件和旧固件分别被切割成5个模块。此外,若新固件大小为11mbyte,则会被切割成6个模块,均已同一切割尺寸切割出来的模块数量为准。
s303,对每个新切割块与旧切割块做预处理,得到对应的升级块;
服务器内预设有预处理算法,对新切割块和旧切割块做预处理,以得到每个新切割块对应的升级块。
根据本公开的一种具体实现方式,如图5所示,所述对每个新切割块与旧切割块做预处理,得到对应的升级块的步骤,包括:
s501,对所述新切割块与n个旧切割块中的每个旧切割块均做差分处理,得到所述新切割块与每个旧切割块的差分结果;
s502,根据所述新切割块与每个旧切割块的差分结果,确定所述新切割块的最小差分结果,以及所述最小差分结果关联的目标切割块,其中,所述目标切割块为n个旧切割块的任一个;
s503,根据所述新切割块的最小差分结果及所述最小差分结果关联的目标切割块,形成对应所述新切割块的升级块。
进一步的,所述根据所述新切割块与每个旧切割块的差分结果,确定所述新切割块的最小差分结果,以及所述最小差分结果关联的目标切割块的步骤之前,所述方法还包括:
将所述新切割块做压缩处理,作为所述新切割块与自身压缩文件的差分结果;
所述根据所述新切割块与每个旧切割块的差分结果,确定所述新切割块的最小差分结果,以及所述最小差分结果关联的目标切割块的步骤,包括:
根据所述新切割块与每个旧切割块的差分结果,以及所述新切割块与自身压缩文件的差分结果,确定所述新切割块的最小差分结果,以及,所述最小差分结果关联的目标切割块,其中,所述目标切割块为n个旧切割块和所述新切割块自身压缩文件的任一个。
具体的,如图6所示,将新固件的第一个新切割块分别和旧固件的每个切旧割块进行差分,得到每个差分对应的差分结果,记录为1_1、1_2、1_3、1_4和1_5,从中选择最小差分结果,如1_1为其中的最小差分结果。服务器再将新固件的第一个新切割块单独做压缩生成1_0,最后取1_1和1_0中最小的结果,作为第一新切割块最终的最小差分结果。当然,服务器也可以先直接得出1_0至1_5,再从这6个中选择最小差分结果。
如图7所示,服务器将新固件的每一个新切割块均与旧固件的全部切割块做一次非对称差分处理,再结合自身压缩行程的文件,确定每个新切割块对应的最小差分结果。本示例中,1_1是新固件第1个切割模块和旧固件第1个切割模块形成的最小差分结果,2_2是新固件第2个切割模块和旧固件第2个切割模块形成的最小差分结果,3_2是新固件第3个切割模块和旧固件第2个切割模块形成的最小差分结果,4_3是新固件第4个切割模块和旧固件第3个切割模块形成的最小差分结果,5_0是新固件第5个切割模块自压缩形成的最小差分结果。
s304,将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块;
服务器在依据上述步骤获得每个新切割块对应的升级块后,即将全部升级块打包成固件升级文件。可选的,所述将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件的步骤,包括:
采用免费备份修复fbf文件结构处理方法,将m个升级文件进行组包处理,得到所述固件升级文件;其中,
所述固件升级文件的头部包括每个升级块的参数信息,所述固件升级文件的中部包括全部升级块的内容数据,每个升级块的参数信息至少包括所述升级块的标识、校验和、新升级块对应的待覆盖区域和所更新的旧切割块的存储区域中的任一项。
服务器将形成的5个升级块进行组包处理,形成一个完整的固件升级文件,组包处理使用的是免费修复文件(freepocketfix,简称fbf)结构处理办法,fbf升级文件结构如图8所示。5个升级块对应image1_1、image2_2、image3_2、image4_3和image5_0,fbf文件结构前一部分fbfheader主要包括每个模块的信息,比如imageid,checksum,newflashaddress,oldflashaddress,imagehandlestatus和length等,imageid对应模块id,checksum对应模块的校验和,在文件传输存储过程中起到数据的完整性保护,newflashaddress代表新固件的升级块需要写入终端的非易失性内存地址,oldflashaddress代表新固件的升级块依赖的旧固件所在的非易失性内存地址,length代表该升级块大小,imagehandlestatus代表image处理状态,用来记录image是否已经处理过。
s305,向所述终端发送所述固件升级文件,以使所述终端依次升级所述m个升级块。
至此,服务器已完成了结合新固件和旧固件生成基于差分的固件升级文件,服务器将所生成的固件升级文件发送到终端。下面将从终端角度再继续解释终端进行固件升级的过程。
参见图9,本公开实施例提供了一种空中升级固件的方法,应用于终端,所述方法包括:
s901,从服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数;
如图10所示,服务器生成固件升级文件后,终端通过网络从服务器下载所述固件升级文件,将固件升级文件保存到对应的非易失性内存中。为保证固件升级文件的完整性,还可以增设文件校验过程。
可选的,所述从服务器下载对应旧固件的固件升级文件到新固件存储区域的步骤之后,如图11所示,所述方法还可以包括:
s1101,解析所述固件升级文件,获得所述固件升级文件中的基准校验和以及每个升级块的图像内容;
s1102,根据每个升级块的图像内容,计算实际校验和;
s1103,判断所述实际校验和与所述基准校验和是否相同;
若所述实际校验和与所述基准校验和相同,则执行步骤s1104,确认所述固件升级文件无损,执行对所述旧固件的升级操作;
若所述实际校验和与所述基准校验和不相同,则执行步骤s1105,则确认所述固件升级文件受损,不执行对所述旧固件的升级操作。
终端从非易失性内存中读取并验证固件升级文件是否合法,文件有没有受损。具体的,解析fbf结构的固件升级文件,获取各个升级块的image内容,算出checksum值,然后跟fbfheader中的checksum进行对比,如果相同则说明文件是完好无损的,允许系统进行升级。反之文件受损,放弃升级。
s902,确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个;
s903,将所述目标升级块存放到临时存储区域;
s904,从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
根据本公开实施例的一种具体实现方式,所述确定当前待更新的目标升级块的步骤,包括:
确定当前待更新的全部升级块;
查询每个升级块对应的旧切割块的被依赖程度,其中,所述旧切割块的被依赖程度为所述旧切割块被其他升级块依赖升级的关系;
将被依赖度最小的升级块作为所述目标升级块。
可选的,为记录升级块的更新状态,终端内还可以设置升级状态表,存储在固定的非易失性内存区域。根据本公开实施例的一种具体实现方式,所述确定当前待更新的全部升级块的步骤,可以包括:
查询升级状态表中升级状态为未升级的全部升级块;
所述从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域的步骤之后,所述方法还可以包括:
在所述升级状态表中,清除所述升级块的升级状态,或者,更新所述目标升级块的升级状态为已升级。
接下来具体解释终端升级固件的过程,终端可以在开机上电后进入升级状态,也可以在下载完固件升级文件或者特定时刻进入升级状态。如图12所示,终端重启后,开机阶段会检测升级状态表,当允许升级时就会进入下面的升级流程。
1.读取固件升级文件,进行解析和校验,如果文件受损,选择放弃升级并更新升级状态表,即清除升级状态。
2.查询升级状态表,如果此时记录是还原的升级块没有拷贝到旧固件模块区域,需要从临时非易失性内存中读取升级块数据,继续重新覆盖旧固件模块区域,覆盖完成后更新状态记录表。
3.遍历剩下未处理的差分image。
4.确定一个未处理的差分image还原后更新的旧固件模块,再确定其他image是否依赖即将被更新的旧固件模块,如果有依赖关系则需要优先处理依赖的差分image。递归查询依赖关系,直到没有差分image依赖需要更新的旧模块。当差分image还原后需要更新imagehandlestatus状态。重复步骤3-4。
5.当所有固件模块区域升级完成后更新升级状态表,清除升级状态,终端在下次开机阶段就不需要再升级。
以图7生成的image1_1,image2_2,image3_2,image4_3,image5_0为例,继续解释终端升级过程。如图13a至图13f所示,首先处理image1_1,该image利用旧固件的第1个模块还原一个新固件第1个模块,此时没有其他差分image还原需要利用旧固件的第1个模块,所以可以直接把新固件的第1个模块更新到旧固件的第1个模块。更新过程是先把还原的新固件第1个模块写入临时非易失性内存,做好状态记录,然后再更新到旧固件的第1个模块,即使此时断电,开机后可以根据状态记录表和临时非易失性内存继续更新旧固件的第1个模块。
处理image2_2时,该image利用旧固件的第2个模块还原新固件第2个模块,因考虑还原的新固件需要写入旧固件的第2个模块,那么其他差分image依赖旧固件第2个模块的做差分还原的需要优先处理。所以在处理image2_2时需要先处理image3_2。同理,处理image3_2时需要先处理依赖旧固件第3个模块的差分image,所以需要先处理image4_3,此时没有其他固件模块的还原依赖旧固件第4个模块,所以可以将还原的新固件4写入临时非易失性内存,做好状态记录,然后再更新到旧固件的第4个模块,即使此时断电,开机后可以根据状态记录表和临时非易失性内存继续更新旧固件的第4个模块。
image5_0处理时,没有差分image依赖旧固件的第5个模块,因为0代表自身压缩,所以此时只需要将image5_0解压缩就得到新固件的第5个模块,将新固件5写入临时非易失性内存,做好状态记录,然后再更新到旧固件的第5个模块,即使此时断电,开机后依然可以根据状态记录表和临时非易失性内存继续更新旧固件的第5个模块。
通过上面步骤可以看到,临时非易失性内存存放生成新的固件模块,在升级过程中是重复使用,每次升级一个固件模块,新的固件模块都会存放在临时非易失性内存区域,这个区域只要保证能存放一个切割模块的大小,升级就可以完成。
对资源有限的终端来说,可以动态调整切割模块大小以及采用的非对称差分满足升级需求,降低了终端对非易失性内存的需求,大大降低了升级成本。降低了升级成本的同时利用升级状态表来解决掉电不能重启问题,只要终端开机首先都会先查询一下升级状态表,状态表里面记录了是否需要升级以及升级到哪个阶段的状态。
在非对齐差分处理过程中,如果出现输出差分结果相互依赖的关系,那么在差分还原时将不能还原新固件。比如image1_2、image2_3和image3_1这种情况,参考图7的还原过程,处理image1_2时因覆盖旧固件切割块1所以要先处理image3_1,而处理image3_1时因覆盖旧固件切割块3需要先处理image2_3,处理image2_3时因覆盖旧固件切割块2需要先处理image1_2,这样就出现了相互依赖。为了避免这种情况,在制作差分处理过程中需要做相互依赖检测,如果检测到相互依赖就终止一个切割块的依赖关系,比如让新固件的第3切割块依赖旧固件的切割块3,形成3_3,或让新固件的第3切割块块自行压缩形成3_0,避免相互依赖关系。一般升级固件出现这种相互依赖关系的概率是很低的,因为一个新固件,如图14a所示,要么是新增加了内容,如图14b所示,要么是减少了部分内容,而不会将原来后面的内容提前,也不会将前面的内容放在后面。如果确实存在那么采用依赖关系的检测终止依赖关系来解决该问题。
综上所述,通过使用切割固件和非差分办法,并利用状态升级表实现高可靠低成本的差分空中升级dfota。其具有如下优势:
1.针对不同的设备资源,特别是资源有限时,切割固件并重复利用临时非易失性内存降低了在解决掉电不能重启问题时的成本需求;利用非对称差分办法,实现了差分结果最优化处理,减少了储存差分文件的非易失性内存,实现一种新的低成本升级方法。
2.设计一种升级状态表,升级过程不断更新状态表,异常重启后由状态表控制升级流程,避免设备升级时异常,文件遭到破坏,设备无法启动问题,提高升级的可靠性。
此外,参见图15,本公开实施例还提供了一种终端,包括:
下载模块1501,用于从服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数;
确定模块1502,用于确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个;
存放模块1503,用于将所述目标升级块存放到临时存储区域;
读写模块1504,用于从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
图15所示的终端可以对应的执行上述图9所示的方法实施例中的内容,本实施例未详细描述的部分,参照上述方法实施例中记载的内容,在此不再赘述。
此外,参见图16,本公开实施例还提供了一种服务器160,包括:
获取模块1601,用于获取终端内待升级的旧固件,以及所述旧固件对应的新固件;
切割模块1602,用于按照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n;
处理模块1603,用于对每个新切割块与旧切割块做预处理,得到对应的升级块;
打包模块1604,用于将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块;
发送模块1605,用于向所述终端发送所述固件升级文件,以使所述终端依次升级所述m个升级块。
图16所示的服务器可以对应的执行上述图3所示的方法实施例中的内容,本实施例未详细描述的部分,参照上述方法实施例中记载的内容,在此不再赘述。
继续参见图2,本公开实施例还提供了一种空中升级固件的系统,包括终端201和服务器202;其中,
所述服务器202用于获取终端内待升级的旧固件,以及所述旧固件对应的新固件,照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n,对每个新切割块与旧切割块做预处理,得到对应的升级块,将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块,向所述终端发送所述固件升级文件;
所述终端201用于从所述服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数,确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个,将所述目标升级块存放到临时存储区域,从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
图2所示的系统可以对应的执行上述图1所示的方法实施例中的内容,本实施例未详细描述的部分,参照上述方法实施例中记载的内容,在此不再赘述。
参见图17,本公开实施例还提供了一种电子设备170,该电子设备包括:
至少一个处理器;以及,
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述方法实施例中的空中升级固件的方法。需要说明的是,电子设备可以为终端或者服务器。
本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述方法实施例中的空中升级固件的方法。
本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述方法实施例中的空中升级固件的方法。
下面参考图17,其示出了适于用来实现本公开实施例的电子设备170的结构示意图。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图17示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图17所示,电子设备170可以包括处理装置(例如中央处理器、图形处理器等)1701,其可以根据存储在只读存储器(rom)1702中的程序或者从存储装置1708加载到随机访问存储器(ram)1703中的程序而执行各种适当的动作和处理。在ram1703中,还存储有电子设备170操作所需的各种程序和数据。处理装置1701、rom1702以及ram1703通过总线1704彼此相连。输入/输出(i/o)接口1705也连接至总线1704。
通常,以下装置可以连接至i/o接口1705:包括例如触摸屏、触摸板、键盘、鼠标、图像传感器、麦克风、加速度计、陀螺仪等的输入装置1706;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置1707;包括例如磁带、硬盘等的存储装置1708;以及通信装置1709。通信装置1709可以允许电子设备170与其他设备进行无线或有线通信以交换数据。虽然图中示出了具有各种装置的电子设备170,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置1709从网络上被下载和安装,或者从存储装置1708被安装,或者从rom1702被安装。在该计算机程序被处理装置1701执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备能够实现上述方法实施例提供的方案。
或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备能够实现上述方法实施例提供的方案。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c ,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一获取单元还可以被描述为“获取至少两个网际协议地址的单元”。
应当理解,本公开的各部分可以用硬件、软件、固件或它们的组合来实现。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。
1.一种空中升级固件的方法,其特征在于,应用于终端,所述方法包括:
从服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数;
确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个;
将所述目标升级块存放到临时存储区域;
从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
2.根据权利要求1所述的方法,其特征在于,所述确定当前待更新的目标升级块的步骤,包括:
确定当前待更新的全部升级块;
查询每个升级块对应的旧切割块的被依赖程度,其中,所述旧切割块的被依赖程度为所述旧切割块被其他升级块依赖升级的关系;
将被依赖度最小的升级块作为所述目标升级块。
3.根据权利要求2所述的方法,其特征在于,所述确定当前待更新的全部升级块的步骤,包括:
查询升级状态表中升级状态为未升级的全部升级块;
所述从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域的步骤之后,所述方法还包括:
在所述升级状态表中,清除所述升级块的升级状态,或者,更新所述目标升级块的升级状态为已升级。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述从服务器下载对应旧固件的固件升级文件到新固件存储区域的步骤之后,所述方法还包括:
解析所述固件升级文件,获得所述固件升级文件中的基准校验和以及每个升级块的图像内容;
根据每个升级块的图像内容,计算实际校验和;
判断所述实际校验和与所述基准校验和是否相同;
若所述实际校验和与所述基准校验和相同,则确认所述固件升级文件无损,执行对所述旧固件的升级操作;
若所述实际校验和与所述基准校验和不相同,则确认所述固件升级文件受损,不执行对所述旧固件的升级操作。
5.一种空中升级固件的方法,其特征在于,应用于服务器,所述方法包括:
获取终端内待升级的旧固件,以及所述旧固件对应的新固件;
按照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n;
对每个新切割块与旧切割块做预处理,得到对应的升级块;
将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块;
向所述终端发送所述固件升级文件,以使所述终端依次升级所述m个升级块。
6.根据权利要求5所述的方法,其特征在于,所述对每个新切割块与旧切割块做预处理,得到对应的升级块的步骤,包括:
对所述新切割块与n个旧切割块中的每个旧切割块均做差分处理,得到所述新切割块与每个旧切割块的差分结果;
根据所述新切割块与每个旧切割块的差分结果,确定所述新切割块的最小差分结果,以及所述最小差分结果关联的目标切割块,其中,所述目标切割块为n个旧切割块的任一个;
根据所述新切割块的最小差分结果及所述最小差分结果关联的目标切割块,形成对应所述新切割块的升级块。
7.根据权利要求6所述的方法,其特征在于,所述根据所述新切割块与每个旧切割块的差分结果,确定所述新切割块的最小差分结果,以及所述最小差分结果关联的目标切割块的步骤之前,所述方法还包括:
将所述新切割块做压缩处理,作为所述新切割块与自身压缩文件的差分结果;
所述根据所述新切割块与每个旧切割块的差分结果,确定所述新切割块的最小差分结果,以及所述最小差分结果关联的目标切割块的步骤,包括:
根据所述新切割块与每个旧切割块的差分结果,以及所述新切割块与自身压缩文件的差分结果,确定所述新切割块的最小差分结果,以及,所述最小差分结果关联的目标切割块,其中,所述目标切割块为n个旧切割块和所述新切割块自身压缩文件的任一个。
8.根据权利要求5至7中任一项所述的方法,其特征在于,所述将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件的步骤,包括:
采用免费备份修复fbf文件结构处理方法,将m个升级文件进行组包处理,得到所述固件升级文件;其中,
所述固件升级文件的头部包括每个升级块的参数信息,所述固件升级文件的中部包括全部升级块的内容数据,每个升级块的参数信息至少包括所述升级块的标识、校验和、新升级块对应的待覆盖区域和所更新的旧切割块的存储区域中的任一项。
9.一种空中升级固件的方法,其特征在于,应用于空中升级固件的系统,所述系统包括服务器和终端;所述方法包括:
所述服务器获取终端内待升级的旧固件,以及所述旧固件对应的新固件,照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n,对每个新切割块与旧切割块做预处理,得到对应的升级块,将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块,向所述终端发送所述固件升级文件;
所述终端从所述服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数,确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个,将所述目标升级块存放到临时存储区域,从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
10.一种终端,其特征在于,包括:
下载模块,用于从服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数;
确定模块,用于确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个;
存放模块,用于将所述目标升级块存放到临时存储区域;
读写模块,用于从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
11.一种服务器,其特征在于,包括:
获取模块,用于获取终端内待升级的旧固件,以及所述旧固件对应的新固件;
切割模块,用于按照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n;
处理模块,用于对每个新切割块与旧切割块做预处理,得到对应的升级块;
打包模块,用于将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块;
发送模块,用于向所述终端发送所述固件升级文件,以使所述终端依次升级所述m个升级块。
12.一种空中升级固件的系统,其特征在于,包括终端和服务器;其中,
所述服务器用于获取终端内待升级的旧固件,以及所述旧固件对应的新固件,照预设切割尺寸对所述新固件和所述旧固件进行切割处理,得到对应所述新固件的m个新切割块及对应所述旧固件的n个旧切割块,其中,m和n均为正整数,m大于或者等于n,对每个新切割块与旧切割块做预处理,得到对应的升级块,将全部所述升级块按照预设格式打包成对应所述旧固件的固件升级文件,其中,所述固件升级文件包括m个升级块,向所述终端发送所述固件升级文件;
所述终端用于从所述服务器下载对应旧固件的固件升级文件到新固件存储区域,其中,所述固件升级文件包括m个升级块,m为正整数,确定当前待更新的目标升级块,以及确定所述目标升级块对应的待覆盖存储区域,其中,所述目标升级块为m个升级块中的任一个,将所述目标升级块存放到临时存储区域,从所述临时存储区域中读取所述目标升级块,写入所述待覆盖存储区域。
技术总结