一种基于UBOOT的SPL回滚方法及装置、存储介质、终端转让专利

申请号 : CN202110899519.8

文献号 : CN113590388B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王哲

申请人 : 厦门紫光展锐科技有限公司

摘要 :

本发明提供了一种基于UBOOT的SPL回滚方法及装置、存储介质、终端,该SPL回滚方法包括:读取终端的MISC分区,获取终端的OTA升级信息;解析所获取的OTA升级信息,判断是否完成OTA升级;如果判断结果为OTA升级失败,则使用SPL备分区中的数据替换SPL主分区中的数据,并重启终端,完成SPL回滚;如果判断结果为OTA升级成功,则无需进行SPL回滚。使用UBOOT对MISC分区的A/B分区的识别特性,在OTA升级后及时对是否能够正常开机进行检测,并在检测到OTA升级失败后,及时对SPL主备分区的读写,使用SPL备分区中的数据替换SPL主分区中的数据,并重启终端,以达到对SPL进行回滚的目的。防止出现因SPL主分区和SPL备分区不一致而导致终端启动失败,从而防止因IMG的不兼容而导致终端无法开机。

权利要求 :

1.一种基于UBOOT的SPL回滚方法,其特征在于,包括:读取终端的MISC分区,获取所述终端的OTA升级信息;

解析所获取的OTA升级信息,判断是否完成OTA升级;

如果判断结果为OTA升级失败,则使用SPL备分区中的数据替换SPL主分区中的数据,并重启所述终端,完成SPL回滚;

如果判断结果为OTA升级成功,则无需进行SPL回滚;

其中,所述读取终端的MISC分区,获取所述终端的OTA升级信息包括:读取所述终端的MISC分区,获取所述终端的SLOT‑A分区信息和SLOT‑B分区信息;

所述解析所获取的OTA升级信息,判断是否完成OTA升级包括:解析所述SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,判断所述SLOT‑A分区和SLOT‑B分区的优先级;

将优先级较高的SLOT分区对应的SPL分区作为所述SPL主分区,将优先级较低的SLOT分区对应的SPL分区作为所述SPL备分区;

根据所述SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,判断所述SPL主分区是否损坏;

如果所述SPL主分区损坏,则判断结果为OTA升级失败;

如果所述SPL主分区未损坏,则判断结果为OTA升级成功。

2.如权利要求1所述的SPL回滚方法,其特征在于,所述判断结果为OTA升级失败时,在所述使用SPL备分区中的数据替换SPL主分区中的数据之前,所述SPL回滚方法还包括:切换所述SLOT‑A分区和SLOT‑B分区的标志位,以调换所述SLOT‑A分区和SLOT‑B分区的优先级;

将切换后的所述SLOT‑A分区和SLOT‑B分区的标志位,重新存放到所述MISC分区。

3.一种基于UBOOT的SPL回滚装置,其特征在于,包括:读取模块,用于读取终端的MISC分区,获取所述终端的OTA升级信息;

解析判断模块,用于解析所获取的OTA升级信息,判断是否完成OTA升级;

读写替换模块,用于在所述解析判断模块的判断结果为OTA升级失败时,使用SPL备分区中的数据替换SPL主分区中的数据;

重启模块,用于在使用SPL备分区中的数据替换SPL主分区中的数据之后,重启所述终端,完成SPL回滚;

其中,所述读取模块用于读取所述终端的MISC分区,获取所述终端的SLOT‑A分区信息和SLOT‑B分区信息;

所述解析判断模块包括:

解析单元,用于解析所述SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,判断所述SLOT‑A分区和SLOT‑B分区的优先级;

SPL分区确定单元,用于将优先级较高的SLOT分区对应的SPL分区作为所述SPL主分区,将优先级较低的SLOT分区对应的SPL分区作为所述SPL备分区;

判断单元,用于根据所述SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,判断所述SPL主分区是否损坏;所述判断单元还用于在所述SPL主分区损坏时,输出判断结果为OTA升级失败;在所述SPL主分区未损坏时,输出判断结果为OTA升级成功。

