掌桥专利:专业的专利平台
掌桥专利
首页

升级方法、设备及存储介质

文献发布时间:2023-06-19 16:04:54



技术领域

本申请涉及电子技术领域,尤其涉及一种升级方法、设备及存储介质。

背景技术

众所周知,目前的电子设备,例如手机、平板电脑、个人计算机(PersonalComputer,PC设备)等都有内部存储器(俗陈:闪存)。根据不同产品的配置和需求,闪存的容量大小不等,为了方便管理和维护,在使用时,闪存通常会被分成多个区域,这个过程我们把它叫做“分区”。分区既可以让系统分区和用户分区相互隔离,也可以增强系统稳定性。

以Android平台设计开发的电子设备为例,目前对此类电子设备的闪存进行分区时,通常是依据全局唯一标识分区表(GUID Partition Table,GPT分区表)。

但是,对于采用不同芯片平台提供的芯片开发设计的电子设备,其支持划分的分区数目也有所差异,例如有些支持的最大分区数目为128个,有些支持的最大分区数目为192个,而GPT分区方式支持的标准分区数目为128个。并且,对于不同存储类型的闪存,其对应的GPT分区方式也有所差异。

因此,亟需提供一种升级方案,以使电子设备从生产线上使用的版本(后续称为:烧片版本)升级到商用版本(后续称为:用户版本)时,采用同一份存储在外部设备的升级包中的分区表,便可以实现对不同芯片平台的适配,以及不同存储类型的闪存的适配。

发明内容

为了解决上述技术问题,本申请提供一种升级方法、设备及存储介质,旨在使电子设备从烧片版本升级到用户版本时,采用同一份存储在外部设备的升级包中的分区表,便可以实现对不同芯片平台的适配,以及不同存储类型的闪存的适配。

第一方面,本申请提供一种升级方法。该方法应用于电子设备,包括:响应于接收到的升级指令,进入工程模式;读取第一分区表的表头,确定第一分区表中记录的分区数目,第一分区表存储在电子设备的存储器中;根据第一分区表中记录的分区数目,加载第一分区表;读取升级包中第二分区表的表头,确定第二分区表中记录的分区数目,升级包存储在外部存储设备中;根据第二分区表中记录的分区数目,加载第二分区表;根据第二分区表升级第一分区表。由此,能够根据分区表中记录的实际的分区数目来确定究竟加载多少分区的分区信息,这样就可以在分区表中记录的分区数目大于GPT分区标准对应的128个时,依旧能够将剩余的分区的分区信息加载到,从而避免丢失部分分区的分区信息,使得电子设备从烧片版本升级到用户版本时,采用同一份存储在外部设备的升级包中的分区表,便可以实现对不同芯片平台的适配,以及不同存储类型的闪存的适配。

根据第一方面,根据第一分区表中记录的分区数目,加载第一分区表,包括:根据第一分区表中记录的分区数目,设置加载第一分区表时使用的参数;根据加载第一分区表时使用的参数,加载第一分区表。

根据第一方面,或者以上第一方面的任意一种实现方式,根据第二分区表中记录的分区数目,加载第二分区表,包括:根据第二分区表中记录的分区数目,设置加载第二分区表时使用的参数;根据加载第二分区表时使用的参数,加载第二分区表。

根据第一方面,或者以上第一方面的任意一种实现方式,根据第二分区表升级第一分区表,包括:对第二分区表中记录的分区信息解析;根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息。

根据第一方面,或者以上第一方面的任意一种实现方式,第一分区表和第二分区表中记录的分区信息均包括动态分区的分区信息;根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息,包括:根据第一分区表中记录的动态分区的分区信息,确定第一分区表中记录的动态分区占用的第一空间大小;根据第二分区表中记录的动态分区的分区信息,确定第二分区表中记录的动态分区占用的第二空间大小;在第一空间大小大于第二空间大小时,将第一分区表中记录的动态分区的分区信息保存不变,除动态分区的分区信息替换为解析后的第二分区表中记录的除动态分区的分区信息。这样,就可以将电子设备中已经写入动态分区的定制化信息保留,从而满足用户的定制化需求。

根据第一方面,或者以上第一方面的任意一种实现方式,在读取升级包中第二分区表的表头之前,方法还包括:检测升级包中是否存在第二分区表;在升级包中存在第二分区表时,执行读取第二分区表的表头,确定第二分区表中记录的分区数目的步骤。

根据第一方面,或者以上第一方面的任意一种实现方式,检测升级包中是否存在第二分区表,包括:检测升级包中是否存在第一数据包,第一数据包中存在第二分区表;在升级包中存在第一数据包时,确定升级包中存在第二分区表;在升级包中不存在第一数据包时,确定升级包中不存在第二分区表。

根据第一方面,或者以上第一方面的任意一种实现方式,在根据第二分区表升级第一分区表之后,方法还包括:根据升级后的第一分区表中记录的分区信息重新划分存储器中的分区。由此,保证了存储器中存储的第一分区表中记录的分区信息与存储器实际的分区划分相一致,从而保证后续执行将升级包中的镜像文件写入存储器中的分区时,能够准确的写入对应的分区。

