一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

固件升级方法、装置、设备及存储介质与流程

2022-04-02 03:35:57 来源:中国专利 TAG:


1.本技术涉及智能电子产品领域,尤其涉及一种固件升级方法、装置、设备及存储介质。


背景技术:

2.随着科技的发展,各式各样的电子产品已经融入了人们的工作和日常生活当中。然而随着各类电子产品的更新和发布速度越来越快,难免会存在某些缺陷,或者是制造商研发出了更优良的功能需要更新到已经发布的电子产品上。
3.目前,电子产品可以通过在线固件升级的方式来修复终端使用中的一些缺陷,或者是通过固件升级来更新更具优势的功能。一般现有技术都是在网站上为每种类型的终端,或者是使用相同固件的多种终端发布与固件对应的固定大小的固件升级数据包,然后由用户自己下载固件升级数据包来进行固件升级,或者是由终端自动从网络下载升级。
4.但是,由于不同的终端其内部存储状态是不同的,无论是其本身固有的总存储容量,还是被用户使用后剩余的存储容量,都造成了不同的终端其存储状态的差异,这就导致固件升级时需要用到的存储容量超过了终端可以分配给固件升级的存储容量,从而造成固件升级失败。此时用户只能够选择删除部分数据来腾出足够的存储容量进行固件升级。这就严重影响了用户的使用体验。
5.因此,现有技术中存在固件升级方式升级灵活性较差,需要用户手动腾出存储空间或者是需要研发人员手动定制多种不同版本的升级数据包的技术问题。


技术实现要素:

6.本技术提供一种固件升级方法、装置、设备及存储介质,以解决现有技术中存在固件升级方式灵活性较差,需要用户手动腾出存储空间或者是需要研发人员手动定制多种不同版本的升级数据包的技术问题。
7.第一个方面,本技术提供一种固件升级方法,包括:获取一个或多个待升级终端的目标存储容量以及固件升级需求,目标存储容量为待升级终端在进行固件升级时临时存放升级数据的存储空间大小,升级数据是从固件升级包中解压出的;根据固件升级需求中各个待升级固件之间的功能关联程度确定解压粒度上限值,解压粒度上限值用于确定在固件升级时每次能从固件升级包中解压出来的最大数据量;根据固件升级需求、目标存储容量、预设压缩率以及解压粒度上限值,确定一个或多个固件升级包,以及各个固件升级包的传输方式和解压方式;根据传输方式向各个待升级终端传输对应的固件升级包,以使待升级终端根据解压方式以及固件升级包,分多次将一个或多个待升级固件升级为对应的目标固件。
8.在一种可能的设计中,根据固件升级需求中各个待升级固件之间的功能关联程度确定解压粒度上限值,包括:
判断各个待升级固件在待升级终端上能否配合完成同一个或多个功能;若两个或两个以上的待升级固件在待升级终端上配合完成同一个或多个功能,则将存在功能关联的各个待升级固件对应的升级数据集所占用的存储容量之和作为解压粒度上限值。
9.在一种可能的设计中,在判断各个待升级固件在待升级终端上能否配合完成同一个或多个功能之后,还包括:若否,则从各个升级数据集对应的各个存储容量中选出最大存储容量作为解压粒度上限值。
10.在一种可能的设计中,根据固件升级需求、目标存储容量、预设压缩率以及解压粒度上限值,确定一个或多个固件升级包,包括:根据固件升级需求中各个待升级固件的当前版本确定各个升级数据集的总数据量,升级数据集用于将待升级固件升级到目标版本,每个升级数据集与一个待升级固件相对应;根据预设压缩率对总数据量进行压缩,以确定压缩总数据量;判断压缩总数据量与解压粒度上限值之和是否大于目标存储容量;若是,则以升级数据集作为分包单元,根据预设压缩率以及预设分包要求,将所有分包单元打包成多个固件升级包;若否,则将所有升级数据集打包成一个固件升级包。
11.在一种可能的设计中,预设分包要求,包括:将具有功能关联的各个分包单元打包到同一个固件升级包中。
12.在一种可能的设计中,预设分包要求,包括:各个固件升级包所占存储空间的差值小于预设分包阈值。
13.在一种可能的设计中,以升级数据集作为分包单元,根据预设压缩率以及预设分包要求,将所有分包单元打包成多个固件升级包,包括:根据预设分包要求对各个分包单元进行分组,以确定预设数量个数据组,每个数据组对应一个固件升级包;根据预设压缩率以及在同一个数据组中的各个分包单元的数据量,确定各个固件升级包所占的存储空间;判断存储空间与解压粒度上限值之和是否大于目标存储容量;若是,则增大预设数量,并重新进行分组,直至存储空间与解压粒度上限值之和小于或等于目标存储容量;若否,则根据预设压缩率将各个数据组封装成各个固件升级包。
14.在一种可能的设计中,固件升级包中包括:至少一个升级数据集;待升级终端根据解压方式以及固件升级包,分多次将一个或多个待升级固件升级为对应的目标固件,包括:待升级终端根据解压粒度上限值将各个升级数据集分多次从固件升级包中解压出来,并存储到待升级终端的临时存储空间中,每次解压出来的所有升级数据集的存储容量之和小于或等于解压粒度上限值;其中,在每次从固件升级包中解压出一个或多个升级数据集时,同时将上一次解压出来的升级数据集从临时存储空间中删除,在待升级终端利用本次解压的一个或多个升
级数据集升级对应的待升级固件之后,再执行下一次解压,直至所有的待升级固件都升级为目标固件。
15.在一种可能的设计中,固件升级包中还包括:升级管理程序,在待升级终端根据解压粒度上限值将各个升级数据集分多次从固件升级包中解压出来之前,还包括:待升级终端将升级管理程序从固件升级包中解压出来,并存储到临时存储空间中,升级管理程序文件用于统一管理各个目标固件的升级过程。
16.在一种可能的设计中,获取一个或多个待升级终端的目标存储容量以及固件升级需求,包括:获取一个或多个待升级终端能够分配给固件升级使用的空闲存储容量以及固件升级需求;根据回滚文件的第一存储容量以及空闲存储容量确定目标存储容量,回滚文件用于在固件升级失败时将待升级固件回滚到原来的版本。
17.第二个方面,本技术提供一种固件升级装置,包括:获取模块,用于获取一个或多个待升级终端的目标存储容量以及固件升级需求,目标存储容量为待升级终端在进行固件升级时临时存放升级数据的存储空间大小,升级数据是从固件升级包中解压出的;处理模块,用于:根据固件升级需求中各个待升级固件之间的功能关联程度确定解压粒度上限值,解压粒度上限值用于确定在固件升级时每次能从固件升级包中解压出来的最大数据量;根据固件升级需求、目标存储容量、预设压缩率以及解压粒度上限值,确定一个或多个固件升级包,以及各个固件升级包的传输方式和解压方式;根据传输方式向各个待升级终端传输对应的固件升级包,以使待升级终端根据解压方式以及固件升级包,分多次将一个或多个待升级固件升级为对应的目标固件。
18.在一种可能的设计中,处理模块,用于:判断各个待升级固件在待升级终端上能否配合完成同一个或多个功能;若两个或两个以上的待升级固件在待升级终端上配合完成同一个或多个功能,则将存在功能关联的各个待升级固件对应的升级数据集所占用的存储容量之和作为解压粒度上限值。
19.在一种可能的设计中,处理模块,还用于:若否,则从各个升级数据集对应的各个存储容量中选出最大存储容量作为解压粒度上限值。
20.在一种可能的设计中,处理模块,用于:根据固件升级需求中各个待升级固件的当前版本确定各个升级数据集的总数据量,升级数据集用于将待升级固件升级到目标版本,每个升级数据集与一个待升级固件相对应;根据预设压缩率对总数据量进行压缩,以确定压缩总数据量;判断压缩总数据量与解压粒度上限值之和是否大于目标存储容量;若是,则以升级数据集作为分包单元,根据预设压缩率以及预设分包要求,将所有分包单元打包成多个固件升级包;
若否,则将所有升级数据集打包成一个固件升级包。
21.在一种可能的设计中,预设分包要求,包括:将具有功能关联的各个分包单元打包到同一个固件升级包中。
22.在一种可能的设计中,预设分包要求,包括:各个固件升级包所占存储空间的差值小于预设分包阈值。
23.在一种可能的设计中,处理模块,用于:根据预设分包要求对各个分包单元进行分组,以确定预设数量个数据组,每个数据组对应一个固件升级包;根据预设压缩率以及在同一个数据组中的各个分包单元的数据量,确定各个固件升级包所占的存储空间;判断存储空间与解压粒度上限值之和是否大于目标存储容量;若是,则增大预设数量,并重新进行分组,直至存储空间与解压粒度上限值之和小于或等于目标存储容量;若否,则根据预设压缩率将各个数据组封装成各个固件升级包。
24.在一种可能的设计中,固件升级包中包括:至少一个升级数据集;处理模块,用于:根据解压粒度上限值将各个升级数据集分多次从固件升级包中解压出来,并存储到待升级终端的临时存储空间中,每次解压出来的所有升级数据集的存储容量之和小于或等于解压粒度上限值;其中,在每次从固件升级包中解压出一个或多个升级数据集时,同时将上一次解压出来的升级数据集从临时存储空间中删除,在待升级终端利用本次解压的一个或多个升级数据集升级对应的待升级固件之后,再执行下一次解压,直至所有的待升级固件都升级为目标固件。
25.在一种可能的设计中,固件升级包中还包括:升级管理程序,处理模块,还用于:将升级管理程序从固件升级包中解压出来,并存储到临时存储空间中,升级管理程序文件用于统一管理各个目标固件的升级过程。
26.在一种可能的设计中,获取模块,还用于获取一个或多个待升级终端能够分配给固件升级使用的空闲存储容量以及固件升级需求;处理模块,还用于根据回滚文件的第一存储容量以及空闲存储容量确定目标存储容量,回滚文件用于在固件升级失败时将待升级固件回滚到原来的版本。
27.第三个方面,本技术提供一种电子设备,包括:存储器,用于存储程序指令;处理器,用于调用并执行所述存储器中的程序指令,执行第一方面所提供的任意一种可能的固件升级方法。
28.第四个方面,本技术提供一种存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序用于执行第一方面所提供的任意一种可能的固件升级方法。
29.第五个方面,本技术还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面所提供的任意一种可能的固件升级系统方法。
30.本技术提供了一种固件升级方法、装置、设备及存储介质,通过获取一个或多个待升级终端的目标存储容量以及固件升级需求,根据固件升级需求中各个待升级固件之间的
功能关联程度确定解压粒度上限值,该解压粒度上限值用于确定在固件升级时每次能从固件升级包中解压出来的最大数据量,根据固件升级需求、目标存储容量、预设压缩率以及解压粒度上限值,确定一个或多个固件升级包,以及各个固件升级包的传输方式和解压方式,根据传输方式向各个待升级终端传输对应的固件升级包,以使待升级终端根据解压方式以及固件升级包,分多次将一个或多个待升级固件升级为对应的目标固件。解决了现有技术中存在固件升级方式灵活性较差,需要用户手动腾出存储空间或者是需要研发人员手动定制多种不同版本的升级数据包的技术问题。自动根据每个待升级终端的存储空间来分配不同的固件升级方式,达到了有效减少固件升级所需存储空间,无需用户或研发人员手动参与即可自动调整升级方式,且提高了升级成功率和升级效率的技术效果。
附图说明
31.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
32.图1为本技术提供的一种固件升级方法的应用场景示意图;图2为本技术实施例提供的一种固件升级方法的流程示意图;图3为本技术实施例提供的另一种固件升级方法的流程示意图;图4为本技术实施例提供的一种固件升级装置的结构示意图;图5为本技术提供的一种电子设备的结构示意图。
33.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
34.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,包括但不限于对多个实施例的组合,都属于本技术保护的范围。
35.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
36.下面先对本技术所涉及到的专业名词作介绍:固件:指设备内部保存的设备“驱动程序”,通过固件,操作系统才能按照标准的设备驱动实现特定机器的运行动作。固件是担任着一个系统最基础最底层工作的软件。而在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组
成,因此固件也就决定着硬件设备的功能及性能。固件一般是写入eprom(可擦写可编程只读存储器)或eeprom(电可擦可编程只读存储器)中的程序。
37.at指令是应用于终端设备与pc应用之间的连接与通信的指令。at 即attention。每个at命令行中只能包含一条at指令;对于at指令的发送,除at两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。at指令集是从终端设备(terminal equipment,te)或数据终端设备(data terminal equipment,dte)向终端适配器(terminal adapter,ta)或数据电路终端设备(data circuit terminal equipment,dce)发送的。其对所传输的数据包大小有定义:即对于at指令的发送,除at两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。每个at命令行中只能包含一条at指令;对于由终端设备主动向pc端报告的urc指示或者response响应,也要求一行最多有一个,不允许上报的一行中有多条指示或者响应。at指令以回车作为结尾,响应或上报以回车换行为结尾。
38.由于不同的终端其内部存储状态是不同的,有些终端其本身固有的存储器的存储空间较大,而另一些终端其本身固有的存储器的存储空间较小,而如果固件升级所需要的空间较大时,很可能由于存储器的存储空间不足而造成升级失败。为了避免升级失败,或者说降低升级失败的可能性,现有技术一般通过以下三种方式来解决:第一种是增加终端的存储器(如eprom或eeprom)的存储空间大小,但是这样会大大增加终端的成本和售价;第二种是在下载固件升级包前检测存储器的剩余存储容量,在剩余存储容量不足时可以提醒用户结束某些进程来增加存储器的剩余存储容量,但是这就会导致用户必须中断正在进行的业务,流出专门的时间来进行固件升级,影响用户的使用体验感;第三种是对于某些存储器本身存储空间就较小的终端,让终端制造商的研发人员设置专门的固件升级方式,如进一步精简固件升级包中的数据,如使用差分处理,重复利用旧版本中与新版本相同的数据文件,从而减少固件升级包的大小,但是这就大大增加了研发人员的工作量,可能为了升级一个固件需要配置很多种不同版本的固件升级包,也会导致用户在手动下载时可能不知道应该下载哪个版本的固件升级包。
39.总的来说,上述现有技术的固件升级方式灵活性较差,需要用户手动腾出存储空间或者是需要研发人员手动定制多种不同版本的升级数据包的技术问题。
40.为解决上述的技术问题,本技术的发明构思是:在下载固件升级包前,首先根据待升级终端中能够供固件升级使用的存储容量,来对固件升级的所有数据进行容量评估,通过拆分多个固件升级包,将固件升级分成几次完成,每次仅对具有功能关联性的几个待升级固件进行升级。根据不同的待升级终端的存储容量,个性化自动决定分成几个固件升级包,每次从固件升级包中解压出多少数据,进一步地还可以根据是否需要配置升级失败时的回滚文件,和/或,升级管理程序来对固件升级中的各项事件进行管理。这样就使得固件升级包不再是单一的一个,或者几个,而是能够灵活变化的,并且也不需要研发人员预先构件多个固件升级包版本。采用此方法后,还可以批量化地对数据量庞大的各个终端的固件升级进行统一管理,简化了需要对大量的终端进行固件升级时的工作量。
41.下面对本技术如何实现通过触觉来传递信息进行详细介绍。
42.图1为本技术提供的一种固件升级方法的应用场景示意图。如图1所示,待升级终端10可以包括多个相同或不同的终端设备,如iot物联网设备、智能手机、智能手表、智能手
环等等,服务端20包括:云端服务器201以及个人电脑202中的任意一个。
43.在待升级终端10检测到存在需要升级的至少一个固件时,向服务端20上报其可用存储空间和固件升级需求。服务端20再根据这些数据自动为其分配打包个性化固件升级包。该这些固件升级包是可以根据每个待升级终端而动态变化的,并且实现了自动化管理固件升级,节省了人力物力。
44.图2为本技术实施例提供的一种固件升级方法的流程示意图。如图2所示,该固件升级方法的具体步骤,包括:s201、获取一个或多个待升级终端的目标存储容量以及固件升级需求。
45.在本步骤中,待升级终端包括:移动终端(如智能手机、智能手表、智能手环等)、iot(internet of things,物联网)终端等等,目标存储容量为待升级终端在进行固件升级时临时存放升级数据的存储空间大小,升级数据是从固件升级包中解压出的。
46.需要说明的是,本技术实施例所提供的固件升级方法,即可以针对一个待升级终端的固件升级,也可以针对多个或者说批量化的待升级终端的固件升级。该固件升级方法可以应用于pc(personal computer,个人电脑)端,也可以应用于云端服务器。
47.具体的,每个待升级固件在检测到需要对固件进行升级,或者是接收到了固件升级指令后,每个待升级终端根据自身的工作情况和工作状态为固件升级分配对应的存储器容量,如eprom或eeprom或其它内部存储器的空闲存储空间,并且将固件升级需求,即每个待升级终端中的一个或多个待升级固件的名称或编码,以及待升级固件的当前版本号,需要升级到的目标版本号等等发送给pc端或者云端服务器。
48.s202、根据固件升级需求中各个待升级固件之间的功能关联程度确定解压粒度上限值。
49.在本步骤中,解压粒度上限值用于确定在固件升级时每次能从固件升级包中解压出来的最大数据量。
50.可以先判断各个待升级固件在待升级终端上能否配合完成同一个或多个功能;若两个或两个以上的待升级固件在待升级终端上配合完成同一个或多个功能,则将存在功能关联的各个待升级固件对应的升级数据集所占用的存储容量之和作为解压粒度上限值。
51.具体的,pc端或者云端服务器先分析两个或两个以上的待升级固件之间是否具有功能关联关系,例如a固件和b固件共同配合完成待升级终端的某个功能,那么a固件和b固件之间就存在功能关联关系。
52.在一种可能的实现方式中,在pc端或者云端服务器的数据库中可以预先存放各种待升级设备中的功能与固件关联表,pc端或者云端服务器就可以根据此功能与固件关联表确定待升级固件之间是否具备功能关联,并且多个待升级固件之间与多个功能都有关联,或者说关联的功能数量越多,那么这些待升级固件间的关联程度就越高。
53.s203、根据固件升级需求、目标存储容量、预设压缩率以及解压粒度上限值,确定一个或多个固件升级包,以及各个固件升级包的传输方式和解压方式。
54.在本步骤中,预设压缩率是指数据压缩后所占的存储容量与压缩前的所占的存储容量之比。
55.具体的,首先判断各个待升级固件的目标升级版本的所有升级数据所占的初始存
储容量(即没有压缩时的数据量大小)是否大于目标存储容量。接下来根据判断结果会分成两个不同的处理方式:第一种处理方式:若初始存储容量小于目标存储容量,则继续判断目标存储容量是否大于或等于初始存储容量的两倍;若是,则证明此时目标存储容量足够大,那么此时可以将预设压缩率设置为1即不压缩,解压粒度上限值设置为初始存储容量,固件升级包数量为1,解压方式设置为每次解压时将全部数据一次解压出来,对应的传输方式是直接一次传输所有固件升级包;若否,则证明此时目标存储容量一般,此时预设压缩率可以先设置为第一压缩率,如50%,然后根据预设压缩率和初始存储容量计算压缩后的第一压缩容量,并判断第一压缩容量与初始存储容量之和是否小于或等于目标存储容量;若是,则以第一压缩率将升级数据打包成一个固件升级包,解压粒度上限值设置为初始存储容量,传输方式为直接一次传输所有固件升级包,解压方式设置为每次解压时将全部数据一次解压出来;若否,则又可以分成两个方向:第一个方向是:保持解压粒度上限值和固件升级包的数量不变,尝试减小预设压缩率,如从第一压缩率提高到第二压缩率,如40%,重复判断第一压缩容量与初始存储容量之和是否小于或等于目标存储容量,若是则直接生成一个固件升级包,并一次传输该固件升级包,若否,则重复减小预设压缩率,直至预设压缩率达到最小压缩值,如30%。
56.如果预设压缩率达到最小压缩值后,第一压缩容量与初始存储容量之和依然大于目标存储容量,那么就需要尝试第二个方向。
57.第二个方向是:将预设压缩率设置为最小压缩值,如30%,然后将固件升级包的数量从2开始增加,分包的原则是将有功能关联的多个待升级固件对应的升级数据分到同一个固件升级包中,并且每个待升级固件对应的升级数据不可拆分到不同的固件升级包中。接下来判断每个固件升级包的第二压缩容量与完全解压后的存储容量之和是否小于或等于目标存储容量,若是,则解压方式可以设置为一次解压固件升级包中所有的数据文件,若否,则可以将解压方式设置为,每次只从固件升级包中解压一部分数据文件,使得解压出来的数据所占存储容量和第二压缩容量之和不大于目标存储容量。这样就能够实现边解压边升级的同时,严格控制所使用的存储空间。在一个固件升级包的升级数据都使用完毕后,删除该固件升级包,再传输下一个固件升级包进行边解压边升级的操作。需要说明的是,根据上述方式确定的固件升级包的数量大于或等于2.第二种处理方式:若初始存储容量大于或等于目标存储容量,则直接按照上述的两个方向来设置固件升级包,及其传输方式、解压方式,在此不再赘述。
58.s204、根据传输方式向各个待升级终端传输对应的固件升级包,以使待升级终端根据解压方式以及固件升级包,分多次将一个或多个待升级固件升级为对应的目标固件。
59.在本步骤中,待升级终端根据解压粒度上限值将各个升级数据集分多次从固件升级包中解压出来,并存储到待升级终端的临时存储空间中,每次解压出来的所有升级数据
集的存储容量之和小于或等于解压粒度上限值;其中,在每次从固件升级包中解压出一个或多个升级数据集时,同时将上一次解压出来的升级数据集从临时存储空间中删除,在待升级终端利用本次解压的一个或多个升级数据集升级对应的待升级固件之后,再执行下一次解压,直至所有的待升级固件都升级为目标固件。
60.本实施例提供了一种固件升级系统方法,通过获取一个或多个待升级终端的目标存储容量以及固件升级需求,根据固件升级需求中各个待升级固件之间的功能关联程度确定解压粒度上限值,该解压粒度上限值用于确定在固件升级时每次能从固件升级包中解压出来的最大数据量,根据固件升级需求、目标存储容量、预设压缩率以及解压粒度上限值,确定一个或多个固件升级包,以及各个固件升级包的传输方式和解压方式,根据传输方式向各个待升级终端传输对应的固件升级包,以使待升级终端根据解压方式以及固件升级包,分多次将一个或多个待升级固件升级为对应的目标固件。解决了现有技术中存在固件升级方式灵活性较差,需要用户手动腾出存储空间或者是需要研发人员手动定制多种不同版本的升级数据包的技术问题。自动根据每个待升级终端的存储空间来分配不同的固件升级方式,达到了有效减少固件升级所需存储空间,无需用户或研发人员手动参与即可自动调整升级方式,且提高了升级成功率和升级效率的技术效果。
61.图3为本技术实施例提供的另一种固件升级方法的流程示意图。如图3所示,该固件升级方法的具体步骤包括:s301、获取一个或多个待升级终端能够分配给固件升级使用的空闲存储容量以及固件升级需求。
62.在本步骤中,待升级终端在检测到有固件需要升级时,或者是接收到云端服务器发送的固件升级指令后,根据自身的工作状态和存储器的使用情况,为固件升级分配空闲存储容量。固件升级需求则包括:待升级固件的名称、当前版本号和目标升级版本号。
63.s302、根据回滚文件的第一存储容量以及空闲存储容量确定目标存储容量。
64.在本步骤中,回滚文件用于在固件升级失败时将待升级固件回滚到原来的版本。为了避免升级过程中出现意外错误,造成升级失败,导致固件无法使用的情况,需要在升级的同时保证待升级设备的存储器中保存有待升级固件升级前的固件版本的数据文件,即回滚文件,因此回滚文件需要占据一定的存储容量。
65.用r
target
表示目标存储容量,用r
dis
表示分配的空闲存储容量,用r
back
表示回滚文件所占据的存储容量,则可以用公式(1)来表示三者之间的关系:
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)s303、判断各个待升级固件在待升级终端上能否配合完成同一个或多个功能。
66.在本步骤中,若是,则执行s304,若否,则执行s305。
67.s304、将存在功能关联的各个待升级固件对应的升级数据集所占用的存储容量之和作为解压粒度上限值。
68.在本步骤中,假设具有两个或两个以上的功能关联固件,则这两个固件的升级数据集之和占到了升级所用总数据量或者是单个固件升级包的存储容量的比例为,那么与总数据量或者单个固件升级包的存储容量的乘积即为解压粒度上限值。
69.需要说明的是,本步骤的作用是保证多个固件分多次升级时,各个固件之间的配合关系不会以为固件版本不匹配而造成预设功能无法实现,影响用户的使用体验。
70.在一种可能的设计中,为了简化固件升级数据,节省其占有的存储容量,可以选择对升级数据进行差分处理。所谓差分处理是指,使用差分算法脚本计算升级前版本和升级后版本的数据差异,只将差异部分作为升级数据。进一步的,由于差分后的数据量可能较小,因此可以不对差分后的升级数据集进行压缩,或者说将预设压缩率设置为1。
71.s305、从各个升级数据集对应的各个存储容量中选出最大存储容量作为解压粒度上限值。
72.s306、根据固件升级需求中各个待升级固件的当前版本确定各个升级数据集的总数据量。
73.在本步骤中,升级数据集用于将待升级固件升级到目标版本,每个升级数据集与一个待升级固件相对应。
74.由于每个待升级终端中可能存在多个模块,每个模块都有一个固件与之对应,以驱动该模块完成预设的功能,所以每个待升级终端中可能会有多个待升级固件,因此需要从固件升级需求中确定每个待升级固件的升级数据集,将所有这些升级数据集的总数据量表示所有未经压缩的升级数据所占的存储空间。其可以用公式(2)来表示:
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)其中,x表示总数据量,xn表示每个升级数据集所对应的数据量。
75.s307、根据预设压缩率对总数据量进行压缩,以确定压缩总数据量。
76.在本步骤中,假设预设压缩率为,那么压缩总数据量x
p
。可以用公式(3)来表示:
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)s308、判断压缩总数据量与解压粒度上限值之和是否大于目标存储容量。
77.在本步骤中,若是,则执行s309,若否,则执行s310。
78.具体的,在判断时可以用公式(4)来进行计算:
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)s309、以升级数据集作为分包单元,根据预设压缩率以及预设分包要求,将所有分包单元打包成多个固件升级包。
79.在本步骤中,预设分包要求,包括:(1)将具有功能关联的各个分包单元打包到同一个固件升级包中;(2)各个固件升级包所占存储空间的差值小于预设分包阈值。预设分包要求包括这两个要求中的至少一个。
80.在本实施例中,本步骤具体包括:根据预设分包要求对各个分包单元进行分组,以确定预设数量个数据组,每个数据组对应一个固件升级包;根据预设压缩率以及在同一个数据组中的各个分包单元的数据量,确定各个固件升级包所占的存储空间;判断存储空间与解压粒度上限值之和是否大于目标存储容量;若是,则增大预设数量,并重新进行分组,直至存储空间与解压粒度上限值之和小于或等于目标存储容量;
若否,则根据预设压缩率将各个数据组封装成各个固件升级包。
81.对于固件升级包的打包过程,其可以分为两次打包,具体如下:将差分目录(即差分处理后的升级数据)或压缩目录(即各个数据组)或整包目录(即所有升级数据只打一个固件升级包)进行打包,每个固件升级包格式为“包头信息 固件集”,包头信息主要为每个固件的说明信息和升级操作命令,固件集为每个固件和该固件crc值。该包命令为packet.bin,实际名称依据项目为准。
82.每个固件升级包第一次打包的具体打包格式,如表1所示:
表1表2为固件类型索引表:
表2需要说明的是,在本实施例中,在每个固件升级包中包括:至少一个升级数据集。并且当存在多个固件升级包时,在第一个传输给待升级终端的固件升级包中还包括升级管理程序,升级管理程序用于统一管理各个目标固件的升级过程。
83.第二次打包的过程就是将升级管理程序ota.bin与packet.bin合并为最终的固件升级包update_packet.bin。如表3所示:
表3s310、将所有升级数据集打包成一个固件升级包。
84.本步骤的实现可以参考s309,在此不再赘述。
85.s311、根据传输方式向各个待升级终端传输对应的固件升级包,以使待升级终端根据解压方式以及固件升级包,分多次将一个或多个待升级固件升级为对应的目标固件。
86.在本步骤中,待升级终端将升级管理程序从固件升级包中解压出来,并存储到临时存储空间中,然后,待升级终端根据解压粒度上限值将各个升级数据集分多次从固件升级包中解压出来,并存储到待升级终端的临时存储空间中,每次解压出来的所有升级数据集的存储容量之和小于或等于解压粒度上限值;
其中,在每次从固件升级包中解压出一个或多个升级数据集时,同时将上一次解压出来的升级数据集从临时存储空间中删除,在待升级终端利用本次解压的一个或多个升级数据集升级对应的待升级固件之后,再执行下一次解压,直至所有的待升级固件都升级为目标固件。
87.具体的,固件升级过程如下:1简单解包根据打包方式,解出ota.bin与packet.bin。
88.2 拆包解压固件或差分恢复首先对packet.bin包头进行解析,根据压缩包标志进行判断是否需要解压,如果是压缩包,则拆解出各个子固件后再进行单独解压到临时目录,解压后对固件进行crc校验,验证无误后得到升级包进行后面升级。
89.若是差分包则与原始备份包对比,进行差分恢复,恢复到临时目录。
90.3 升级所有固件拆分完成后,其临时目录包含主mcu boot固件,主mcu app系统固件,蓝牙固件,nfc固件,tp固件,gps固件等。注意,当使用压缩方式时,这里只拆解固件不拆解资源,整个升级包中,固件占用升级包的容量通常不到5%,固件升级无异常后才进行资源的拆解,这样做是为了支持小容量设备的升级失败回滚功能,当此步骤升级失败时,4 压缩方式再次拆解若打包方式是压缩而不是差分时,升级各个固件无误后,将临时文件夹中各个固件复制到备份目录,并继续拆解资源直接到备份目录。
91.5 升级结束若升级过程中某个固件升级失败,可根据升级包打包时的设置,设备端自动决定是否需要回滚回升级前的固件,确保产品的可用性。
92.若升级成功,则会将升级成功的固件进行备份,用作下一次升级失败时的回滚恢复。
93.需要说明的是,在一种可能的设计中,可以实时加载运行升级程序,即将ota(over-the-air technology,空中下载技术)升级程序ota.bin与升级包打包在一起,这样ota升级程序可在每次升级之前自由替换,简单解包解出来ota.bin后,系统重启,boot直接将ota.bin加载到ram中运行,这样可以使用最新的升级程序进行此次升级,避免不同版本间因版本变化较大的过渡包,且升级程序ota.bin稳定后几乎不会修改,能保证升级的稳定性。
94.还需要说明的是,对于小容量产品升级回滚机制,本技术的固件升级方法与现有技术的对比效果如下:因产品功能以及体验度要求的越来越高与成本控制相矛盾,这就要求在存储容量不变的情况下提升产品功能,升级包也会越来愈大。
95.例如,针对128mb的存储器,正常升级时,其设备内部要保留一套完整的升级包a用于回滚,外界传输过来的压缩包c,与压缩包解压后的包b,需要满足:a b c 《= 128mb若压缩率为30%,a与b相等,且大小为x,则:
a b c = x x 0.3x 《= 128mb可求得x约等于55mb,也就是说,针对存储器大小为128mb,在保证回滚功能的同时,其整包大小不能大于55mb,这就限制了产品的定义以及功能的添加或成本的控制。
96.下面讲述如何在保证升级稳定性(具有回滚功能)的同时,提升整包大小,仍依据128mb的存储器为例升级过程包括:1.升级时使用压缩方式打包,得到压缩包c(压缩率设30%),原始备份包为a;2.传输压缩包至设备,解包时只解出固件到临时目录b,设固件占升级包总容量5%;3.升级各个固件,若升级失败,则回滚备份目录的文件,若成功,继续;4.继续解包,解出剩余资源文件直接覆盖到备份目录,结束;若原始包a大小为x,则:a b c = x 0.05x 0.3x 《= 128mb可求得x约等于94mb,也就是说,针对存储器大小为128mb,在保证回滚功能的同时,其整包大小从之前的方案55mb,增加到94mb,这种方式对于成本的节省无疑是最大的。
97.本实施例提供了一种固件升级系统方法,通过获取一个或多个待升级终端的目标存储容量以及固件升级需求,根据固件升级需求中各个待升级固件之间的功能关联程度确定解压粒度上限值,该解压粒度上限值用于确定在固件升级时每次能从固件升级包中解压出来的最大数据量,根据固件升级需求、目标存储容量、预设压缩率以及解压粒度上限值,确定一个或多个固件升级包,以及各个固件升级包的传输方式和解压方式,根据传输方式向各个待升级终端传输对应的固件升级包,以使待升级终端根据解压方式以及固件升级包,分多次将一个或多个待升级固件升级为对应的目标固件。解决了现有技术中存在固件升级方式灵活性较差,需要用户手动腾出存储空间或者是需要研发人员手动定制多种不同版本的升级数据包的技术问题。自动根据每个待升级终端的存储空间来分配不同的固件升级方式,达到了有效减少固件升级所需存储空间,无需用户或研发人员手动参与即可自动调整升级方式,且提高了升级成功率和升级效率的技术效果。
98.对于上述两个实施例所提供的固件升级方法,其有益效果总结如下:本方案有以下优点:1. 可以根据需要自动识别并选择差分、压缩或者无操作的方式打包固件升级包。
99.2. 可以根据需要选择是否需要打包某个固件(如gps、nfc),待升级终端在解压固件升级包时,仅升级打包的固件。
100.3. 可以根据需要选择某个固件升级后是否重启系统。
101.4. 可以根据需要选择是否在设备中新建目录或删除某个目录或执行某个at指令。
102.5. 将ota升级程序与升级包打包在一起,这样ota升级程序可在每次升级之前自由替换,避免不同版本间的过渡包,且升级程序修改较少,防止应用程序修改对升级程序的影响(若将应用程序与升级程序放在一起,某个版本应用程序异常,会造成无法升级,系统变砖)。
103.6. 升级出现异常时,通过回滚设置,可回滚至升级前的固件。
104.7. 升级方式不依赖平台以及产品,可根据实际需要移植。
105.8. 本方案可以作为统一的标准化方案。
106.9. 可以对多子模块的产品进行整体的升级。
107.10.对于小容量设备,仍可实现升级失败时版本回退的功能。
108.图4为本技术实施例提供的一种固件升级装置的结构示意图。该固件升级装置400可以通过软件、硬件或者两者的结合实现。如图4所示,该固件升级装置400包括:获取模块401,用于获取一个或多个待升级终端的目标存储容量以及固件升级需求,目标存储容量为待升级终端在进行固件升级时临时存放升级数据的存储空间大小,升级数据是从固件升级包中解压出的;处理模块402,用于:根据固件升级需求中各个待升级固件之间的功能关联程度确定解压粒度上限值,解压粒度上限值用于确定在固件升级时每次能从固件升级包中解压出来的最大数据量;根据固件升级需求、目标存储容量、预设压缩率以及解压粒度上限值,确定一个或多个固件升级包,以及各个固件升级包的传输方式和解压方式;根据传输方式向各个待升级终端传输对应的固件升级包,以使待升级终端根据解压方式以及固件升级包,分多次将一个或多个待升级固件升级为对应的目标固件。
109.在一种可能的设计中,处理模块402,用于:判断各个待升级固件在待升级终端上能否配合完成同一个或多个功能;若两个或两个以上的待升级固件在待升级终端上配合完成同一个或多个功能,则将存在功能关联的各个待升级固件对应的升级数据集所占用的存储容量之和作为解压粒度上限值。
110.在一种可能的设计中,处理模块402,还用于:若否,则从各个升级数据集对应的各个存储容量中选出最大存储容量作为解压粒度上限值。
111.在一种可能的设计中,处理模块402,用于:根据固件升级需求中各个待升级固件的当前版本确定各个升级数据集的总数据量,升级数据集用于将待升级固件升级到目标版本,每个升级数据集与一个待升级固件相对应;根据预设压缩率对总数据量进行压缩,以确定压缩总数据量;判断压缩总数据量与解压粒度上限值之和是否大于目标存储容量;若是,则以升级数据集作为分包单元,根据预设压缩率以及预设分包要求,将所有分包单元打包成多个固件升级包;若否,则将所有升级数据集打包成一个固件升级包。
112.在一种可能的设计中,预设分包要求,包括:将具有功能关联的各个分包单元打包到同一个固件升级包中。
113.在一种可能的设计中,预设分包要求,包括:各个固件升级包所占存储空间的差值小于预设分包阈值。
114.在一种可能的设计中,处理模块402,用于:根据预设分包要求对各个分包单元进行分组,以确定预设数量个数据组,每个数
据组对应一个固件升级包;根据预设压缩率以及在同一个数据组中的各个分包单元的数据量,确定各个固件升级包所占的存储空间;判断存储空间与解压粒度上限值之和是否大于目标存储容量;若是,则增大预设数量,并重新进行分组,直至存储空间与解压粒度上限值之和小于或等于目标存储容量;若否,则根据预设压缩率将各个数据组封装成各个固件升级包。
115.在一种可能的设计中,固件升级包中包括:至少一个升级数据集;处理模块402,用于:根据解压粒度上限值将各个升级数据集分多次从固件升级包中解压出来,并存储到待升级终端的临时存储空间中,每次解压出来的所有升级数据集的存储容量之和小于或等于解压粒度上限值;其中,在每次从固件升级包中解压出一个或多个升级数据集时,同时将上一次解压出来的升级数据集从临时存储空间中删除,在待升级终端利用本次解压的一个或多个升级数据集升级对应的待升级固件之后,再执行下一次解压,直至所有的待升级固件都升级为目标固件。
116.在一种可能的设计中,固件升级包中还包括:升级管理程序,处理模块402,还用于:将升级管理程序从固件升级包中解压出来,并存储到临时存储空间中,升级管理程序文件用于统一管理各个目标固件的升级过程。
117.在一种可能的设计中,获取模块401,还用于获取一个或多个待升级终端能够分配给固件升级使用的空闲存储容量以及固件升级需求;处理模块402,还用于根据回滚文件的第一存储容量以及空闲存储容量确定目标存储容量,回滚文件用于在固件升级失败时将待升级固件回滚到原来的版本。
118.值得说明的是,图4所示实施例提供的装置,可以执行上述任一方法实施例中所提供的方法,其具体实现原理、技术特征、专业名词解释以及技术效果类似,在此不再赘述。
119.图5为本技术实施例提供的一种电子设备的结构示意图。如图5所示,该电子设备500,可以包括:至少一个处理器501和存储器502。图5示出的是以一个处理器为例的电子设备。
120.存储器502,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。
121.存储器502可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
122.处理器501用于执行存储器502存储的计算机执行指令,以实现以上各方法实施例所述的方法。
123.其中,处理器501可能是一个中央处理器(central processing unit,简称为cpu),或者是特定集成电路(application specific integrated circuit,简称为asic),或者是被配置成实施本技术实施例的一个或多个集成电路。
124.可选地,存储器502既可以是独立的,也可以跟处理器501集成在一起。当所述存储
器502是独立于处理器501之外的器件时,所述电子设备500,还可以包括:总线503,用于连接所述处理器501以及所述存储器502。总线可以是工业标准体系结构(industry standard architecture,简称为isa)总线、外部设备互连(peripheral component, pci)总线或扩展工业标准体系结构(extended industry standard architecture, eisa)总线等。总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。
125.可选的,在具体实现上,如果存储器502和处理器501集成在一块芯片上实现,则存储器502和处理器501可以通过内部接口完成通信。
126.本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-only memory ,rom)、随机存取存储器(random access memory,ram)、磁盘或者光盘等各种可以存储程序代码的介质,具体的,该计算机可读存储介质中存储有程序指令,程序指令用于上述各方法实施例中的方法。
127.本技术实施例还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的方法。
128.应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求书来限制。
129.最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献