4.如权利要求3所述的SPL回滚装置,其特征在于,还包括:切换模块,用于判断结果为OTA升级失败时,在所述使用SPL备分区中的数据替换SPL主分区中的数据之前,切换所述SLOT‑A和SLOT‑B分区的标志位,以调换所述SLOT‑A分区和SLOT‑B分区的优先级;

所述切换模块还用于将切换后的所述SLOT‑A分区和SLOT‑B分区的标志位,重新存放到所述MISC分区。

5.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1~2任一项所述的SPL回滚方法。

6.一种终端,其特征在于,包括:

如权利要求5所述的计算机可读存储介质;

处理器,用于执行所述计算机可读存储介质中的所述计算机程序,以实现如权利要求1~2任一项所述的SPL回滚方法。

说明书 :

一种基于UBOOT的SPL回滚方法及装置、存储介质、终端

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种基于UBOOT的SPL回滚方法及装置、存储介质、终端。

背景技术

[0002] VBA(Visual Basic宏语言)架构的分区在通过OTA(Over‑the‑Air Technology,空中下载技术)升级之后,可能会遇到升级失败或出错导致无法正常启动的现象。在出现OTA升级失败现象后,所有分区都会进行到旧分区的回滚。但是现有技术中由于SPL(Secondary program loader,第二阶段应用加载程序)的加载是依靠ROMCODE(芯片内部启动代码),ROMCODE中并没有支持OTA代码。所以无法通过修改ROMCODE的方式使SPL进行回滚。最终导致SPL主分区没有实现回滚,其他分区成功回滚,从而可能因SPL主分区和SPL备分区不一致而导致终端启动失败。在遇到SPL大改动,并且也需要OTA进行升级的时候,可能会因为IMG(一种文件压缩格式)的不兼容而导致终端无法开机。

发明内容