根据第一方面,或者以上第一方面的任意一种实现方式,根据升级后的第一分区表中记录的分区信息重新划分存储器中的分区,包括:根据升级后的第一分区表中记录的分区信息,确定每一个分区的起始位置和结束位置;根据每一个分区的起始位置和结束位置重新划分存储器中的分区。

根据第一方面,或者以上第一方面的任意一种实现方式,根据升级后的第一分区表中记录的分区信息重新划分存储器中的分区,包括:根据升级后的第一分区表中记录的分区信息,确定每一个分区的起始位置和偏移量;根据每一个分区的起始位置和偏移量重新划分存储器中的分区。

根据第一方面,或者以上第一方面的任意一种实现方式,在根据升级后的第一分区表中记录的分区信息重新划分存储器中的分区之后,方法还包括:将升级包中每一个分区对应的镜像文件写入存储器中对应的分区。由此,可以保证电子设备重启后,能够根据写入的镜像文件运行到对应的用户版本。

第二方面,本申请提供了一种电子设备。该电子设备包括:存储器和处理器,存储器和处理器耦合;存储器存储有程序指令,程序指令由处理器执行时,使得所述电子设备执行第一方面或第一方面的任意可能的实现方式中的方法的指令。

第三方面,本申请提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。

第四方面,本申请提供了一种计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。

第五方面,本申请提供了一种芯片,该芯片包括处理电路、收发管脚。其中,该收发管脚、和该处理电路通过内部连接通路互相通信,该处理电路执行第一方面或第一方面的任一种可能的实现方式中的方法,以控制接收管脚接收信号,以控制发送管脚发送信号。

附图说明

图1是示例性示出的一种电子设备的硬件结构示意图;

图2是示例性示出的本申请的一种实施例提供的升级方法的流程示意图;

图3是示例性示出的本申请的又一种实施例提供的升级方法的流程示意图;

图4是示例性示出最大分区数目为128时,需要跳过的emmc flash分区表大小的示意图;

图5是示例性示出最大分区数目为192时,需要跳过的emmc flash分区表大小的示意图;

图6是示例性示出的解析前第二分区表内分区信息格式的示意图;

图7是示例性示出的解析后第二分区表内分区信息格式的示意图;

图8是示例性示出的一种根据第二分区表对第一分区表升级的示意图;

图9是示例性示出的又一种根据第二分区表对第一分区表升级的示意图;

图10是示例性示出的又一种根据第二分区表对第一分区表升级的示意图;

图11是示例性示出的又一种根据第二分区表对第一分区表升级的示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。

本申请实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一目标对象和第二目标对象等是用于区别不同的目标对象,而不是用于描述目标对象的特定顺序。

在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。

在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个处理单元是指两个或两个以上的处理单元;多个系统是指两个或两个以上的系统。

为了更好的理解本申请提供的技术方案,在对本申请实施例的技术方案说明之前,首先对当前利用外部存储设备中存储的升级包将电子设备从烧片版本升级到用户版本的升级流程进行说明。具体的由于GPT分区方式,在标准情况下支持的最大分区个数为128,因此目前利用外部存储设备中存储的升级包将电子设备从烧片版本升级到用户版本时,不论是从电子设备的存储器中加载分区表,还是从外部存储设备中的升级包中加载分区表,均是按照固定的128个,这种实现方式在分区数目小于128时不会存在问题,但是如果分区数目大于128时,就会导致后面的分区信息丢失,从而导致升级失败。故而,为了解决这一问题,提出了本申请提供的升级方法,以使电子设备从烧片版本升级到用户版本时,采用同一份存储在外部设备的升级包中的分区表,便可以实现对不同芯片平台的适配,以及不同存储类型的闪存的适配。

示例性的,关于本申请提供的技术方案适用于的电子设备,例如可以是手机、平板、PC机等,其硬件结构例如图1所示。

示例性的,参见图1,电子设备100可以包括:处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。

示例性的,具体到本申请实施例提供的技术方案中,将电子设备在生产线上使用的烧片版本升级到用户版本时,升级包具体是预先存储在外部存储设备中的。

示例性的,在实际应用中,外部存储设备例如可以是安全数码卡(Secure DigitalMemory Card,SD卡)、USB闪存盘(U盘)、空中下载(Over-the-Air,OTA)服务器等。

示例性的,在外部存储设备为SD卡时,SD卡可以通过外部存储器接口120接入电子设备,以使升级过程中,电子设备能够从SD卡读取到升级包中的数据,例如分区表,以及分区表中记录的分区对应的配置信息。

示例性的,在外部存储设备为U盘时,U盘可以通过USB接口130接入电子设备,以使升级过程中,电子设备能够从U盘读取到升级包中的数据,例如分区表,以及分区表中记录的分区对应的配置信息。

示例性的,在外部存储设备为OTA服务器时,OTA服务器可以通过移动通信模块150,或者无线通信模块160与电子设备建立通信连接,以使升级过程中,电子设备能够从OTA服务器获取到升级包,进而读取到升级包中的数据,例如分区表,以及分区表中记录的分区对应的配置信息。

