1.本技术涉及固件升级技术领域,特别涉及升级固件的方法和电子设备。
背景技术:2.在现有的安卓(android)ab系统中,进行android ab升级时,要求所有待升级固件都要有a和b两个分区,以后缀_a或者_b的形式存在(如boot_a和boot_b)。在进行双分区(ab)升级时,如果当前运行的系统位于a slot,则将固件升级到b slot,反之亦然。
3.而在实际的场景中,即使是ab系统,有些固件也是非ab的(即只有一个实际的分区),比如与芯片rom直接关联的一级启动引导程序通常是非ab的,因为rom通常不实现ab逻辑,因此它的分区只有一个。
4.同时有些场景为了节省空间的考虑,对系统中的关键分区采用ab分区,非关键分区采用非ab的形式(如logo/resource等资源分区)。在这些场景情况下,当需要对非ab固件进行升级时,现有的ab系统升级方法无法实现。
技术实现要素:5.本技术提供了升级固件的方法和电子设备,其能够使得在ab系统中针对仅有一个分区的非ab固件也可以进行升级。
6.在第一方面,提供一种升级固件的方法。所述方法包括:将具有非双分区形式的固件放入单独的子固件升级包;将包含所述固件的所述子固件升级包升级至设备分区表中的一对保留固件包分区中的保留固件包分区;以及响应于子固件升级包指令对存储在所述保留固件包分区中的所述子固件升级包进行升级。
7.在一些实施例中,将包含所述固件的所述子固件升级包升级至设备分区表中的一对保留固件包分区中的保留固件包分区包括:制作包含所述子固件升级包的第一镜像文件,并将所述第一镜像文件存放至系统固件的主升级包中;将所述主升级包以新的系统固件版本号存放至服务器;以及响应于双分区升级指令,将所述第一镜像文件升级至所述保留固件包分区。
8.在一些实施例中,将所述第一镜像文件升级至所述保留固件包分区包括:响应于双分区升级指令,判断当前的保留固件包分区中是否存在按照预设规则命名的子固件升级包,若存在,则删除所述子固件升级包;以及根据所述主升级包,通过双分区升级将所述第一镜像文件升级至所述保留固件包分区。
9.在一些实施例中,响应于子固件升级包指令对存储在所述保留固件包分区中的所述子固件升级包进行升级包括:判断所述保留固件包分区中是否存在按照预设规则进行命名的子固件升级包,若不存在,则退出非双分区固件升级;若存在,判断预定路径下是否存在非双分区固件升级结果标记文件,若存在则根据所述升级结果标记文件判断升级结果,若升级成功,则执行第一操作,所述第一操作包括:删除保留固件包分区中预定名称的子固件升级包、删除该标记文件中子固件升级包路径中的子固件升级包、删除预定路径下的非
ab固件升级结果标记文件,然后退出非ab固件升级服务。
10.在一些实施例中,若升级失败,检测是否继续,若不继续,则执行第一操作;若继续,则检测当前双分区系统是否升级成功,若升级不成功,休眠预定时间后继续查询;若升级成功,则对子固件升级包进行校验,若校验通过,设置待升级的子固件升级包路径为所述保留固件包分区中按预设规则命名的子固件升级包的路径,在设备的引导通信分区的预定位置写入针对非双分区固件进行升级的预设的子固件升级包指令和待升级的子固件升级包路径。
11.在一些实施例中,响应于子固件升级包指令对存储在所述保留固件包分区中的所述子固件升级包进行升级还包括:若不存在非双分区固件升级结果标记文件,则检测当前双分区系统是否升级成功,若升级不成功,休眠预定时间后继续查询;若升级成功,则对子固件升级包进行校验,若校验通过,设置待升级的子固件升级包路径为所述保留固件包分区中按预设规则命名的子固件升级包的路径,在设备的引导通信分区的预定位置写入针对非双分区固件进行升级的预设的子固件升级包指令和待升级的子固件升级包路径。
12.在一些实施例中,还包括:步骤s1:解析引导通信分区的预定位置,获取针对非双分区固件进行升级的预设的子固件升级包指令和待升级的子固件升级包路径;步骤s2:根据待升级的子固件升级包路径中的第一级路径名在升级模式中查找该挂载点对应的物理块设备节点,检查该物理块设备节点是否存在,若存在,设置待挂载的物理块设备节点为找到的对应物理块设备节点,并执行步骤s3,若该物理块设备节点不存在,从命令行参数中获取当前的位置,并在该物理块设备节点添加该位置作为后缀,再次检查添加后缀后的物理块设备节点是否存在,若存在,设置待挂载的物理块设备节点为添加后缀之后的对应物理块设备节点,并执行步骤s3,否则出错,设置升级结果为失败,并执行步骤s4;步骤s3:创建第一级路径名指明的挂载点,并将待挂载的物理块设备节点挂载到该新建的挂载点,根据待升级的子固件升级包路径获取对应的子固件升级包,对子固件升级包进行校验,若校验失败,提示子固件升级包校验出错,设置升级结果为失败;否则对子固件升级包中的固件进行升级,升级结束后,设置升级结果为成功或者失败;步骤s4:在预定路径下创建非双分区固件升级结果标记文件,并往该标记文件写入升级结果和待升级的子固件升级包路径,清除引导通信分区预定位置中的针对非双分区固件进行升级的特殊升级指令和待升级的子固件升级包路径,设备重启,进入系统。
13.在一些实施例中,将包含所述固件的所述子固件升级包升级至设备分区表中的一对保留固件包分区中的保留固件包分区包括:通过预定算法生成公私钥对,使用所述私钥对所述子固件升级包进行签名,并存放所述公钥至双分区系统固件的特定路径及双分区系统中包含升级模式的固件的特定路径中;所述若升级成功,则对子固件升级包进行校验包括:若升级成功,则使用双分区系统固件的特定路径下的子固件升级包公钥对子固件升级包进行校验;所述步骤s3中的对子固件升级包进行校验包括:使用升级模式的固件的特定路径中的子固件升级包公钥对子固件升级包进行校验。
14.在一些实施例中,还包括:在设备分区表中增加所述一对保留固件包分区;制作与所述一对保留固件包分区中的所述保留固件包分区相对应的第二二进制镜像文件,并烧录所述第二二进制镜像文件至所述保留固件包分区。
15.在第二方面,提供一种电子设备。所述电子设备包括存储器,被配置为存储指令
集;以及处理器,被配置为执行上述提及的固件升级的方法。
16.对于ab系统中的不存在ab两个分区的非ab固件,通过本技术示出的固件升级的方法,一样可以在ab系统中实现非ab固件的升级。
17.上述发明内容相关记载仅是本技术技术方案的概述,为了让本领域普通技术人员能够更清楚地了解本技术的技术方案,进而可以依据说明书的文字及附图记载的内容予以实施,并且为了让本技术的上述目的及其它目的、特征和优点能够更易于理解,以下结合本技术的具体实施方式及附图进行说明。
附图说明
18.附图仅用于示出本技术具体实施方式以及其他相关内容的原理、实现方式、应用、特点以及效果等,并不能认为是对本技术的限制。在附图中:
19.图1是示出根据本公开的实施例的固件升级的方法的流程图一;
20.图2是示出根据本公开的实施例的根据不同的升级结果执行不同操作的流程图;
21.图3是示出根据本公开的实施例的设备进入固件升级模式后的流程图;
22.图4是示出根据本公开的实施例的固件升级的方法的总体流程示意图;
23.图5是示出根据本公开的实施例的电子设备的模块示意图。
具体实施方式
24.为详细说明本技术可能的应用场景,技术原理,可实施的具体方案,能实现目的与效果等,以下结合所列举的具体实施例并配合附图详予说明。本文所记载的实施例仅用于更加清楚地说明本技术的技术方案,因此只作为示例,而不能以此来限制本技术的保护范围。
25.在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中各个位置出现的“实施例”一词并不一定指代相同的实施例,亦不特别限定其与其它实施例之间的独立性或关联性。原则上,在本技术中,只要不存在技术矛盾或冲突,各实施例中所提到的各项技术特征均可以以任意方式进行组合,以形成相应的可实施的技术方案。
26.除非另有定义,本文所使用的技术术语的含义与本技术所属技术领域的技术人员通常理解的含义相同;本文中对相关术语的使用只是为了描述具体的实施例,而不是旨在限制本技术。
27.在本技术的描述中,用语“和/或”是一种用于描述对象之间逻辑关系的表述,表示可以存在三种关系,例如a和/或b,表示:存在a,存在b,以及同时存在a和b这三种情况。另外,本文中字符“/”一般表示前后关联对象是一种“或”的逻辑关系。
28.在本技术中,诸如“第一”和“第二”之类的用语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何实际的数量、主次或顺序等关系。
29.在没有更多限制的情况下,在本技术中,语句中所使用的“包括”、“包含”、“具有”或者其他类似的表述,意在涵盖非排他性的包含,这些表述并不排除在包括所述要素的过程、方法或者产品中还可以存在另外的要素,从而使得包括一系列要素的过程、方法或者产
品中不仅可以包括那些限定的要素,而且还可以包括没有明确列出的其他要素,或者还包括为这种过程、方法或者产品所固有的要素。
30.在本技术中,“大于”、“小于”、“超过”等表述理解为不包括本数;“以上”、“以下”、“以内”等表述理解为包括本数。此外,在本技术实施例的描述中“多个”的含义是两个以上(包括两个),与之类似的与“多”相关的表述亦做此类理解,例如“多组”、“多次”等,除非另有明确具体的限定。
31.如上述背景技术中所提及的在ab系统中,因非ab固件(即只有一个分区的固件)无法进行升级。故此亟需一个方法来解决该问题。本技术中通过自设计的固件升级的方法用以解决上述技术问题。需要说明的是,本技术的固件升级的方法针对的是ab系统中与ab固件不存在依赖耦合关系的非ab固件的升级。在本文中,非ab固件可以被称为非双分区形式的固件,ab升级可以被称为双分区升级,ab系统可以被称为双分区系统。
32.图1是示出根据本公开的实施例的固件升级的方法100的流程图。如图1所示,该方法100包括步骤s101至步骤s103。
33.在步骤s101中,将具有非双分区形式的固件放入单独的子固件升级包。
34.在步骤s102中,将包含所述固件的所述子固件升级包升级至设备分区表中的一对保留固件包分区中的保留固件包分区。
35.在一些实施例中,在该步骤之前,可以在设备分区表中增加所述一对保留固件包分区,如在设备分区表中增加一个ab分区,称为保留固件包分区a和保留固件包分区b(如reserved_loader_a和reserved_loader_b)。保留固件包分区用于保存独立的非ab分区的固件升级包。制作与所述一对保留固件包分区中的所述保留固件包分区相对应的第二二进制镜像文件,并在设备出厂时,烧录所述第二二进制镜像文件至所述保留固件包分区。
36.在以上操作好后,在上述步骤中,制作包含所述子固件升级包的第一镜像文件,并将所述第一镜像文件存放至系统固件的主升级包中;将所述主升级包以新的系统固件版本号存放至服务器;以及响应于双分区升级指令,将所述第一镜像文件升级至所述保留固件包分区。
37.在本实施例中,为将待升级的非ab分区形式的固件放入一个独立的子固件升级包,该子固件升级包按照预设规则进行命名,如对该子固件升级包按照预定的名称进行命名(如update_loader.zip)。子固件升级包中的非ab固件需和系统中的ab固件不存在依赖耦合关系(如一级启动引导程序固件loader和logo/resource等资源固件)。然后制作一个针对保留固件包分区的包含上述子固件升级包文件(如update_loader.zip)的具有文件系统的二进制镜像文件(即第一镜像文件)。
38.修改系统固件的版本号,在制作包含系统固件的主升级包时,将上述制作的针对保留固件包分区的第一镜像文件一起放入同一个主升级包,用于ab升级引擎将对应的第一镜像文件升级到对应的保留固件包分区。主升级包中针对保留固件包分区的升级镜像总是完整的,保留固件包分区的升级镜像不使用差异。主升级包使用新的系统固件版本号进行命名,放入fota服务器。
39.响应于双分区升级指令,判断当前的保留固件包分区中是否存在按照预设规则命名的子固件升级包,若存在,则删除所述子固件升级包;以及根据所述主升级包,通过双分区升级将所述第一镜像文件升级至所述保留固件包分区。如:当fota ab客户端运行时,根
据当前的系统固件版本号到fota服务器查询是否有新的固件要升级。当有新的固件需要升级时:
40.a、首先检查当前的保留固件包分区中是否存在按照预设规则命名的子固件升级包,如果存在,则删除该保留固件包分区中预定名称的子固件升级包。
41.b、然后根据主升级包,使用ab升级引擎进行ab固件升级,在此过程中将上述制作的针对保留固件包分区的二进制镜像文件升级到对应的保留固件包分区。
42.在将包含非ab固件的子固件升级包升级至保留固件包分区后,设备重启,引导设备进入升级后的系统,并挂载所述保留固件包分区。接下来开启针对非ab分区形式的固件升级服务(如non_ab_update_service),具体过程在以下步骤s103中展开说明。
43.在步骤s103中,响应于子固件升级包指令对存储在所述保留固件包分区中的所述子固件升级包进行升级。首先判断所述保留固件包分区中是否存在按照预设规则进行命名的子固件升级包,若不存在,则退出非双分区固件升级。
44.若存在,判断预定路径下是否存在非双分区固件升级结果标记文件(如/cache/non_ab_update_flag),若存在则根据所述升级结果标记文件判断升级结果,若升级成功,则执行第一操作,所述第一操作包括:删除保留固件包分区中预定名称的子固件升级包、删除该标记文件中子固件升级包路径中的子固件升级包、删除预定路径下的非ab固件升级结果标记文件,然后退出非ab固件升级服务。
45.若不存在非双分区固件升级结果标记文件,则检测当前双分区系统是否升级成功。具体地,在一些实施例中,通过ab的boot_ctrl hal获取当前slot(如getcurrentslot),然后查询当前slot是否标记为ab升级成功(如isslotmarkedsuccessful)。如果查询结果表明ab升级尚未成功(如isslotmarkedsuccessful不为真),则休眠预定时间(如sleep(5))后继续查询。如果查询结果表明ab升级已经成功,则对子固件升级包进行校验,若校验通过,设置待升级的子固件升级包路径为所述保留固件包分区中按预设规则命名的子固件升级包的路径(如/reserved_loader/update_loader.zip),在设备的引导通信分区的预定位置写入针对非ab固件进行升级的预设的子固件升级包指令和待升级的子固件升级包路径。
46.随后,设备重启,引导设备进入固件升级模式(如recovery)。
47.图2示出根据本公开的实施例根据所述升级结果标记文件判断升级不成功后的的流程图。
48.在步骤s201中,若升级失败,检测是否继续,若不继续,则执行第一操作。
49.在步骤s202中,若继续,则检测当前双分区系统是否升级成功,若升级不成功,休眠预定时间后继续查询。具体为:通过ab的boot_ctrl hal获取当前slot(如getcurrentslot),然后查询当前slot是否标记为ab升级成功(如isslotmarkedsuccessful)。如果查询结果表明ab升级尚未成功(如isslotmarkedsuccessful不为真),则休眠预定时间(如sleep(5))后继续查询。
50.在步骤s203中,若升级成功,则对子固件升级包进行校验,若校验通过,设置待升级的子固件升级包路径为所述保留固件包分区中按预设规则命名的子固件升级包的路径,在设备的引导通信分区的预定位置写入针对非双分区固件进行升级的预设的子固件升级包指令和待升级的子固件升级包路径(如recovery)。
51.在设备的启动引导程序中,在命令行参数中加入当前slot标记(如
androidboot.slot_suffix=_b),引导设备进入固件升级模式(如recovery模式)。
52.图3是示出根据本公开的实施例的设备进入固件升级模式后的流程图。
53.在步骤s301中,解析引导通信分区的预定位置,获取针对非双分区固件进行升级的预设的子固件升级包指令和待升级的子固件升级包路径。
54.在步骤s302中,根据待升级的子固件升级包路径中的第一级路径名在升级模式(如recovery)中查找该挂载点对应的物理块设备节点(如/dev/block/by-name/reserved_loader),检查该物理块设备节点是否存在,若存在,设置待挂载的物理块设备节点为找到的对应物理块设备节点,并执行步骤s303,若该物理块设备节点不存在,从命令行参数中获取当前的位置(slot),并在该物理块设备节点添加该位置(slot)作为后缀(如/dev/block/by-name/reserved_loader_b),再次检查添加后缀后的物理块设备节点是否存在,若存在,设置待挂载的物理块设备节点为添加后缀之后的对应物理块设备节点(如/dev/block/by-name/reserved_loader_b),并执行步骤s303,否则出错,设置升级结果为失败,并执行步骤s304。
55.在步骤s303中,创建第一级路径名指明的挂载点,并将待挂载的物理块设备节点挂载到该新建的挂载点,根据待升级的子固件升级包路径获取对应的子固件升级包,对子固件升级包进行校验,若校验失败,提示子固件升级包校验出错,设置升级结果为失败;否则对子固件升级包中的固件进行升级,升级结束后,设置升级结果为成功或者失败。
56.在步骤s304中,在预定路径下创建非双分区固件升级结果标记文件(如/cache/non_ab_update_flag),并往该标记文件写入升级结果和待升级的子固件升级包路径,清除引导通信分区预定位置中的针对非双分区固件进行升级的特殊升级指令和待升级的子固件升级包路径,设备重启,进入系统。
57.在本实施例中,将包含所述固件的所述子固件升级包升级至设备分区表中的一对保留固件包分区中的保留固件包分区包括:通过预定算法生成公私钥对,使用所述私钥对所述子固件升级包进行签名,并存放所述公钥至双分区系统固件的特定路径及双分区系统中包含升级模式的固件的特定路径中。
58.在步骤s203中的所述若升级成功,则对子固件升级包进行校验包括:若升级成功,则使用双分区系统固件的特定路径下的子固件升级包公钥对子固件升级包进行校验。
59.在步骤s303中的对子固件升级包进行校验包括:使用升级模式的固件的特定路径中的子固件升级包公钥对子固件升级包进行校验。
60.对于ab系统中的不存在ab两个分区的非ab固件,通过本技术示出的固件升级的方法,一样可以在ab系统中实现非ab固件的升级。
61.以上整体的固件升级方法流程示意图可参阅图4。图4是示出根据本公开的实施例的固件升级的方法的总体流程示意图。
62.在图4中,设备分区表中增加一个a/b分区,即两个物理分区,称为保留固件包分区a和保留固件包分区b。
63.制作一个针对“保留固件包分区”的不包含任何内容的具有文件系统的二进制镜像文件,并在设备出厂时,将制作的二进制镜像烧写到“保留固件包分区”的a和b物理分区中。
64.将待升级的非a/b分区形式的固件放入一个独立的子固件升级包,对该子固件升
级包按照预定的名称进行命名。使用预定的数字签名算法生成公钥/私钥对,使用私钥对子固件升级包进行签名,并将对应的公钥放入a/b系统固件的特定路径和a/b系统中包含升级模式的固件的特定路径中。
65.制作一个针对“保留固件包分区”的包含子固件升级包文件的具有文件系统的二进制镜像文件。
66.修改系统固件的版本号,在制作包含系统固件的主升级包时,将制作的针对“保留固件包分区”的二进制镜像文件一起放入同一个主升级包。主升级包使用新的系统固件版本号进行命名,放入fota服务器。
67.fota a/b客户端运行时,根据当前的系统固件版本号到fota服务器查询是否有新的固件要升级。当有新的固件需要升级时,首先检查当前的保留固件包分区中是否存在预定名称的子固件升级包,如果存在,则删除该保留固件包分区中预定名称的子固件升级包。然后根据主升级包,使用a/b升级引擎进行a/b固件升级,在此过程中将制作的针对“保留固件包分区”的二进制镜像文件升级到对应的保留固件包分区。
68.a/b升级完成后,设备重启,引导设备进入升级后的系统,并挂载对应的保留固件包分区。
69.开启针对非a/b分区形式的固件升级服务。
70.判断保留固件包分区中预定名称的子固件升级包是否存在,若保留固件包分区中预定名称的子固件升级包存在,判断预定路径下是否存在非ab固件升级结果标记文件,若保留固件包分区中预定名称的子固件升级包不存在,退出非ab固件升级服务,若预定路径下存在非ab固件升级结果标记文件,则判定标记文件中的升级结果是否成功,若标记文件中的升级结果成功,则删除保留固件包分区中预定名称的子固件升级包、删除该标记文件中子固件升级包路径中的子固件升级包、删除预定路径下的非ab固件升级结果标记文件,接着退出非ab固件升级服务,若预定路径下不存在非ab固件升级结果标记文件,则通过a/b的boot_ctrl hal获取当前slot,后判断当前slot是否标记为a/b升级成功,若标记文件中的升级结果不成功,则判定是否继续,若继续,则则通过a/b的boot_ctrl hal获取当前slot,后判断当前slot是否标记为a/b升级成功,若不继续,则退出非ab固件升级服务。若当前slot不标记为a/b升级成功,则休眠预定时间后继续判断当前slot是否标记为a/b升级成功,若当前slot标记为a/b升级成功,则使用a/b系统固件特定路径下的子固件升级包公钥对子固件升级包进行校验。判断校验是否成功,若不成功,则退出非ab固件升级服务,若成功,设置待升级的子固件升级包路径为保留固件包分区中预定名称的子固件升级包的路径。在设备的引导通信分区的预定位置写入针对非ab固件进行升级的特殊升级指令和待升级的子固件升级包路径。
71.设备重启,在设备的启动引导程序中,在命令行参数中加入当前slot标记,引导设备进入固件升级模式。在固件升级模式中,解析引导通信分区的预定位置,获取针对非ab固件进行升级的特殊升级指令和待升级的子固件升级包路径。根据待升级的子固件升级包路径中的第一级路径名在升级模式的fstab中查找该挂载点对应的物理块设备节点。判断该物理块设备节点是否存在,若物理课设备节点存在,则设置待挂载的物理块设备节点为找到的对应物理块设备节点,创建第一级路径名指明的挂载点,并将待挂载的物理块设备节点挂载到该新建的挂载点,根据待升级的子固件升级包路径获取对应的子固件升级包,使
用升级模式特定路径下的子固件升级包公钥对子固件升级包进行校验,判断是否校验成功,若成功,对子固件升级包中的固件进行升级,升级结束后,设置升级结果为成功或者失败,在预定路径下创建非ab固件升级结果标记文件,同时往该标记文件写入升级结果和待升级的子固件升级包路径。清除引导通信分区预定位置中的针对非ab固件进行升级的特殊升级指令和待升级的子固件升级包路径,重启设备。若不成功,设置升级结果为失败。
72.若物理块设备节点不存在,则从命令行参数中获取当前的slot,并在该物理块设备节点添加该slot作为后缀。判断添加后缀后的物理块设备节点是否存在,若加后缀后的物理块设备节点存在,则设置待挂载的物理块设备节点为找到的对应物理块设备节点,创建第一级路径名指明的挂载点,并将待挂载的物理块设备节点挂载到该新建的挂载点,根据待升级的子固件升级包路径获取对应的子固件升级包,使用升级模式特定路径下的子固件升级包公钥对子固件升级包进行校验,判断是否校验成功,若成功,对子固件升级包中的固件进行升级,升级结束后,设置升级结果为成功或者失败,在预定路径下创建非ab固件升级结果标记文件,同时往该标记文件写入升级结果和待升级的子固件升级包路径。清除引导通信分区预定位置中的针对非ab固件进行升级的特殊升级指令和待升级的子固件升级包路径,重启设备。若加后缀后的物理块设备节点不存在,则设置升级结果为失败,在预定路径下创建非ab固件升级结果标记文件,同时往该标记文件写入升级结果和待升级的子固件升级包路径。清除引导通信分区预定位置中的针对非ab固件进行升级的特殊升级指令和待升级的子固件升级包路径,重启设备。
73.图5是示出根据本公开的实施例的电子设备500的模块示意图。所述电子设备500包括但不限于:网络设备、嵌入式设备、可编程设备、智能移动终端等。如图5所示,电子设备500包括存储器501和处理器502。存储器502被配置为存储指令集。处理器502被配置为执行上述提及的固件升级方法中的任意步骤。
74.以上电子设备500在ab系统的情况下,即便是只有一个分区的固件一样可以实现固件升级。
75.最后需要说明的是,尽管在本技术的说明书文字及附图中已经对上述各实施例进行了描述,但并不能因此限制本技术的专利保护范围。凡是基于本技术的实质理念,利用本技术说明书文字及附图记载的内容所作的等效结构或等效流程替换或修改产生的技术方案,以及直接或间接地将以上实施例的技术方案实施于其他相关的技术领域等,均包括在本技术的专利保护范围之内。
技术特征:1.一种升级固件的方法,其特征在于,包括:将具有非双分区形式的固件放入单独的子固件升级包;将包含所述固件的所述子固件升级包升级至设备分区表中的一对保留固件包分区中的保留固件包分区;以及响应于子固件升级包指令对存储在所述保留固件包分区中的所述子固件升级包进行升级。2.根据权利要求1所述的方法,其特征在于,将包含所述固件的所述子固件升级包升级至设备分区表中的一对保留固件包分区中的保留固件包分区包括:制作包含所述子固件升级包的第一镜像文件,并将所述第一镜像文件存放至系统固件的主升级包中;将所述主升级包以新的系统固件版本号存放至服务器;以及响应于双分区升级指令,将所述第一镜像文件升级至所述保留固件包分区。3.根据权利要求2所述的方法,其特征在于,将所述第一镜像文件升级至所述保留固件包分区包括:响应于双分区升级指令,判断当前的保留固件包分区中是否存在按照预设规则命名的子固件升级包,若存在,则删除所述子固件升级包;以及根据所述主升级包,通过双分区升级将所述第一镜像文件升级至所述保留固件包分区。4.根据权利要求1所述的方法,其特征在于,响应于子固件升级包指令对存储在所述保留固件包分区中的所述子固件升级包进行升级包括:判断所述保留固件包分区中是否存在按照预设规则进行命名的子固件升级包,若不存在,则退出非双分区固件升级;若存在,判断预定路径下是否存在非双分区固件升级结果标记文件,若存在则根据所述升级结果标记文件判断升级结果,若升级成功,则执行第一操作,所述第一操作包括:删除保留固件包分区中预定名称的子固件升级包、删除该标记文件中子固件升级包路径中的子固件升级包、删除预定路径下的非ab固件升级结果标记文件,然后退出非ab固件升级服务。5.根据权利要求4所述的方法,其特征在于,还包括:若升级失败,检测是否继续,若不继续,则执行所述第一操作;若继续,则检测当前双分区系统是否升级成功,若升级不成功,休眠预定时间后继续查询;若升级成功,则对子固件升级包进行校验,若校验通过,设置待升级的子固件升级包路径为所述保留固件包分区中按预设规则命名的子固件升级包的路径,在设备的引导通信分区的预定位置写入针对非双分区固件进行升级的预设的子固件升级包指令和待升级的子固件升级包路径。6.根据权利要求4所述的方法,其特征在于,响应于子固件升级包指令对存储在所述保留固件包分区中的所述子固件升级包进行升级还包括:若不存在非双分区固件升级结果标记文件,则检测当前双分区系统是否升级成功,若升级不成功,休眠预定时间后继续查询;
若升级成功,则对子固件升级包进行校验,若校验通过,设置待升级的子固件升级包路径为所述保留固件包分区中按预设规则命名的子固件升级包的路径,在设备的引导通信分区的预定位置写入针对非双分区固件进行升级的预设的子固件升级包指令和待升级的子固件升级包路径。7.根据权利要求5或6所述的方法,其特征在于,还包括:步骤s1:解析引导通信分区的预定位置,获取针对非双分区固件进行升级的预设的子固件升级包指令和待升级的子固件升级包路径;步骤s2:根据待升级的子固件升级包路径中的第一级路径名在升级模式中查找该挂载点对应的物理块设备节点,检查该物理块设备节点是否存在,若存在,设置待挂载的物理块设备节点为找到的对应物理块设备节点,并执行步骤s3,若该物理块设备节点不存在,从命令行参数中获取当前的位置,并在该物理块设备节点添加该位置作为后缀,再次检查添加后缀后的物理块设备节点是否存在,若存在,设置待挂载的物理块设备节点为添加后缀之后的对应物理块设备节点,并执行步骤s3,否则出错,设置升级结果为失败,并执行步骤s4;步骤s3:创建第一级路径名指明的挂载点,并将待挂载的物理块设备节点挂载到该新建的挂载点,根据待升级的子固件升级包路径获取对应的子固件升级包,对子固件升级包进行校验,若校验失败,提示子固件升级包校验出错,设置升级结果为失败;否则对子固件升级包中的固件进行升级,升级结束后,设置升级结果为成功或者失败;步骤s4:在预定路径下创建非双分区固件升级结果标记文件,并往该标记文件写入升级结果和待升级的子固件升级包路径,清除引导通信分区预定位置中的针对非双分区固件进行升级的特殊升级指令和待升级的子固件升级包路径,设备重启,进入系统。8.根据权利要求7所述的方法,其特征在于,将包含所述固件的所述子固件升级包升级至设备分区表中的一对保留固件包分区中的保留固件包分区包括:通过预定算法生成公私钥对,使用所述私钥对所述子固件升级包进行签名,并存放所述公钥至双分区系统固件的特定路径及双分区系统中包含升级模式的固件的特定路径中;所述若升级成功,则对子固件升级包进行校验包括:若升级成功,则使用双分区系统固件的特定路径下的子固件升级包公钥对子固件升级包进行校验;所述步骤s3中的对子固件升级包进行校验包括:使用升级模式的固件的特定路径中的子固件升级包公钥对子固件升级包进行校验。9.根据权利要求1至8中任一项所述的方法,其特征在于,还包括:在设备分区表中增加所述一对保留固件包分区;制作与所述一对保留固件包分区中的所述保留固件包分区相对应的第二二进制镜像文件,并烧录所述第二二进制镜像文件至所述保留固件包分区。10.一种电子设备,其特征在于,包括:存储器,被配置为存储指令集;以及处理器,被配置为执行所述指令集以执行根据权利要求1至9中任一项所述的方法。
技术总结本申请涉及固件升级技术领域,特别涉及一种固件升级的方法和电子设备。所述一种固件升级的方法,包括:通过AB升级将包含非AB固件的子固件升级包升级至保留固件包分区;通过预设的子固件升级包指令对存储在所述保留固件包分区中的非AB固件的子固件升级包进行升级。对于AB系统中的不存在AB两个分区的非AB固件,通过以上方法,一样可以在AB系统中实现非AB固件的升级。的升级。的升级。
技术研发人员:纪大峣
受保护的技术使用者:瑞芯微电子股份有限公司
技术研发日:2022.03.28
技术公布日:2022/7/5