[0003] 本发明提供了一种基于UBOOT(系统引导程序)的SPL回滚方法及装置、存储介质、终端,用以在OTA升级失败后,及时进行SPL回滚,防止出现因SPL主分区和SPL备分区不一致而导致终端启动失败,从而防止因IMG的不兼容而导致终端无法开机。
[0004] 第一方面,本发明提供了一种基于UBOOT的SPL回滚方法,该SPL回滚方法包括:读取终端的MISC分区(安卓系统(Android)上主要的六个分区中的其中一个分区),获取终端的OTA升级信息;解析所获取的OTA升级信息,判断是否完成OTA升级;如果判断结果为OTA升级失败,则使用SPL备分区中的数据替换SPL主分区中的数据,并重启终端,完成SPL回滚;如果判断结果为OTA升级成功,则无需进行SPL回滚。
[0005] 在上述的方案中,使用UBOOT对MISC分区的A/B分区的识别特性,在OTA升级后及时对是否能够正常开机进行检测,并在检测到OTA升级失败后,及时对SPL主备分区的读写,使用SPL备分区中的数据替换SPL主分区中的数据,并重启终端,以达到对SPL进行回滚的目的。从而在OTA升级失败后,及时进行SPL回滚,防止出现因SPL主分区和SPL备分区不一致而导致终端启动失败,从而防止因IMG的不兼容而导致终端无法开机。
[0006] 在一个具体的实施方式中,读取终端的MISC分区,获取终端的OTA升级信息包括:读取终端的MISC分区,获取终端的SLOT‑A(一种周边元件扩展插槽类型)分区信息和SLOT‑B(一种周边元件扩展插槽类型)分区信息。以使UBOOT利用SLOT‑A分区和SLOT‑B分区的识别特性,解析OTA升级是否成功。
[0007] 在一个具体的实施方式中,解析所获取的OTA升级信息,判断是否完成OTA升级包括:解析SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性(一种表征SLOT分区状态的日志),判断SLOT‑A分区和SLOT‑B分区的优先级;将优先级较高的SLOT分区对应的SPL分区作为SPL主分区,将优先级较低的SLOT分区对应的SPL分区作为SPL备分区;根据SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,判断SPL主分区是否损坏;如果SPL主分区损坏,则判断结果为OTA升级失败;如果SPL主分区未损坏,则判断结果为OTA升级成功。以便于确定SPL分区是否需要进行SPL回滚、以及哪个SPL分区进行SPL回滚。
[0008] 在一个具体的实施方式中,判断结果为OTA升级失败时,在使用SPL备分区中的数据替换SPL主分区中的数据之前,该SPL回滚方法还包括:切换SLOT‑A分区和SLOT‑B分区的标志位,以调换SLOT‑A分区和SLOT‑B分区的优先级;将切换后的SLOT‑A分区和SLOT‑B分区的标志位,重新存放到MISC分区。通过切换两个SLOT分区的优先级标志位,以防止再次进入回滚。
[0009] 第二方面,本发明还提供了一种基于UBOOT的SPL回滚装置,该SPL回滚装置包括:读取模块、解析判断模块、读写替换模块、重启模块。其中,读取模块用于读取终端的MISC分区,获取终端的OTA升级信息;解析判断模块用于解析所获取的OTA升级信息,判断是否完成OTA升级;读写替换模块用于在解析判断模块的判断结果为OTA升级失败时,使用SPL备分区中的数据替换SPL主分区中的数据;重启模块用于在使用SPL备分区中的数据替换SPL主分区中的数据之后,重启终端,完成SPL回滚。
[0010] 在上述的方案中,使用UBOOT对MISC分区的A/B分区的识别特性,在OTA升级后及时对是否能够正常开机进行检测,并在检测到OTA升级失败后,及时对SPL主备分区的读写,使用SPL备分区中的数据替换SPL主分区中的数据,并重启终端,以达到对SPL进行回滚的目的。从而在OTA升级失败后,及时进行SPL回滚,防止出现因SPL主分区和SPL备分区不一致而导致终端启动失败,从而防止因IMG的不兼容而导致终端无法开机。
[0011] 在一个具体的实施方式中,读取模块用于读取终端的MISC分区,获取终端的SLOT‑A分区信息和SLOT‑B分区信息。以使UBOOT利用SLOT‑A分区和SLOT‑B分区的识别特性,解析OTA升级是否成功。
[0012] 在一个具体的实施方式中,解析判断模块包括:解析单元、SPL分区确定单元、判断单元。其中,解析单元用于解析SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,判断SLOT‑A分区和SLOT‑B分区的优先级。SPL分区确定单元用于将优先级较高的SLOT分区对应的SPL分区作为SPL主分区,将优先级较低的SLOT分区对应的SPL分区作为SPL备分区。判断单元用于根据SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,判断SPL主分区是否损坏;判断单元还用于在SPL主分区损坏时,输出判断结果为OTA升级失败;在所SPL主分区未损坏时,输出判断结果为OTA升级成功。以便于确定SPL分区是否需要进行SPL回滚、以及哪个SPL分区进行SPL回滚。
[0013] 在一个具体的实施方式中,该SPL回滚装置还包括切换模块。该切换模块用于判断结果为OTA升级失败时,在使用SPL备分区中的数据替换SPL主分区中的数据之前,切换SLOT‑A和SLOT‑B分区的标志位,以调换SLOT‑A分区和SLOT‑B分区的优先级;切换模块还用于将切换后的SLOT‑A分区和SLOT‑B分区的标志位,重新存放到MISC分区。通过切换两个SLOT分区的优先级标志位,以防止再次进入回滚。
[0014] 第三方面,本发明还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任意一种SPL回滚方法。
[0015] 第四方面,本发明还提供了一种终端,该终端包括上述的计算机可读存储介质、以及处理器。其中,处理器用于执行计算机可读存储介质中的计算机程序,以实现上述任意一种SPL回滚方法。

附图说明

[0016] 图1为本发明实施例提供的一种基于UBOOT的SPL回滚方法的流程图;
[0017] 图2为本发明实施例提供的另一种基于UBOOT的SPL回滚方法的流程图。

具体实施方式