应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。

此外,需要说明的是,在实际应用中,音频模块170例如可以包括扬声器170A、受话器170B、麦克风170C、耳机接口170D等。

示例性的,传感器模块180例如可以包括压力传感器、陀螺仪传感器、气压传感器、磁传感器、加速度传感器、距离传感器、接近光传感器、指纹传感器、温度传感器、触摸传感器、环境光传感器、骨传导传感器等。

此外,还需要说明的是,在实际应用中,按键190例如可以包括电源键(开机键),起始键(home键)、音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。

示例性的,具体到本申请实施例提供的技术方案中,触发电子设备对分区表进行升级的方式例如可以是同时长按home键和开机键(例如同时长按5秒),或者通过建立通信连接的PC设备向电子设备发送升级指令,此处不再一一列举,本申请对此不做限制。

示例性的,在实际应用中,PC设备与电子设备之间建立的通信连接,例如可以是通过网线、USB数据线等有线连接方式建立,或者是通过蓝牙、无线保真(WI-FI)、近场通讯(Near Field Communication,NFC)等无线链接方式建立,此处不再一一列举,本申请对此不做限制。

此外,还需要说明的是,在实际应用中,处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processing unit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。

可理解的,在具体实现中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。

此外,在一些实现方式中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。

此外,处理器110中的存储器主要用于存储指令和数据。在一些实现方式中,处理器110中的存储器为高速缓冲存储器。

此外,可理解的,在实际的应用场景中,触发电子设备100实现各种功能应用以及数据处理的可执行程序代码是存储在内部存储器121中的,这些可执行程序代码包括指令。

关于电子设备100的硬件结构就介绍到此,应当理解的是,图1所示电子设备100仅是一个范例,在具体实现中,电子设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图1中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。

下面对本申请提供的技术方案的实现细节进行说明,以下内容仅为方便理解而提供的实现细节,并非实施本方案的必须。

示例性的,参见图2,本实施例的具体实现步骤包括:

步骤101,响应于接收到的升级指令,进入工程模式。

可理解的,本实施例中的升级指令具体是用于触发电子设备进入工程模式(Recovery模式,也称恢复模式)的指令。在实际应用中,升级指令例如可以是由与电子设备建立通信连接的PC设备发送给电子设备的,或者可以是电子设备的home键和开机键被同时长按时,电子设备生成的。

示例性的,在实际应用中,当电子设备响应于接收到的升级指令时,会重启电子设备,并在重启过程中选择进入Recovery模式。

相应地,在进入Recovery模式后,电子设备便可以根据外接存储设备中存储的升级包内的分区表对电子设备的存储器中当前存储的分区表进行升级。

示例性的,在实际应用中,外部存储设备例如可以是安全数码卡(Secure DigitalMemory Card,SD卡)、USB闪存盘(U盘)、空中下载(Over-the-Air,OTA)服务器等。

此外,需要说明的是,在进入Recovery模式后,Recovery进程会被启动,即本实施提供的升级方法具体是由Recovery进程完成的。

此外,为了便于说明本实施例提供的技术方案,后续将存储在电子设备的存储器中的分区表称为第一分区表,将存储在外部存储设备中的升级包中的分区表称为第二分区表。

步骤102,读取第一分区表的表头,确定第一分区表中记录的分区数目。

可理解的,在实际应用中,Recovery进程在从存储器中读取到第一分区表的表头后,会对第一分区表的表头进行解析,进而根据解析后的信息确定第一分区表中记录的分区数目。

步骤103,根据第一分区表中记录的分区数目,加载第一分区表。

示例性的,在本实施例中,根据第一分区表中记录的分区数目,加载第一分区的步骤例如可以分为如下两步:首先,根据第一分区表中记录的分区数目,设置加载第一分区表时使用的参数;然后,根据加载第一分区表时使用的参数,加载第一分区表。

示例性的,设置的参数例如可以是分区数目、总分区表大小、单LU上分区表大小、需跳过的嵌入式多媒体卡(Embedded Multi Media Card,emmc)闪存(本实施例以flash闪存为例,后续简称为flash)分区表大小、备份分区表大小以及需写入设备的分区表大小等。

需要说明的是,对于flash的存储类型目前可以分为emmc类型和通用闪存(Univeral Flash Storage,ufs)类型,后续将emmc类型称为emmc flash,将ufs类型称为ufs flash。

此外,关于上述给出的LU的概念,具体是指逻辑单元号(Logical Unit Number)。在实际应用中,一个LU可以被看成一个虚拟的分盘。

此外,LU只针对ufs flash,即上述设置的参数中单LU上分区表大小是针对ufsflash的。因为,本实施例提供的技术方案旨在使电子设备从烧片版本升级到用户版本时,采用同一份第二分区表,便可以实现对不同芯片平台的适配,以及不同存储类型的闪存的适配,因此不管需要升级的电子设备的闪存的存储类型是emmc flash,还是ufs flash,设置的参数中都可以包括单LU上分区表大小。

步骤104,读取升级包中第二分区表的表头,确定第二分区表中记录的分区数目。

可理解的,在实际应用中,Recovery进程在从存储在外部存储设备中的升级包中读取到第二分区表的表头后,会对第二分区表的表头进行解析,进而根据解析后的信息确定第二分区表中记录的分区数目。

此外,需要说明的是,在实际应用中,为了满足不同的用户场景,升级包中可能会包括与操作系统相关的第一数据包(后续称为Base包,通常存放的是与操作系统相关的数据信息)、满足用户定制需求的定制包(通常存放的是满足用户定制需求的定制信息)。而第二分区表是存放在Base包中的,因此,为了确定升级过程中,能够从升级包中读取到第二分区表,在执行步骤104之前,Recovery进程可以先检测升级包中是否存在第二分区表,具体为检测升级包中是否存在Base包。

相应地,如果升级包中存在Base包,确定升级包中存在第二分区表;反之,即升级包中不存在Base包时,确定升级包中不存在第二分区表。

示例性的,在确定升级包中存在第二分区表时,便可以执行步骤104。

此外,需要说明的是,在一些实现方式中,当升级包中不存在第二分区表时,例如本次升级不需要对操作系统版本升级,仅需增加部分定制应用等,即升级包中仅包括定制包的场景,这种情况下可以直接跳过步骤104和步骤105,即不需要对第一分区表进行升级,直接执行后续升级流程,例如将升级包中每一个分区对应的镜像文件写入存储器中对应的分区。

步骤105,根据第二分区表中记录的分区数目,加载第二分区表。

示例性的,在本实施例中,根据第二分区表中记录的分区数目,加载第二分区表的步骤例如可以分为如下两步:首先,根据第二分区表中记录的分区数目,设置加载第二分区表时使用的参数;然后,根据加载第二分区表时使用的参数,加载第二分区表。

示例性的,为了实现根据第二分区表对第一分区表的升级,根据第二分区表中记录的分区数目,设置加载第二分区表时使用的参数的类型、字段名称、个数等,与根据第一分区表中记录的分区数目,设置加载第一分区表时使用的参数类型的类型、字段名称、个数等一一对应。

此外,需要说明的是,在实际应用中,读取并加载第一分区表和第二分区表的顺序可以不分先后,即可以按照图1中步骤102至步骤105的顺序执行,也可以先执行步骤104,然后执行步骤105,再执行步骤102,最后执行步骤103。为了便于说明,本实施例,及后续实施例均按照图1中步骤102至步骤105的顺序执行。

步骤106,根据第二分区表升级第一分区表。

可理解的,由于第二分区表是存放在外部存储设备中存储的升级包中的,故而可能存在第二分区表中记录的分区信息的格式与第一分区表中记录的分区信息的格式不相同的情况。因此,为了能够根据第二分区表升级成功第一分区表,Recovery进程在根据第二分区表升级第一分区表时,可以先对第二分区表中记录的分区信息解析,然后根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息。

示例性的,在一些实现方式中,可以先确定第一分区表中记录的分区信息的格式,然后按照第一分区表中记录的分区信息的格式对第二分区表中记录的分区信息解析。

示例性的,在另一些实现方式中,可以预先约定一种统一的格式,然后按照约定的统一格式,分别对第一分区表中记录的分区信息解析,对第二分区表中记录的分区信息解析,从而确保两张分区表中记录的分区信息的格式相同。

此外,需要说明的是,通常情况下,在根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息时,可以是直接将第二分区表中记录的分区信息替换第一分区表中记录的全部分区信息。但在第一分区表和第二分区表中记录的分区信息均包括动态分区的分区信息,或者只有第一分区表记录的分区信息包括动态分区的分区信息时,由于根据用户需求设置的定制化信息是会写入到电子设备的动态分区的,因此,为了避免根据第二分区表对第一分区表升级后,已经写入的定制化信息丢失,在根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息的操作会有所不同。

示例性的,对于第一分区表和第二分区表中记录的分区信息均包括动态分区的分区信息,或者只有第一分区表记录的分区信息包括动态分区的分区信息的情况,在根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息时,可以先根据第一分区表中记录的动态分区的分区信息确定第一分区表中记录的动态分区占用的第一空间大小,根据第二分区表中记录的动态分区的分区信息确定第二分区表中记录的动态分区占用的第二空间大小(对于只有第一分区表记录的分区信息包括动态分区的分区信息的情况,第二空间大小默认为0);然后,根据第一空间大小和第二空间大小确定是直接将第二分区表中记录的分区信息替换第一分区表中记录的全部分区信息,还是保持第一分区表中记录的动态分区的分区信息不变,将除动态分区的分区信息替换为解析后的第二分区表中记录的除动态分区的分区信息中。

具体的,在第一空间大小大于第二空间大小时保持第一分区表中记录的动态分区的分区信息不变,将除动态分区的分区信息替换为解析后的第二分区表中记录的除动态分区的分区信息中;反之,则直接将第二分区表中记录的分区信息替换第一分区表中记录的全部分区信息。