[0018] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0019] 为了方便理解本发明实施例提供的基于UBOOT的SPL回滚方法,下面首先说明一下本发明实施例提供的SPL回滚方法的应用场景,该SPL回滚方法应用于对运行在终端上的操作系统或应用程序进行OTA升级过程中,其中的终端可以为手机、平板电脑、笔记本电脑、台式电脑等。下面结合附图对该SPL回滚方法进行详细的叙述。
[0020] 参考图1,本发明实施例提供的基于UBOOT的SPL回滚方法包括:
[0021] Step10:读取终端的MISC分区,获取终端的OTA升级信息;
[0022] Step20:解析所获取的OTA升级信息,判断是否完成OTA升级;
[0023] Step30:如果判断结果为OTA升级失败,则使用SPL备分区中的数据替换SPL主分区中的数据,并重启终端,完成SPL回滚;
[0024] Step40:如果判断结果为OTA升级成功,则无需进行SPL回滚。
[0025] 在上述的方案中,使用UBOOT对MISC分区的A/B分区的识别特性,在OTA升级后及时对是否能够正常开机进行检测,并在检测到OTA升级失败后,及时对SPL主备分区的读写,使用SPL备分区中的数据替换SPL主分区中的数据,并重启终端,以达到对SPL进行回滚的目的。从而在OTA升级失败后,及时进行SPL回滚,防止出现因SPL主分区和SPL备分区不一致而导致终端启动失败,从而防止因IMG的不兼容而导致终端无法开机。下面结合附图对上述各个步骤进行详细的介绍。
[0026] 首先,如图1所示,读取终端的MISC分区,获取终端的OTA升级信息。读取终端的MISC分区可以通过使用UBOOT进行读取。参考图2,所获取终端的OTA升级信息可以为:通过读取终端的MISC分区,获取终端的SLOT‑A分区信息和SLOT‑B分区信息。以使UBOOT利用SLOT‑A分区和SLOT‑B分区的识别特性,解析OTA升级是否成功。
[0027] 接下来,如图1所示,解析所获取的OTA升级信息,判断是否完成OTA升级,以在OTA升级后及时对是否能够正常开机进行检测。具体解析OTA升级信息,判断是否完成OTA升级时,所解析的是SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,根据解析出的verify_corrupted和tries_remaining属性,判断SLOT‑A分区和SLOT‑B分区的优先级。之后,将优先级较高的SLOT分区对应的SPL分区作为SPL主分区,将优先级较低的SLOT分区对应的SPL分区作为SPL备分区。参考图2,再根据SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,判断SPL主分区是否损坏。如果SPL主分区损坏,则判断结果为OTA升级失败。如果SPL主分区未损坏,则判断结果为OTA升级成功。以便于确定SPL分区是否需要进行SPL回滚、以及哪个SPL分区进行SPL回滚。
[0028] 参考图2,在具体判断过程中,根据解析出的SLOT‑A分区信息和SLOT‑B分区信息,能够获取到SLOT‑A分区和SLOT‑B分区是处于激活状态(Active),还是处于去激活状态(Disactive),同时还能够获取到rb_slot,以解析出不同的结果。如图2所示,如果解析出SLOT‑A分区和SLOT‑B分区都没有损坏,则说明无需进行SPL回滚,走正常流程即可。如果获取到SLOT‑A分区和SLOT‑B分区中的一个SLOT分区不是处于激活状态(即处于去激活状态),则同样走正常流程即可。当然,如果识别出处于激活状态的SLOT分区损坏了,则就确定了需要进行SPL回滚,同时也确定将两个SLOT分区中优先级较高的SLOT分区对应的SPL主分区进行回滚,即也就确定了需要进行SPL回滚的SPL分区。
[0029] 参考图1及图2,如果判断结果为OTA升级失败,则使用SPL备分区中的数据替换SPL主分区中的数据,即读取作为SPL备分区(如图2所示出的SPL_BAK)的数据,并写入到SPL主分区中。之后,重启终端,完成SPL回滚。即将SPL备分区中的数据复制到SPL主分区中,并替换掉SPL主分区中的数据。当然,如果判断结果为OTA升级成功,则无需进行SPL回滚。如图2所示,可能会出现写入失败的情形,则需要返回报错,形成报错日志,以便于后续检查出错位置及出错原因。
[0030] 另外,参考图2,在判断结果为OTA升级失败时,在使用SPL备分区中的数据替换SPL主分区中的数据之前,可以切换SLOT‑A分区和SLOT‑B分区的标志位,以调换SLOT‑A分区和SLOT‑B分区的优先级,将原来优先级较低的SLOT分区的优先级提高,将原来优先级较高的SLOT分区的优先级降低。之后,将切换后的SLOT‑A分区和SLOT‑B分区的标志位,重新存放到MISC分区,以便于后续重启时,从MISC分区中读取相关信息,进行SPL回滚。通过切换两个SLOT分区的优先级标志位,交换两个SLOT分区的属性,并写入MISC分区中,以防止再次进入回滚。
[0031] 通过使用UBOOT对MISC分区的A/B分区的识别特性,在OTA升级后及时对是否能够正常开机进行检测,并在检测到OTA升级失败后,及时对SPL主备分区的读写,使用SPL备分区中的数据替换SPL主分区中的数据,并重启终端,以达到对SPL进行回滚的目的。从而在OTA升级失败后,及时进行SPL回滚,防止出现因SPL主分区和SPL备分区不一致而导致终端启动失败,从而防止因IMG的不兼容而导致终端无法开机。
[0032] 另外,本发明实施例还提供了一种基于UBOOT的SPL回滚装置,该SPL回滚装置包括:读取模块、解析判断模块、读写替换模块、重启模块。其中,读取模块用于读取终端的MISC分区,获取终端的OTA升级信息;解析判断模块用于解析所获取的OTA升级信息,判断是否完成OTA升级;读写替换模块用于在解析判断模块的判断结果为OTA升级失败时,使用SPL备分区中的数据替换SPL主分区中的数据;重启模块用于在使用SPL备分区中的数据替换SPL主分区中的数据之后,重启终端,完成SPL回滚。
[0033] 在上述的方案中,使用UBOOT对MISC分区的A/B分区的识别特性,在OTA升级后及时对是否能够正常开机进行检测,并在检测到OTA升级失败后,及时对SPL主备分区的读写,使用SPL备分区中的数据替换SPL主分区中的数据,并重启终端,以达到对SPL进行回滚的目的。从而在OTA升级失败后,及时进行SPL回滚,防止出现因SPL主分区和SPL备分区不一致而导致终端启动失败,从而防止因IMG的不兼容而导致终端无法开机。
[0034] 其中的读取模块可以通过读取终端的MISC分区,获取终端的SLOT‑A分区信息和SLOT‑B分区信息。以使UBOOT利用SLOT‑A分区和SLOT‑B分区的识别特性,解析OTA升级是否成功。
[0035] 在设置解析判断模块时,解析判断模块可以包括:解析单元、SPL分区确定单元、判断单元。其中,解析单元用于解析SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,判断SLOT‑A分区和SLOT‑B分区的优先级。SPL分区确定单元用于将优先级较高的SLOT分区对应的SPL分区作为SPL主分区,将优先级较低的SLOT分区对应的SPL分区作为SPL备分区。判断单元用于根据SLOT‑A分区和SLOT‑B分区的verify_corrupted和tries_remaining属性,判断SPL主分区是否损坏;判断单元还用于在SPL主分区损坏时,输出判断结果为OTA升级失败;在所SPL主分区未损坏时,输出判断结果为OTA升级成功。以便于确定SPL分区是否需要进行SPL回滚、以及哪个SPL分区进行SPL回滚。
[0036] 另外,该SPL回滚装置还包括切换模块。该切换模块用于判断结果为OTA升级失败时,在使用SPL备分区中的数据替换SPL主分区中的数据之前,切换SLOT‑A和SLOT‑B分区的标志位,以调换SLOT‑A分区和SLOT‑B分区的优先级;切换模块还用于将切换后的SLOT‑A分区和SLOT‑B分区的标志位,重新存放到MISC分区。通过切换两个SLOT分区的优先级标志位,以防止再次进入回滚。
[0037] 需要额外说明的是,上述各个功能模块及功能单元可以为UBOOT中能够实现对应功能步骤的计算机程序,通过启动对应的计算机程序,能够实现相应的功能。
[0038] 此外,本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任意一种SPL回滚方法。该计算机可读存储介质可以为诸如SRAM、MRAM、DRAM等的存储器。
[0039] 最后,本发明实施例还提供了一种终端,该终端包括上述的计算机可读存储介质、以及处理器。其中,处理器用于执行计算机可读存储介质中的计算机程序,以实现上述任意一种SPL回滚方法。该处理器可以为中央处理器,以实现终端的逻辑运算等功能。
[0040] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。