示例性的,替换的方式可以采用覆盖写的方式,或者先删除第一分区表中记录的全部分区信息,然后再将解析后的第二分区表中记录的分区信息写入第一分区表中,还或者直接将第一分区表从存储器中删除,然后将第二分区表整个存储到存储器中。

应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。

此外,需要说明的是,在根据第二分区表升级第一分区表之后,可以根据升级后的第一分区表中记录的分区信息重新划分存储器中的分区。

示例性的,在一些实现方式中,关于根据据升级后的第一分区表中记录的分区信息重新划分存储器中的分区的方式,例如可以是先根据升级后的第一分区表中记录的分区信息确定每一个分区的起始位置和结束位置,然后根据每一个分区的起始位置和结束位置重新划分存储器中的分区。

示例性的,在另一些实现方式中,关于根据据升级后的第一分区表中记录的分区信息重新划分存储器中的分区的方式,例如可以是先根据升级后的第一分区表中记录的分区信息确定每一个分区的起始位置和偏移量;然后根据每一个分区的起始位置和偏移量重新划分存储器中的分区。

应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。

此外,还需要说明的是,在根据升级后的第一分区表中记录的分区信息重新划分存储器中的分区之后,Recovery进程便可以将升级包中每一个分区对应的镜像文件写入存储器中对应的分区。

示例性的,在将升级包中每一个分区对应的镜像文件写入存储器中对应的分区之后,电子设备进行重启,依次加载基础分区中的数据、静态分区中的数据、动态分区中的数据,便可以运行到用户版本,即完成了从烧片版本升级到用户版本。

由此,通过本实施例提供的升级方法,能够使电子设备从烧片版本升级到用户版本时,采用同一份存储在外部设备的升级包中的分区表,便可以实现对不同芯片平台的适配,以及不同存储类型的闪存的适配。

为了更好的理解本申请提供的升级方法,下述实施例以下存储升级包的外部存储设备为SD卡,电子设备采用的芯片最大支持的分区数目为192,升级包需要同时支持emmcflash和ufs flash为例,结合图3至图11对本申请提供的升级方法进行具体说明。

示例性的,参见图3,本实施例的具体实现步骤包括:

步骤201,响应于接收到的升级指令,进入工程模式。

不难发现,本实施例中的步骤201与上述实施例中的步骤101大致相同,具体的实现细节可以参见针对步骤101的描述,此处不再赘述。

步骤202,读取第一分区表的表头,确定第一分区表中记录的分区数目为N1。

具体的说,GPT分区表的表头定义了硬盘(本实施例以flash为例)的可用空间以及组成分区表的项的大小和数量,位置总是在LBA 1。

可理解的,所谓LBA,具体是指逻辑区块地址(Logical Block Address)。LBA是非常单纯的一种定址模式,从0开始编号来定位区块,第一区块LBA=0,即LBA0,第二区块LBA=1,即LAB1,依此类推。

此外,可理解的,在实际应用中,对硬盘的分区方式除了有本实施例中所说的GPT分区方式,还有主引导记录(Master Boot Record,MBR)分区方式,并且MBR分区表的位置总是在LBA0。

此外,可理解的,在实际应用中,当flash为emmc flash时,每个LBA分别占用512字节,当flash为ufs flash时,每个LBA分别占用4096字节。对于GPT分区表,通常在LBA1之后的LBA中记录着分区表本身,通常情况下,针对emmc类型,分区表中的分区信息记录在LBA2~33这32个LBA,每个LBA存储4个entry(即4个分区的分区信息),共计128个entry;针对ufs类型,分区表中的分区信息记录在LBA2~5这4个LBA,每个LBA存储32个entry。

此外,需要说明的是,出现上述差异的原因在于不同flash类型,其LBA的大小不同,而entry固定为128字节,所以每个LBA上可以存储的entry个数不同。

本实施例着重介绍GPT分区表的升级方式,为了更好的理解,以下结合表1至表3,以emmc flash为例,对GPT分区表的总体结构、单个分区的结构,以及表头的结构进行说明。

表1分区表总体结构表

示例性的,如表1所示,在硬盘的LBA0中存放的是MBR,占512字节;在LBA1中存放的是GPT分区表的表头(后续用GPT-header表示),占512字节;在LBA1之后的LBA中,依次存放着所有分区对应的分区信息,如Entry0至Entry127,且在GPT分区方式中,每个分区的大小为128字节。

应当理解的是,表1给出的分区表总体结构是以分区数目有128个为例,如果在实际应用中,分区数目比128多,则在Entry127后会顺序显示多出的分区,例如在分区数目为192时,在Entry127后会顺序显示Entry128、Entry129、...、Entry191。

示例性的,如果分区数目比128少,例如仅有28个,则显示的分区仅有Entry0至Entry27。

应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。在实际应用中,硬盘中还会预留存放备份GPT分区表的表头,以及备份GPT分区的Entry,以及计算机编程函数。

表2 GPT-header的结构表

示例性的,如表2所示,在GPT-header中可以包括如表2中示出的内容。其中,签名从0字节开始,长度占8字节,即0字节至7字节之间存放的是签名的内容,对于GPT-header的签名,例如可以是表2中给出的“0x5452415020494645”;修订版本号从第8字节开始,长度占4字节,即8字节至11字节之间存放的是修订版本号,通常情况下默认为“0x00010000”;Gpt-header这一字段名称从第12字节开始,长度占4字节,即12字节至15字节之间存放的是Gpt-header这一字段名称,其对应的取值,即Gpt-header大小为92字节;Gpt-header前92字节的循环冗余校验码(Cyclic Redundancy Check,CRC)从第16字节开始,长度占4字节,即16字节至19字节之间存放的是用于校验Gpt-header前92字节中的内容的CRC;20字节至23字节之间的4个字节保留,一般将其设置为0;24字节至31字节之间的8个字节用来存放当前主分区表所在的lba索引,通常为1,即GPT分区表的表头存放在LBA1;32字节至39字节之间的8个字节用来存放备份分区表所在的lba索引,通常为最后一个LBA;40字节至47字节之间的8个字节用来存放第一个可用lba的索引,即第一个分区的起始lba;48字节至55字节之间的8个字节用来存放最后一个可用lba的索引,即最后一个分区的起始lba;56字节至71字节之间的16个字节目前存放的是磁盘的全球唯一标识符(Globally Unique Identifier,GUID);72字节至79字节之间的8个字节用来存放emmc里的分区表中第一个Entry的起始lba的索引,通常为2;80字节至83字节之间的4个字节用来存放最大分区个数,如表2所示给出的为128个,如果在实际应用中最大分区个数为192,则这4个字节之间存放的内容的取值便是192;84字节至87字节之间的4个字节用来存放单个Entry的大小,通常为128B;88字节至91字节之间的4个字节用来存放分区表有效数据(16K)的CRC值,92字节及之后的字节为保留字节,通常设置为全0,以备后期根据业务需要自定义使用。

应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。在实际应用中,存放的最大分区个数是根据实际业务需求设置的,可以比128小,也可以比128大。

表3单个entry的结构表

示例性的,如表3所示,0字节至15字节之间的16个字节用来存放分类类型的全局唯一标识符(Globally Unique Identifier,GUID);16字节至31字节之间的16个字节用来存放Unique分区GUID,即标识当前分区的GUID;32字节至39字节之间的8个字节用来存放First lba,即当前分区的起始地址;40字节至47字节之间的8个字节用来存放Last lba,即当前分区的结束地址;48字节至55字节之间的8个字节用来存放特性标志位,目前没有使用;56字节至127字节之间的72个字节用来存放当前分区的分区名。

可理解的,由于GUID是一种由算法生成的二进制长度为128位的数字标识符,在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID,因此通过GUID可以准确的区分每个分区,以及分区的类型。

步骤203,根据N1,加载第一分区表。

关于根据分区数目N1加载第一分区表的方式,依旧需要先根据N1设置加载第一分区表时使用的参数,然后在根据设置的参数加载第一分区表。

关于根据N1设置的参数,仍以分区数目、总分区表大小、单LU上分区表大小、需跳过的emmc flash分区表大小、备份分区表大小以及需写入设备的分区表大小等为例,以下结合表4对上述各参数的作用进行介绍。

表4分区参数表

这些参数决定了接下来对分区表的处理可支持的最大分区个数。在读取了升级包中的分区表镜像的大小以及分区数目后,根据这两项参数共同决定了这些参数的值。通过这种适配方式,做到了在不修改原有分区表处理流程的基础上,增加对192分区数目的分区表进行解析的能力。

这些参数的初始化,不同芯片平台使用的初始化函数各不相同。本实施例提供的适配方案只修改了最大支持128分区数目的芯片平台的适配函数,以此做到了平台间的相互隔离。并且通过这种适配方案,SD卡升级还做到了支持两种不同分区数目的版本通过该功能进行互升,做到了向前兼容。若以后再有超过192分区的版本或是其他平台有超过128分区的情况,可参考该适配方案,做到了可借鉴、可移植。

此外,还需要说明的是,在实际应用中,对于分区表为两种不同flash类型的分区表的组合,即分区表镜像的前面一部分为emmc flash的分区表,后面紧跟着ufs flash的分区表的场景,通常情况下,在分区数目N1为不大于128,即最大支持128时,分区表整体大小通常为41K,如图4所示。其中,0~16K字节之间的17K个字节用来存放emmc flash的分区表,17~41K字节之间的24K个字节用来存放ufs flash的分区表。对于这种情况,如果电子设备的flash为ufs flash,则加载ufs flash的分区表时,需要跳过0~16K字节这17K个字节,加载17~41K字节这24K个字节之间的内容,即得到ufs flash的分区表。

此外,在另一些实现方式中,如果分区数目N1大于128,例如192,这种情况下分区表整体的大小为57K,如图5所示。其中,0~24K字节之间的25K个字节用来存放emmc flash的分区表,25~56K字节之间的32K个字节用来存放ufs flash的分区表。对于这种情况,如果电子设备的flash为ufs flash,则加载ufs flash的分区表时,需要跳过0~24K字节这25K个字节,加载25~56K字节这32K个字节之间的内容,即得到ufs flash的分区表。

应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。在实际应用中,可以根据业务需求动态修改表1中的分区参数。

另外,需要说明的是,在实际应用中,对于采用不了不同芯片平台提供的电子设备,在从烧片版本升级到用户版本时,分区的参数的名称、使用的字段等,可以根据与芯片平台的约定进行调整,以适配不同的芯片平台。

步骤204,检测升级包中是否存在Base包。

具体的,若升级包中存在Base包,确定存在第二分区表,这种情况下执行步骤205;反之,即升级包中不存在Base包的情况,可以认为不存在第二分区表,这种情况下可以用电子设备中已经存在的第一分区表来替代第二分区表,然后执行步骤205,或者直接不对分区表进行升级处理,直接跳过步骤205至步骤209等中间步骤,执行步骤210。为了便于说明,本实施例以第二种情况,即直接跳过步骤205至步骤209等中间步骤,执行步骤210为例进行说明。

步骤205,读取升级包中第二分区表的表头,确定第二分区表中记录的分区数目为N2。

由于第二分区表也为GPT分区表,因此第二分区表的总体结构、单个分区的结构,以及表头的结构与上述步骤202中介绍的第一分区表的总体结构、单个分区的结构,以及表头的结构整体类似,具体细节可以参见步骤201部分针对第一分区表总体结构、单个分区的结构,以及表头的结构的介绍,此处不再赘述。

此外,需要说明的是,在实际应用中,N2可以与N1相同,也可以不相同,具体根据业务需求确定,此处不作限制。

步骤206,根据N2,加载第二分区表。

关于根据分区数目N2加载第二分区表的方式,依旧需要先根据N2设置加载第二分区表时使用的参数,然后在根据设置的参数加载第二分区表。关于加载第二分区表所需的参数,以及参数的作用与表4中给出的加载第二分区表所述的参数大致相同,具体细节可以参见表4,此处不再赘述。

步骤207,对第二分区表中记录的N2个分区的分区信息解析。

示例性的,第二分区表中记录的N2个分区的分区信息解析之前,其形式例如可以如图6所示,记录的是裸数据,即只是纯粹的数据,没有对数据进行简单的分析或者数据的来源并没有依据。因此,无法获知每一行数据究竟是哪个分区(分区名称)对应的分区信息,其中记录的当前分区的起始位置、结束位置,以及分区大小等信息。故而,需要对其进行解析处理,以得到每一行数据究竟是哪个分区(分区名称)对应的分区信息,其中记录的当前分区的起始位置、结束位置,以及分区大小等信息,解析处理后的数据格式例如可以如图7所示。

示例性的,以ufs flash为例,对于ufs flash中的每一个LU,例如图7中UFS LU0中的每一个ENTRY表示一个分区,对于不同LU中的ENTRY按照顺序编号,例如LU0中的ENTRY[1]表示第一个分区,分区名称为“example1”,起始位置start为“0x00000000”,结束位置End为“0x0000001”,大小Size为“8192Bytes”。

应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。

步骤208,根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息。

根据图2对应的实施例中步骤106中给出的根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息方式可知,通常情况下,在根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息时,可以是直接将第二分区表中记录的分区信息替换第一分区表中记录的全部分区信息。但在第一分区表和第二分区表中记录的分区信息均包括动态分区的分区信息,或者只有第一分区表记录的分区信息包括动态分区的分区信息时,在根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息的操作会有所不同。

示例性的,对于第一分区表和第二分区表中记录的分区信息均包括动态分区的分区信息,或者只有第一分区表记录的分区信息包括动态分区的分区信息的情况,在根据解析后的第二分区表中记录的分区信息升级第一分区表中记录的分区信息时,可以先根据第一分区表中记录的动态分区的分区信息确定第一分区表中记录的动态分区占用的第一空间大小,根据第二分区表中记录的动态分区的分区信息确定第二分区表中记录的动态分区占用的第二空间大小(对于只有第一分区表记录的分区信息包括动态分区的分区信息的情况,第二空间大小默认为0);然后,根据第一空间大小和第二空间大小确定是直接将第二分区表中记录的分区信息替换第一分区表中记录的全部分区信息,还是保持第一分区表中记录的动态分区的分区信息不变,将除动态分区的分区信息替换为解析后的第二分区表中记录的除动态分区的分区信息中。

具体的,在第一空间大小大于第二空间大小时保持第一分区表中记录的动态分区的分区信息不变,将除动态分区的分区信息替换为解析后的第二分区表中记录的除动态分区的分区信息中;反之,则直接将第二分区表中记录的分区信息替换第一分区表中记录的全部分区信息。

为了便于理解,以下结合图8至图11进行说明。

示例性的,参见图8,如果电子设备中第一分区表中记录的分区信息有分区A(816M)、分区B(32M)、分区C(56M)这三个分区的分区信息,而第二分区表中记录的分区信息有分区A’(516M)、分区B’(40M)、分区C’(53M)这三个分区的分区信息。如果分区A和分区A’为动态分区(super分区),由于电子设备中分区A的size大于升级包中分区A’的size,合并后的第一分区表,即根据第二分区表升级后的第一分区包中记录的分区信息为:分区A(816M)、分区B’(40M)、分区C’(53M)这三个分区的分区信息。

示例性的,参见图9,如果电子设备中第一分区表中记录的分区信息有分区A(816M)、分区B(32M)、分区C(56M)这三个分区的分区信息,而第二分区表中记录的分区信息有分区A’(936M)、分区B’(40M)、分区C’(53M)这三个分区的分区信息。如果分区A和分区A’为动态分区(super分区),由于升级包中分区A’的size大于电子设备中分区A的size,合并后的第一分区表,即根据第二分区表升级后的第一分区包中记录的分区信息为:分区A’(936M)、分区B’(40M)、分区C’(53M)这三个分区的分区信息。

示例性的,参见图10,如果电子设备中第一分区表中记录的分区信息有分区A(816M)、分区B(32M)、分区C(56M)这三个分区的分区信息,而第二分区表中记录的分区信息有分区A’(516M)和分区C’(53M)这两个分区的分区信息。如果分区A和分区A’为动态分区(super分区),由于电子设备中分区A的size大于升级包中分区A’的size,合并后的第一分区表,即根据第二分区表升级后的第一分区包中记录的分区信息为:分区A(816M)和分区C’(53M)这两个分区的分区信息。

示例性的,参见图11,如果电子设备中第一分区表中记录的分区信息有分区A(816M)和分区B(32M)这两个分区的分区信息,而第二分区表中记录的分区信息有分区A’(516M)、分区B’(40M)、分区C’(53M)这三个分区的分区信息。如果分区A和分区A’为动态分区(super分区),由于电子设备中分区A的size大于升级包中分区A’的size,合并后的第一分区表,即根据第二分区表升级后的第一分区包中记录的分区信息为:分区A(816M)、分区B’(40M)、分区C’(53M)这三个分区的分区信息。

应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。

步骤209,根据升级后的第一分区表中记录的分区信息重新划分存储器中的分区。

关于根据升级后的第一分区表中记录的分区信息重新划分存储器中的分区,具体根据分区表中每一个分区(Entry)的分区信息中记录的分区起始地址(如表3中“Firstlab”)和分区结束地址(如表3中“Last lab”)来进行划分;或者,根据分区起始地址和分区大小(偏移量)来进行划分,本实施例对此不作限制。

步骤210,将升级包中每一个分区对应的镜像文件写入存储器中对应的分区。

示例性的,升级包中例如可以包括启动相关镜像(xloader.img、boot.img)、系统镜像super.img(集成了android系统核心)和用户数据镜像userdata.img(用来储存用户数据)等。其中,启动相关镜像主要对应基础分区中的子分区,例如xloader.img对应X-loader子分区,boot.img对应boot子分区,因此xloader.img需要写入到X-loader子分区,boot.img需要写入到boot子分区;super.img则对应动态分区,因此super.img需要写入到动态分区;userdata.img则对应用户数据分区,因此userdata.img需要写入到用户数据分区。

应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。

由此,通过本实施例提供的升级方法,能够适配采用外接SD卡将电子设备从烧片版本升级到用户版本时,同一份升级包同时支持emmc和ufs两种不同存储结构的存储器的分区升级,并且能够同时支持不同数目,例如128和192的分区表的升级。

此外,由于加载分区表时设置的参数名称、类型可以根据芯片平台进行设置,因此能够实现不同芯片平台之间的相互隔了。

此外,需要说明的是,在本申请提供的技术方案中,涉及的分区表均指GPT分区表,分区表数目,则为GPT分区数目。

此外,应当理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

此外,需要说明的是,在实际的应用场景中由电子设备实现的上述各实施例提供的升级方法,也可以由电子设备中包括的一种芯片系统来执行,其中,该芯片系统可以包括处理器。该芯片系统可以与存储器耦合,使得该芯片系统运行时调用该存储器中存储的计算机程序,实现上述电子设备执行的步骤。其中,该芯片系统中的处理器可以是应用处理器也可以是非应用处理器的处理器。

另外,本申请实施例还提供一种计算机可读存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的升级方法。

另外,本申请实施例还提供了一种计算机程序产品,当该计算机程序产品在电子设备上运行时,使得电子设备执行上述相关步骤,以实现上述实施例中的升级方法。

另外,本申请的实施例还提供一种芯片(也可以是组件或模块),该芯片可包括一个或多个处理电路和一个或多个收发管脚;其中,所述收发管脚和所述处理电路通过内部连接通路互相通信,所述处理电路执行上述相关方法步骤实现上述实施例中的升级方法,以控制接收管脚接收信号,以控制发送管脚发送信号。

此外,通过上述描述可知,本申请实施例提供的电子设备、计算机可读存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

相关技术
  • 电子设备的升级方法、升级装置、存储介质及电子设备
  • 设备升级方法及升级终端、设备和存储介质
技术分类

06120114695292