CN113821221A - 安装操作系统的方法、设备、存储介质及计算机程序产品 - Google Patents
安装操作系统的方法、设备、存储介质及计算机程序产品 Download PDFInfo
- Publication number
- CN113821221A CN113821221A CN202110662972.7A CN202110662972A CN113821221A CN 113821221 A CN113821221 A CN 113821221A CN 202110662972 A CN202110662972 A CN 202110662972A CN 113821221 A CN113821221 A CN 113821221A
- Authority
- CN
- China
- Prior art keywords
- partition
- sub
- dynamic
- customized
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1417—Boot up procedures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1433—Saving, restoring, recovering or retrying at system level during software upgrading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4406—Loading of operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44536—Selecting among different versions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例提供的一种定制包拍包的方法、设备、存储介质及计算机程序产品,方法包括:获取系统安装包,系统安装包包括基础分区镜像、静态分区镜像以及动态分区镜像;将系统安装包的数据烧录到电子设备的存储器的基础分区、第一静态分区、第二静态分区以及动态分区;获取定制数据安装包,定制数据安装包包括第一子分区的镜像文件;生成定制动态分区的分区表,其中,定制动态分区包括动态分区中的所有子分区以及第一子分区;使用定制动态分区的分区表复写动态分区的分区表;基于定制动态分区的分区表,将第一子分区的镜像文件烧录到存储器。根据本申请实施例的方法,可以方便快捷的在电子设备上安装定制操作系统。
Description
技术领域
本申请涉及计算机技术领域,具体地涉及一种安装操作系统的方法、设备、存储介质及计算机程序产品。
背景技术
在现有技术的应用场景中,用户终端需要安装操作系统才可以被用户使用。例如,手机上需要安装手机操作系统(例如:IOS系统、安卓系统)才可以被用户使用。由于操作系统的安装过程较为繁琐,并且,某些终端设备的操作系统需要特殊设备才可以进行安装,因此,为了便于用户使用终端设备,在终端设备销售前,终端设备内通常已安装有基础的操作系统。这样,用户在购买到终端设备后,不需要自行进行复杂的操作系统安装操作,就可以使用终端设备。例如,在手机被销售到用户手中前,手机上已安装有基础的手机操作系统。用户在购买到手机后,即可直接使用手机的基本功能(例如,连接到移动网络、拨打电话)。
一般的,终端设备的操作系统由操作系统供应商提供(例如,安卓系统的操作系统供应商为谷歌),而通常状况下,操作系统供应商所提供的操作系统是基础操作系统,其仅包含最基础的功能,其并不能完全满足用户的应用需求。因此,为了提升用户体验,终端设备供应商会根据客户需求、应用场景的不同,对基础操作系统进行优化,在基础操作系统的基础上增加定制内容,构建定制操作系统。在终端设备上安装定制操作系统,以使得终端设备可以提供优化的系统功能。例如,在安卓系统中增加指定网络运营商的客户服务系统,令手机开机后可以登录用户在该网络运营商下的用户账户以实现计费充值等功能。
由于定制操作系统与操作系统供应商提供的基础操作系统并不相同,其无法完全沿用基础操作系统的出厂前安装方法,因此,需要一种针对定制操作系统的出厂前安装方法。
发明内容
有鉴于此,本申请提供一种定制包拍包的方法、设备、存储介质及计算机程序产品,以利于解决现有技术中针对定制操作系统的安装问题。
第一方面,本申请实施例提供了一种安装操作系统的方法,包括:
获取系统安装包,所述系统安装包包括基础分区镜像、静态分区镜像以及动态分区镜像;
将所述基础分区镜像烧录到电子设备的存储器的基础分区;
将所述静态分区镜像烧录到所述存储器的第一静态分区以及第二静态分区;
将所述动态分区镜像烧录到所述存储器的动态分区;
获取定制数据安装包,所述定制数据安装包包括第一子分区的镜像文件;
生成定制动态分区的分区表,其中,所述定制动态分区包括所述动态分区中的所有子分区以及所述第一子分区;
使用所述定制动态分区的分区表复写所述动态分区的分区表;
基于所述定制动态分区的分区表,将所述第一子分区的镜像文件烧录到所述存储器。
在第一方面的一种实现方式中,所述生成定制动态分区的分区表,包括:
根据所述动态分区镜像获取所述动态分区中所有子分区的镜像文件;
将所述动态分区中所有子分区的镜像文件以及所述第一子分区的镜像文件打包为所述定制动态分区的镜像文件;
从所述定制动态分区的镜像文件中提取所述定制动态分区的分区表。
在第一方面的一种实现方式中,使用打包所述动态分区镜像的镜像打包工具将所述动态分区中所有子分区的镜像文件以及所述第一子分区的镜像文件打包为所述定制动态分区的镜像文件。
在第一方面的一种实现方式中,所述生成定制动态分区的分区表,包括:
获取所述动态分区的分区表;
基于所述第一子分区的镜像文件获取所述第一子分区的分区大小;
根据所述动态分区的分区表以及所述第一子分区的分区大小计算生成所述定制动态分区的分区表。
在第一方面的一种实现方式中,所述根据所述动态分区的分区表以及所述第一子分区的分区大小计算生成所述定制动态分区的分区表,包括:
以所述动态分区的分区表中最后一个子分区的结束地址之后的下一位地址,为所述定制动态分区的分区表中所述第一子分区的起始地址;
将所述第一子分区的起始地址与所述第一子分区的分区大小相加,计算获取所述第一子分区的结束地址。
在第一方面的一种实现方式中,所述定制数据安装包还包括第二子分区的镜像文件;所述定制动态分区包括所述动态分区中的所有子分区、所述第一子分区以及所述第二子分区;
所述方法还包括:
基于所述定制动态分区的分区表,将所述第二子分区的镜像文件烧录到所述存储器。
在第一方面的一种实现方式中,所述生成定制动态分区的分区表,包括:
根据所述动态分区镜像获取所述动态分区中所有子分区的镜像文件;
将所述动态分区中所有子分区的镜像文件、所述第一子分区的镜像文件以及所述第二子分区的镜像文件打包为所述定制动态分区的镜像文件;
从所述定制动态分区的镜像文件中提取所述定制动态分区的分区表。
在第一方面的一种实现方式中,所述生成定制动态分区的分区表,包括:
获取所述动态分区的分区表;
基于所述第一子分区的镜像文件获取所述第一子分区的分区大小;
基于所述第二子分区的镜像文件获取所述第二子分区的分区大小;
根据所述动态分区的分区表、所述第一子分区的分区大小以及所述第二子分区的分区大小计算生成所述定制动态分区的分区表。
在第一方面的一种实现方式中,所述根据所述动态分区的分区表以及所述第一子分区的分区大小计算生成所述定制动态分区的分区表,包括:
以所述动态分区的分区表中最后一个子分区的结束地址之后的下一位地址,为所述定制动态分区的分区表中所述第一子分区的起始地址;
将所述第一子分区的起始地址与所述第一子分区的分区大小相加,计算获取所述第一子分区的结束地址;
以所述第一子分区的结束地址之后的下一位地址,为所述定制动态分区的分区表中所述第二子分区的起始地址;
将所述第二子分区的起始地址与所述第二子分区的分区大小相加,计算获取所述第二子分区的结束地址。
第二方面,本申请提供一种电子设备,所述电子设备包括处理器以及存储器,所述处理器用于执行所述存储器上存储的软件代码,以使得所述电子设备执行如第一方面所述的方法流程。
第三方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得计算机执行如第一方面所述的方法。
第四方面,本申请提供一种计算机程序产品,所述计算机程序产品包括计算机程序,当其在计算机上运行时,使得计算机执行如第一方面所述的方法。
根据本申请实施例所提出的上述技术方案,至少可以实现下述技术效果:
根据本申请实施例的方法,可以方便快捷的在电子设备上安装定制操作系统;
本申请的方法操作简单,不需要修改原生的操作系统安装包,具有很强的适配性。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1所示为一应用场景下设备出厂前进行系统烧录的烧录系统框架结构示意图;
图2所示为安卓系统在终端设备上的数据存储结构示意图;
图3所示为根据本申请一实施例的操作系统升级的流程图;
图4所示为根据本申请一实施例的数据存储结构示意图;
图5所示为根据本申请一实施例的定制操作系统安装流程图;
图6所示为根据本申请一实施例的定制操作系统安装流程图;
图7所示为根据本申请一实施例的定制操作系统安装流程图。
具体实施方式
为了更好的理解本申请的技术方案,下面结合附图对本申请实施例进行详细描述。
应当明确,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,甲和/或乙,可以表示:单独存在甲,同时存在甲和乙,单独存在乙这三种情况。另外,本文中字符“乙,,一般表示前后关联对象是一种“或”的关系。
在实际应用场景中,一种常见的出厂前基础操作系统安装方式是由烧录设备将基础操作系统(例如,由谷歌提供的基础安卓系统)直接烧录到设备上。图1所示为一应用场景下设备出厂前进行系统烧录的烧录系统框架结构示意图,如图1所示,在设备100完成硬件组装后,设备100被连接到烧录设备110上,存储器120连接到烧录设备110。存储器120中保存有基础操作系统的基础系统安装包,基础系统安装包包含基础操作系统的镜像文件。烧录设备110读取存储器120中的基础系统安装包,解析基础系统安装包获取基础操作系统的镜像文件,基于基础操作系统的镜像文件进行数据烧录,将基础操作系统的镜像文件对应的操作系统数据烧录到设备100的存储器上,从而实现在设备100上安装基础操作系统。
本申请实施例的设备100包括但不限于可以安装操作系统的智能手机、智能耳机、平板电脑、智能冰箱、智能音箱等。设备100也可以是设备内部可以安装操作系统的控制板。操作系统的示例性实施例包括但不限于Linux或者其它操作系统。
针对定制操作系统,一种将定制操作系统安装到终端设备的方案即是采用如图1所示的烧录系统。根据定制操作系统制作定制系统安装包,定制系统安装包采用与基础系统安装包一致的文件格式,其包含定制操作系统的镜像文件。将定制系统安装包保存到存储器120,烧录设备110读取存储器120中的定制系统安装包,采用与安装基础操作系统相同的流程在设备100的存储器上烧录定制操作系统的镜像文件对应的操作系统数据,从而实现在设备100上安装定制操作系统。
上述流程虽然可以实现定制操作系统的出厂前安装,但是,由于定制系统安装包必须要具备与基础系统安装包一致的文件格式,因此,需要对基础系统安装包的文件格式进行解析,或者,由基础系统安装包的提供者(例如,谷歌)来进行定制系统安装包的生成操作,这无疑增加了方案流程的实现难度。并且,在实际应用场景中,由于不同的用户人群具备不同的用户需求,很可能需要针对不同的用户人群生成不同的定制操作系统,那也就需要针对每个定制操作系统生成对应的定制系统安装包,并且,在出厂前,针对不同用户人群的终端设备分别进行出厂前操作系统安装,这会大大增加终端设备厂商的工作量,增加设备成本。
针对上述问题,本申请一实施例采用了基础数据与定制数据相互分割的方案,分步烧录基础数据与定制数据。即,在创建定制操作系统时,将定制操作系统的数据分割为基础数据以及定制数据两部分,其中,基础数据即是由操作系统供应商提供的基础操作系统,定制数据则是用来实现优化系统功能的数据。在出厂前安装定制操作系统时,可以直接沿用操作系统供应商提供的原始的基础系统安装包,首先使用操作系统供应商提供的基础系统安装包烧录基础操作系统,在烧录基础操作系统时不需要确认终端设备所需要安装的定制操作系统;在基础操作系统烧录完成后,根据终端设备所需要安装的定制操作系统烧录对应的定制数据,从而实现定制操作系统的安装,无需针对定制操作系统生成完整的定制系统安装包。根据本申请实施例的方法,可以大大降低出厂前定制操作系统安装的工作量,提高出厂前定制操作系统安装的工作效率,降低出厂前定制操作系统安装的成本,提高定制操作系统安装的灵活性。
进一步的,由于定制操作系统实在基础操作系统上进行优化而生成的,因此,定制数据与基础数据并不是相互独立的割裂关系,在安装基础操作系统的基础上安装定制数据,需要考虑到基础操作系统的文件结构才能实现将定制数据融合到基础操作系统从而构成定制操作系统。以下根据基础操作系统的具体文件结构详细描述本申请实施例所提出的出厂前定制操作系统安装方法。
以采用虚拟A/B升级方式的安卓系统为例,图2所示为安卓系统在终端设备上的数据存储结构示意图。如图2所示,安卓系统数据存储区包含基础分区(Common)、静态分区(A)、静态分区(B)、动态分区(Super)、用户数据分区(Userdata)。
Userdata用于存储用户的个人数据,例如,用户个人安装的APP、用户个人保存的图片、文档以及视频等个人数据。基础分区中保存的数据为不参与操作系统升级的系统数据。静态分区(A)与静态分区(B)的结构相互对应,子分区命名通过后缀_a以及_b相互区分。静态分区(A)包括bootloader_a、boot_a、vendor_boot_a、dtbo_a、vbmmeta_a;静态分区(B)包括bootloader_b、boot_b、vendor_boot_b、dtbo_b、vbmmeta_b。动态分区(Super)包含多个子分区(system、system_ext、product、vendor、odm)。
在设备启动时,从一个静态分区启动。例如,设备从静态分区(A)启动:依次加载基础分区(Common)、静态分区(A)以及动态分区(Super);设备从静态分区(B)启动:依次加载基础分区(Common)、静态分区(B)以及动态分区(Super)。
图3所示为针对图2所示系统数据存储结构进行操作系统升级的流程图,当设备当前是从静态分区(A)启动时,设备按照如图3所示的流程实现操作系统的升级。
S300,设备依次加载基础分区(Common)、静态分区(A)以及动态分区(Super),从静态分区(A)启动。
S310,设备获取操作系统升级安装包。
示例的,在一种可行的实现方案中,设备定期向搜包服务器发起搜包请求,搜包请求包含设备当前运行的操作系统的版本号(例如版本1.1);搜包服务器根据搜包请求中的操作系统版本号,检索当前是否存在更新版本号的操作系统安装包(例如版本1.2);当存在更新版本的操作系统安装包时,搜包服务器向设备反馈操作系统升级安装包(例如,由版本1.1升级到版本1.2的系统增量升级安装包)的下载地址;设备根据操作系统升级安装包的下载地址下载操作系统升级安装包,并将操作系统升级安装包保存到用户数据分区(Userdata)。
S320,设备根据操作系统升级安装包针对静态分区(B)进行数据写入操作以升级静态分区。
例如,版本1.1升级到版本1.2的系统增量升级安装包包含版本1.2的静态分区的全量数据,设备将版本1.2的静态分区的数据覆写到静态分区(B)中。
S330,设备根据操作系统升级安装包在用户数据分区(Userdata)创建虚拟动态分区,在虚拟动态分区写入动态分区(Super)的升级数据。例如,在操作系统升级安装包中包含版本1.2的动态分区的数据,设备在虚拟动态分区中写入版本1.2的动态分区(Super)的数据。
进一步的,在虚拟A/B升级方案中,针对动态分区(Super),采用增量升级方式。在升级过程中,用户数据分区(Userdata)的虚拟动态分区中保存的并不是升级后新版本的动态分区(Super)的全部文件,而是旧版本的动态分区(Super)中需要升级的数据在升级后的升级结果。即,用户数据分区(Userdata)的虚拟动态分区中保存的是动态分区的更新数据。
以system子分区为例,假设在版本1.1中,system子分区中的数据可以分为system1、system2两部分。从版本1.1升级到版本1.2,数据system2没有发生变化,数据syetem1被升级为system3。那么,在S330中,设备在用户数据分区(Userdata)创建虚拟动态分区,在虚拟动态分区中写入数据system3。
例如,版本1.1升级到版本1.2的系统增量升级安装包包含版本1.1升级到版本1.2的动态分区(Super)更新数据,该动态分区(Super)更新数据包含数据system3。
进一步的,在虚拟A/B升级方案中,基于快照技术(snapshot)实现动态分区(Super)的增量升级。具体的,用户数据分区(Userdata)的虚拟动态分区中,采用写时拷贝(Copy-On-Write,COW)文件保存动态分区(Super)的升级数据。
具体的,用户数据分区(Userdata)中保存的动态分区(Super)的升级数据包含多个COW文件,每个COW文件对应一个动态分区(Super)的子分区,COW文件的命名与其所针对的动态分区(Super)子分区相对应。
在S310所获取的操作系统升级安装包中,动态分区(Super)的升级数据的COW文件以二进制代码形式压缩保存。在操作系统升级安装包中,每个COW文件根据其所针对的动态分区(Super)子分区所命名。例如,针对system子分区的COW文件被命名为system-cow-img.img.0000。
在S330中,设备解包操作系统升级安装包以获取所有的COW文件,为每个COW文件附加A/B分区标记。具体的,当设备当前从静态分区(A)启动时,可以理解为设备当前运行操作系统所加载的动态分区(Super)为动态分区(A)。在升级操作系统时,用户数据分区(Userdata)中创建的虚拟动态分区是针对动态分区(B)。因此,为COW文件附加对应动态分区(B)的名称标记_b。例如,为system-cow-img.img.0000附加_b生成system_b-cow-img.img.0000。
进一步的,在S330中,在用户数据分区(Userdata)中创建Update文件夹,将重命名的COW文件保存到Update文件夹下。例如,在一应用场景中,在向用户数据分区(Userdata)写入COW文件后,用户数据分区(Userdata)的Update文件夹中包含下述文件:
system_b-cow-img.img.0000;
system_ext_b-cow-img.img.0000;
vendor_b-cow-img.img.0000;
product_b-cow-img.img.0000;
cust_b-cow-img.img.0000;
odm_b-cow-img.img.0000。
具体的,COW文件中包含COW文件自身的COW文件地图(快照map)以及升级数据。COW文件地图(快照)与COW文件所针对的动态分区(Super)的子分区的文件地图相对应。动态分区(Super)的子分区的文件地图用于描述当前版本的操作系统(本次升级之前的版本,例如,版本1.1)动态分区(Super)的子分区中的所有文件以及各个文件的保存地址。
COW文件中的升级数据为相较于当前版本的子分区数据,新版本的子分区数据中被更新的文件;COW文件自身的COW文件地图则用于描述被更新的文件与当前版本的子分区中的文件间的对应关系以及被更新的文件的保存地址。
基于动态分区(Super)的子分区的文件地图以及COW文件中的COW文件地图,就可以使用COW文件中的升级数据替换动态分区(Super)的子分区中的对应文件,从而实现动态分区(Super)数据的升级。具体的,在需要获取动态分区(Super)的子分区的文件地图时,可以基于snapshot对动态分区(Super)的子分区的数据进行快照操作以生成动态分区(Super)的子分区的文件地图。也可以在制作操作系统升级安装包时,预先生成动态分区(Super)的子分区的文件地图,将该文件地图加入到COW文件中。
以system子分区为例,假设system子分区中按照以下路径保存数据:
/system/app/A0.XXX;
/system/app/A1.XXX;
/system/app/A2.XXX;
/system/B0.XXX;
/system/B1.XXX;
/system/user/C0.XXX;
/system/user/C1.XXX;
/system/user/C2.XXX;
/system/user/C3.XXX。
system子分区的文件地图可以是:
/system/app/A0.XXX:024010~024013;
/system/app/A1.XXX:024014~024017;
/system/app/A2.XXX:024018~024020;
/system/B0.XXX:024021~024026;
/system/B1.XXX:024027~024028;
/system/user/C0.XXX:024029~024032;
/system/user/C1.XXX:024033~024035;
/system/user/C2.XXX:024036~024040;
/system/user/C3.XXX:024041~024044。
文件名后的数值(例如,/system/app/A0.XXX:024010~024013中的024010~024013)为该文件在动态分区(Super)的system子分区的物理保存地址(块地址)。
假设当前操作系统升级需要更新数据/system/app/A2.XXX以及/system/user/C2.XXX。
可以视为:
/system/app/A2.XXX以及/system/user/C2.XXX为system子分区数据的system1部分;
/system/app/A0.XXX、/system/app/A1.XXX、/system/B0.XXX、/system/B1.XXX、/system/user/C0.XXX、/system/user/C1.XXX以及/system/user/C3.XXX为system子分区数据的system2部分。
那么,针对system子分区的COW文件(system_b-cow-img.img.0000)就包含最新版的/system/app/A2.XXX以及/system/user/C2.XXX。
可以视为,最新版的/system/app/A2.XXX以及/system/user/C2.XXX为system3。升级目标是使用system3更新掉system1。
当COW文件中的更新数据的大小与其所要更新的原始数据的大小一致,并且,COW文件中的更新数据在数据更新后在子分区中的保存位置与其所要更新的原始数据在子分区中的保存位置一致时,COW文件(system_b-cow-img.img.0000)自身的COW文件地图可以为:
/system/app/A2.XXX:
Map1(原super分区中待更新数据的地址):起始地址address start:024018(相对于system起始地址的偏移量);偏移量大小size:2(即024018~024020地址段的数据)
Map2(cow文件中存储的更新数据的地址):起始地址address start:045033(相对于cow文件存储的起始地址的偏移量);偏移量大小size:2(即045033~045035地址段的数据);
/system/user/C2.XXX:
Map1(原super分区中待更新数据的地址):起始地址address start:024036(相对于system起始地址的偏移量);偏移量大小size:4(即024036~024040地址段的数据)
Map2(cow文件中存储的更新数据的地址):起始地址address start:045036(相对于cow文件存储的起始地址的偏移量);偏移量大小size:4(即045036~045040地址段的数据)。
当COW文件中的更新数据的大小与其所要更新的原始数据的大小不一致时,COW文件(system_b-cow-img.img.0000)自身的COW文件地图可以为:
/system/app/A2.XXX:
Map1.1(原super分区中待更新数据的地址):起始地址address start:024018(相对于system起始地址的偏移量);偏移量大小size:2(即024018~024020地址段的数据)
Map2.1(cow文件中存储的,需要覆盖Map1.1地址的更新数据的地址):起始地址address start:045033(相对于cow文件存储的起始地址的偏移量);偏移量大小size:2(即045033~045035地址段的数据);
Map1.2(cow文件中更新数据超出待更新数据大小的那一部分在原super分区中的待写入地址):起始地址address start:025018(相对于system起始地址的偏移量);偏移量大小size:1(即025018~025020地址段的数据)
Map2.2(cow文件中存储的,需要覆盖Map1.2地址的更新数据的地址):起始地址address start:046033(相对于cow文件存储的起始地址的偏移量);偏移量大小size:2(即046033~046035地址段的数据)。
在接下来的说明书描述中,为便于描述,仅以当COW文件中的更新数据的大小与其所要更新的原始数据的大小一致,并且,COW文件中的更新数据在数据更新后在子分区中的保存位置与其所要更新的原始数据在子分区中的保存位置一致的应用场景进行举例说明。
在上述例子中,地址段(045033~045035以及045036~045040)分别为COW文件(system_b-cow-img.img.0000)中最新版的/system/app/A2.XXX以及/system/user/C2.XXX在用户数据分区(Userdata)的物理保存地址(块地址)。
这样,如果使用地址045033~045035上的A2.XXX替换掉地址024018~024020上的A2.XXX,并且,使用地址045036~045040上的C2.XXX替换掉地址024036~024040上的C2.XXX,就可以完成动态分区(Super)的system子分区的数据升级。
进一步的,在S330中,在将COW文件写入用户数据分区(Userdata)后,还需要对动态分区(Super)+COW文件进行整体校验,校验动态分区(Super)+COW文件的有效性,验证当前版本的动态分区(Super)数据+COW文件的合成结果是否为新版本的动态分区(Super)数据。
具体的,以从1.1版本升级到1.2版本为例,计算动态分区(Super)中不需要升级的数据(从版本1.1到版本1.2未发生变化的数据)与COW文件中升级数据(从版本1.1到版本1.2需要升级的数据)的合成结果的哈希值,判断该哈希值与1.2版本中动态分区(Super)的完整数据的哈希值是否一致,如果一致,则说明COW文件有效;如果不一致,则说明COW文件无效,升级失败,中断升级进程并报错;其中,1.2版本中动态分区(Super)的完整数据的哈希值被保存在操作系统升级安装包中。
具体的,在校验过程中,基于snapshot合并动态分区(Super)+COW文件。在snapshot的实现过程中,动态分区(Super)与COW文件的合并并不是物理意义上的合并,而是将COW文件中子分区的整体文件地图与COW文件自身的COW文件地图进行合并,生成新版本的子分区数据的文件地图。
例如,将system子分区的文件地图:
/system/app/A0.XXX:024010~024013;
/system/app/A1.XXX:024014~024017;
/system/app/A2.XXX:024018~024020;
/system/B0.XXX:024021~024026;
/system/B1.XXX:024027~024028;
/system/user/C0.XXX:024029~024032;
/system/user/C1.XXX:024033~024035;
/system/user/C2.XXX:024036~024040;
/system/user/C3.XXX:024041~024044。
与COW文件地图:
/system/app/A2.XXX:
Map1:address start:024018;size:2(即024018~024020地址段的数据)
Map2:address start:045033;size:2(即045033~045035地址段的数据);
/system/user/C2.XXX:
Map1:address start:024036;size:4(即024036~024040地址段的数据)
Map2:address start:045036;size:4(即045036~045040地址段的数据)。
合并。则得到system子分区的新版本的文件地图:
/system/app/A0.XXX:024010~024013;
(指向动态分区(Super)中/system/app下的A0.XXX)
/system/app/A1.XXX:024014~024017;
(指向动态分区(Super)中/system/app下的A1.XXX)
/system/app/A2.XXX:045033~045035;
(指向用户数据分区(Userdata)中/Update/system_b-cow-img.img.0000中的A2.XXX)
/system/B0.XXX:024021~024026;
(指向动态分区(Super)中/system下的B0.XXX)
/system/B1.XXX:024027~024028;
(指向动态分区(Super)中/system下的B1.XXX)
/system/user/C0.XXX:024029~024032;
(指向动态分区(Super)中/system/user下的C0.XXX)
/system/user/C1.XXX:024033~024035;
(指向动态分区(Super)中/system/user下的C1.XXX)
/system/user/C2.XXX:045036~045040;
(指向用户数据分区(Userdata)中/Update/system_b-cow-img.img.0000中的C2.XXX)
/system/user/C3.XXX:024041~024044。
(指向动态分区(Super)中/system/user下的C3.XXX)
在新版本的system子分区的文件地图中,/system/app/A2.XXX的保存地址并不是指向存储器上动态分区(Super)上的/system/app/A2.XXX,而是指向存储器上用户数据分区(Userdata)中system_b-cow-img.img.0000中的A2.XXX;/system/user/C2.XXX的保存地址并不是指向存储器上动态分区(Super)上的/system/user/C2.XXX,而是指向存储器上用户数据分区(Userdata)中system_b-cow-img.img.0000中的C2.XXX。
在校验过程中,按照上述合成方式,获取动态分区(Super)的所有子分区的新版本的文件地图(如果用户数据分区(Userdata)中并未写入某个子分区的对应COW文件,则直接以该子分区的文件地图为新版本的文件地图)。将所有子分区的新版本的文件地图组合生成动态分区(Super)的新版本的文件系统。
基于动态分区(Super)的新版本的文件系统读取数据,读取动态分区(Super)的新版本的文件系统所包含的所有文件并计算哈希值。
当COW文件有效时,将基础分区(Common)的元数据分区(/metadata)中的落盘状态信息由“已落盘(merged)”改为“未落盘(wait for merge)”。落盘状态信息用于表示当前是否存在需要落盘到动态分区(Super)的COW文件。具体的,落盘状态信息包含针对动态分区(Super)的整体标识以及针对每个子分区的子分区标识。当整体标识为“已落盘(merged)”时,代表动态分区(Super)的所有子分区均不需要进行落盘操作;当整体标识为“未落盘(wait for merge)”时,代表动态分区(Super)的一个或多个子分区需要进行落盘操作;当子分区标识为“已落盘(merged)”时,代表该子分区不需要进行落盘操作;当子分区标识为“未落盘(wait for merge)”时,代表该子分区需要进行落盘操作。
S331,将设备的启动顺序由从静态分区(A)启动变更为从静态分区(B)启动。
例如,改写主引导记录(Master Boot Record,MBR)的启动顺序标识,将启动顺序标识由A改写为B。在设备上电后,当设备读取到启动顺序标识为A,设备从静态分区(A)启动,启动过程中加载静态分区(A);当设备读取到启动顺序标识为B,设备从静态分区(B)启动,启动过程中加载静态分区(B)。
S332,设备重启。退出当前的操作系统,切断设备电源,再次开启设备电源。
S340,设备依次加载基础分区(Common)、静态分区(B)。
S341,设备加载动态分区(Super)以及用户数据分区(Userdata)的虚拟动态分区。
具体的,设备读取元数据(/metadata)中的落盘状态信息,基于落盘状态信息确定是否需要从用户数据分区(Userdata)的指定路径中检索COW文件,并采用snapshot合并加载动态分区(Super)以及COW文件。
进一步的,在S341中,设备并不加载动态分区(Super)以及用户数据分区(Userdata)中的全部COW文件,而是根据操作系统运行需求加载对应的文件。具体的,在S341中,设备根据操作系统运行需求确定需要加载的文件,基于snapshot从动态分区(Super)或虚拟动态分区中的COW文件中提取对应的文件进行加载。
具体的,在S341中,当动态分区(Super)的子分区首存在对应的COW文件时,先基于snapshot生成动态分区(Super)各个子分区的新版本的文件地图。生成新版本的文件地图的过程可以参照S330。设备根据操作系统运行需求确定需要加载的文件,基于动态分区(Super)子分区的新版本的文件地图进行文件加载。
例如,操作系统运行需求加载system子分区下目录user(/system/user)中的所有数据。设备读取元数据(/metadata)中的落盘状态信息,落盘状态信息中system子分区的子分区标识为“未落盘(wait for merge)”,因此,设备在用户数据分区(Userdata)中/Update下搜索COW文件,在Update下搜索到COW文件system_b-cow-img.img.0000后,基于snapshot,根据system_b-cow-img.img.0000中的COW文件的文件地图生成system子分区的新版本的文件地图。按照system子分区的新版本的文件地图中/system/user下所有文件的保存地址进行数据加载,例如,根据system子分区的新版本的文件地图中:
/system/user/C0.XXX:024029~024032;
/system/user/C1.XXX:024033~024035;
/system/user/C2.XXX:045036~045040;
/system/user/C3.XXX:024041~024044。
加载地址024029~024032处的C0.XXX、地址024033~024035处的C1.XXX、地址045036~045040处的C2.XXX以及地址024041~024044处的C3.XXX。
进一步的,在加载system子分区下目录user(/system/user)中的所有数据时,当落盘状态信息中system子分区的子分区标识为“已落盘(merged)”时,设备就不会在用户数据分区(Userdata)中/Update下搜索COW文件,而是直接加载system子分区下目录user(/system/user)中的所有数据。
进一步的,在加载system子分区下目录user(/system/user)中的所有数据时,当落盘状态信息中system子分区的子分区标识为“未落盘(wait for merge)”时,如果设备在用户数据分区(Userdata)中/Update下未搜索到对应system子分区的COW文件时,则说明升级过程中数据写入错误(COW文件写入错误或者落盘状态信息写入错误),此时设备回滚系统并报错。
进一步的,在S341中,在加载文件之前,设备还需要对加载文件进行校验。不同于S330,在S341中,不对动态分区(Super)+COW文件进行整体验证,而是仅对需要加载的文件进行验证。例如,基于dmverity进行校验(dm-verity是dm(device mapper)的一个目标(target),是一个虚拟块设备,专门用于文件系统的校验)。校验成功则加载文件,校验失败则重启设备,回滚系统或者尝试再次加载文件。
S350,设备成功启动,进入用户交互界面。
S351,设备将虚拟动态分区的数据落盘到动态分区(Super)。
在本申请说明书的描述中,落盘操作指的是,在操作系统升级过程中,将用户数据分区(Userdata)上虚拟动态分区中保存的动态分区(Super)升级文件(COW文件)写入到动态分区(Super)中,使得动态分区(Super)的文件完成数据升级,以便设备在下次启动时不需要加载动态分区(Super)和虚拟动态分区,只需加载动态分区(Super)就可以完成设备启动。
具体的,设备在启动成功后进行开机广播,开机广播后开启升级进程。升级进程读取基础分区(Common)的元数据(/metadata)中的落盘状态信息,如果落盘状态信息为“已落盘(merged)”,则设备进入正常运行模式。
如果落盘状态信息为“未落盘(wait for merge)”,升级进程将用户数据分区(Userdata)中的COW文件落盘到动态分区(Super)中。
具体的,升级进程将用户数据分区(Userdata)中的COW文件中的升级数据写入到动态分区(Super)中的对应地址上,使得动态分区(Super)中的全部数据均为升级后的新版本的数据。
例如,基于system子分区的文件地图中的/system/app/A2.XXX:024018~024020以及COW文件地图中的/system/app/A2.XXX:045033~045035,将地址045033~045035上的数据写入到地址024014~024017上;基于system子分区的文件地图中的/system/user/C2.XXX:024036~024040以及COW文件地图中的/system/user/C2.XXX:045036~045040,将地址045036~045040上的数据写入到地址024036~024040上。
在此之后升级进程删除用户数据分区(Userdata)中的COW文件,将存储空间归还给用户数据分区(Userdata);并且,将基础分区(Common)的元数据(/metadata)中的落盘状态信息由“未落盘(wait for merge)”改为“已落盘(merged)”。
在S320中,静态分区升级的数据操作是针对静态分区(B)中的操作系统数据的,其并不会影响到当前启动的静态分区(A)的操作系统数据;并且,在S330中,动态分区升级的数据操作是在用户数据分区(Userdata)中所创建的虚拟动态分区上完成的,其并不会影响到当前挂载的动态分区(Super)。因此,在整个操作系统升级的过程中,用户可以正常使用设备;并且,在S331完成后,设备并不需要立即重启,可以由用户自行选择重启时机;这样,操作系统的升级过程并不会对用户的正常手机操作产生影响,从而大大提高了用户体验。进一步的,针对动态分区(Super),仅在需要进行升级时才会在用户数据分区(Userdata)上创建虚拟动态分区,因此有效提高了数据存储空间利用率。
根据本申请一实施例,对图2所示的数据存储结构的安卓系统进行优化,增加定制数据以生成基础数据+定制数据格式的操作系统数据。图4所示为根据本申请一实施例的数据存储结构示意图。如图4所示,安卓系统数据存储区包含基础分区(Common)、静态分区(A)、静态分区(B)、定制动态分区(Super)、用户数据分区(Userdata)。静态分区(A)、静态分区(B)所包含的具体子分区可以参照图2所示实施例的相关描述。定制动态分区(Super)包含图2所示的基础操作系统的动态分区中的所有子分区;除此以外,定制数据以动态分区的子分区的形式被添加在动态分区中,如图4所示,定制动态分区(Super)还包含用于保存定制数据的定制分区、货架分区。这里需要说明的是,在图4所示实施例中,定制数据保存在定制分区以及货架分区中。在本申请其他实施例中,也可以采用其他分区结构保存定制数据。例如,仅保留定制分区或仅保留货架分区;又例如,再额外增加一个服务分区。由于定制分区、货架分区是定制动态分区(Super)的子分区。因此,整个定制操作系统(基础数据+定制数据)可以采用虚拟A/B升级方式进行升级。并且,由于定制分区、货架分区是独立的数据分区,因此,整个定制操作系统(基础数据+定制数据)可以按照本申请所提出的分步烧录方式进行出厂前定制操作系统安装。
根据本申请实施例的方法,可以方便快捷的在电子设备上安装定制操作系统;本申请的方法操作简单,不需要修改原生的操作系统安装包,具有很强的适配性。
图5所示为根据本申请一实施例的定制操作系统安装流程图。存储器120中保存有基础操作系统的基础系统安装包以及定制数据安装包,基础系统安装包包含基础操作系统的镜像文件,定制数据安装包包含定制分区以及货架分区的镜像文件。烧录设备110执行如图5所示的以下流程以在设备100上安装定制操作系统。
S500,烧录设备110读取存储器120中的基础系统安装包。
示例的,在一种可行的方案中,存储器120中的基础系统安装包以及定制数据安装包通过文件名加以区分,例如,预定义基础系统安装包的名称为systemsetup。在S500中,烧录设备110在存储器120中进行文件检索,判断存储器120中是否保存有文件名为systemsetup的安装包文件,如果有,则读取该安装包文件。
S501,烧录设备110解析基础系统安装包获取基础操作系统的镜像文件,基于基础操作系统的镜像文件进行数据烧录,将基础操作系统的镜像文件对应的操作系统数据烧录到设备100的存储器上。
在S501之后,设备100所保存的操作系统结构可参照图2。
S510,烧录设备110读取存储器120中的定制数据安装包。可以参照S500。
S520,烧录设备110解析定制数据安装包获取定制分区以及货架分区的镜像文件。
S521,烧录设备110获取定制动态分区的分区表,定制动态分区的分区表包含设备100的存储器上的动态分区(Super)的分区表内容,并且,定制动态分区的分区表还包含定制分区以及货架分区的分区描述。在采用虚拟A/B升级方式的安卓系统中,在动态分区(Super)的分区表中,动态分区(Super)的子分区也是分a分区以及b分区的,但是,同一子分区的a分区以及b分区仅在名称以及所属组别上以后缀_a以及_b加以区分,其实际上对应的物理地址是完全一致的。
进一步的,在动态分区(Super)的元数据(/Super metedata)中,存在用于保存分区表的slot0以及slot1。slot0对应静态分区(A),在slot0中,动态分区(Super)的所有子分区的a分区的物理地址为实际地址,动态分区(Super)的所有子分区的b分区的物理地址置空。Slot1对应静态分区(B),在slot1中,动态分区(Super)的所有子分区的b分区的物理地址为实际地址,动态分区(Super)的所有子分区的a分区的物理地址置空。
在加载动态分区时,根据启动的静态分区的不同从slot0或slot1中读取各个子分区的a分区或b分区的地址。例如,设备从静态分区(A)启动时,读取slot0中子分区名称后缀为_a的子分区的地址;设备从静态分区(B)启动时,读取slot1中子分区名称后缀为_b的子分区的地址。
进一步的,通常在基础操作系统进行出厂前安装时,基础操作系统被设置为从静态分区(A)启动,slot0以及slot1中的数据保持一致。
例如,在slot0以及slot1中,动态分区(Super)的分区表包含多组子分区描述,每组子分区对应分区的一个子分区。每组子分区描述包含:
名称(Name)项,其值为子分区的名称;
组(Group)项,其值为子分区类型;
属性(Attributes)项,其值为分区读写属性,例如,只读属性(readonly);
地址(Extents)项,其值为子分区的物理地址(以下示例中,对Extents项的具体值不做具体举例,均以子分区名称+XXXXX代表)。这里需要说明的是,在下述描述中,以子分区名称+XXXXX的方式指代该子分区的地址,在实际应用场景中,本领域的技术人员可以使用多种不同的方式描述子分区的地址。例如,采用线性地址描述方式(0..6995967linearsuper 2048)
在S501之后,slot0以及slot1中包含以下分区表数据:
Name:system_a
Group:qti_dynamic_partitions_a
Attributes:readonly
Extents:systemXXXXX
Name:system_b
Group:qti_dynamic_partitions_b
Attributes:readonly
Extents:
Name:system_ext_a
Group:qti_dynamic_partitions_a
Attributes:readonly
Extents:system_extXXXXX
Name:system_ext_b
Group:qti_dynamic_partitions_b
Attributes:readonly
Extents:
Name:Product_a
Group:qti_dynamic_partitions_a
Attributes:readonly
Extents:ProductXXXXX
Name:Product_b
Group:qti_dynamic_partitions_b
Attributes:readonly
Extents:
Name:Vendor_a
Group:qti_dynamic_partitions_a
Attributes:readonly
Extents:VendorXXXXX
Name:Vendor_b
Group:qti_dynamic_partitions_b
Attributes:readonly
Extents:
Name:Cust_a
Group:qti_dynamic_partitions_a
Attributes:readonly
Extents:CustXXXXX
Name:Cust_b
Group:qti_dynamic_partitions_b
Attributes:readonly
Extents:
Name:Odm_a
Group:qti_dynamic_partitions_a
Attributes:readonly
Extents:OdmXXXXX
Name:Odm_b
Group:qti_dynamic_partitions_b
Attributes:readonly
Extents:
在上述分区表数据中增加如下内容即可获得S521中需要获取的定制动态分区的分区表(其中,version对应定制分区,preload对应货架分区):
Name:version_a
Group:qti_dynamic_partitions_a
Attributes:readonly
Extents:versionXXXXX
Name:version_b
Group:qti_dynamic_partitions_b
Attributes:readonly
Extents:
Name:preload_a
Group:qti_dynamic_partitions_a
Attributes:readonly
Extents:preloadXXXXX
Name:preload_b
Group:qti_dynamic_partitions_b
Attributes:readonly
Extents:
S522,烧录设备110使用定制动态分区的分区表覆写设备100的存储器上的动态分区(Super)的metedata中的分区表数据。
具体的,烧录设备110将定制动态分区的分区表覆写到动态分区的/Supermetedata中的slot0以及slot1。
S523,烧录设备110基于定制分区以及货架分区的镜像文件进行数据烧录,将定制分区的数据烧录到设备100的存储器上定制分区的地址上,将货架分区的数据烧录到设备100的存储器上货架分区的地址上。
具体的,参照图2所示,在S522执行前,动态分区中的其他子分区数据(system、system_ext、product、vendor、odm)已烧录到设备100的存储器中,因此,在S522中,定制分区以及货架分区被烧录在原始的动态分区(Super)的末尾(odm之后)。定制分区以及货架分区占用原有的用户数据分区(Userdata)的一部分。
在S523之后,设备100所保存的操作系统结构可参照图4。
进一步的,本申请对S520~S523的具体实现方式不做具体限制,本领域的技术人员可以采用多种可行的实现方式实现S520~S523。以下通过两个具体实施例举例说明S520~S523的具体实现流程。
图6所示为根据本申请一实施例的定制操作系统安装流程图。存储器120中保存有基础操作系统的基础系统安装包以及定制数据安装包,基础系统安装包包含基础操作系统的镜像文件,定制数据安装包包含定制分区以及货架分区的镜像文件。烧录设备110执行如图6所示的以下流程以实现S520~S523。
S600,解析定制数据安装包获取定制分区以及货架分区的镜像文件。
S610,解包定制分区以及货架分区的镜像文件,获取定制分区以及货架分区的数据内容。
S620,解包基础操作系统的镜像文件,获取基础操作系统中动态分区的数据内容。
S630,使用操作系统供应商提供的,针对基础系统安装包的打包工具,对基础动态分区的数据内容、定制分区以及货架分区的数据内容进行打包,生成包含定制分区以及货架分区的定制动态分区的镜像文件。定制动态分区的数据结构可以参照图4。
具体的,操作系统供应商提供的打包工具(例如,谷歌提供的针对安卓系统的安装包打包工具)可以将文件打包为符合基础系统安装包中基础动态分区(Super)的镜像格式的镜像文件,在打包过程中,打包工具会根据打包内容生成对应的分区表。因此,在定制动态分区的镜像文件中包含了定制动态分区的分区表。进一步的,由于定制动态分区的镜像文件是由基础动态分区(Super)的数据内容、定制分区以及货架分区的数据内容打包得来的,因此,定制动态分区的镜像文件中包含的定制动态分区的分区表,即是包含了定制分区以及货架分区分区描述的分区表(定制动态分区的分区表的具体示例参照S521的描述中动态分区的分区表)。
S631,解包定制动态分区的镜像文件,从中提取定制动态分区的分区表。
S640,使用定制动态分区的分区表覆写设备100的存储器上的动态分区(Super)的metedata中的分区表数据(参照S522)。
S650,根据定制动态分区的分区表,确定定制分区以及货架分区在设备100的存储器上的保存位置,将定制分区以及货架分区的镜像文件烧录到设备100的存储器。
具体的,以定制分区为例,在S631之后,烧录设备110将定制动态分区的分区表合并到定制分区的镜像文件。S650包括以下步骤:
烧录设备110验证设备100的存储器上的动态分区(Super)的动态分区的metedata中分区表数据与定制分区的镜像文件中的分区表数据是否一致;
如一致,则从定制动态分区的分区表(可以从定制分区的镜像文件获取分区表或者从设备100的存储器上读取分区表)中读取version_a的Extents值以获取定制分区的地址;
烧录设备110将定制分区的镜像文件中的定制分区数据烧录到设备100的存储器的定制分区的地址中。
图7所示为根据本申请一实施例的定制操作系统安装流程图。存储器120中保存有基础操作系统的基础系统安装包以及定制数据安装包,基础系统安装包包含基础操作系统的镜像文件,定制数据安装包包含定制分区以及货架分区的镜像文件。执行如图7所示的以下流程以实现S520~S523。
S700,解析定制数据安装包获取定制分区以及货架分区的镜像文件。
S710,解析定制分区以及货架分区的镜像文件,读取定制分区以及货架分区的分区大小。
S720,获取基础操作系统的动态分区的分区表。
在S720中,可以通过解析基础操作系统的镜像文件,获取基础动态分区的分区表,也可以从设备100上读取当前的动态分区的分区表。例如,读取/dev/block/by-name/下动态分区的地址映射描述。又例如,读取MBR中保存的分区表。。
S730,根据基础动态分区的分区表以及定制分区以及货架分区的分区大小,生成定制动态分区的分区表(定制动态分区的分区表的具体示例参照S521的描述中动态分区的分区表)。
示例的,根据基础动态分区的分区表可以确定基础动态分区中最后一个子分区(odm)的终止地址。根据odm的终止地址可以确认定制分区的起始地址。根据定制分区的起始地址以及定制分区的大小可以确认定制分区的终止地址。根据定制分区的终止地址可以确认货架分区的起始地址。根据货架分区的起始地址以及货架分区的大小可以确认货架分区的终止地址。最终就可以获得定制动态分区中定制分区以及货架分区的地址。在定制动态分区中,定制分区以及货架分区以外的子分区地址与基础动态分区一致,最终就可以生成定制动态分区的分区表。
S740,使用定制动态分区的分区表覆写设备100的存储器上的动态分区(Super)的/Supermetedata中的分区表数据。
S750,根据定制动态分区的分区表,确定定制分区以及货架分区在设备100的存储器上的保存位置,将定制分区以及货架分区的镜像文件烧录到设备100的存储器。S750的具体实现可以参照S650。
可以理解的是,上述实施例中的部分或全部步骤或操作仅是示例,本申请实施例还可以执行其它操作或者各种操作的变形。此外,各个步骤可以按照上述实施例呈现的不同的顺序来执行,并且有可能并非要执行上述实施例中的全部操作。
进一步的,一般的,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field ProgrammableGate Array,FPGA))就是这样一种集成电路,其逻辑功能由访问方对器件编程来确定。由设计人员自行编程来把一个数字装置“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
因此,本申请实施例所提出的方法流程可以以硬件方式实现,例如,使用控制器,控制器控制触摸屏以实现本申请实施例所提出的方法流程。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
与上述实施例对应,本申请还提供了一种电子设备。电子设备包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发电子设备执行如本申请实施例所述的方法步骤。
本申请还提供一种计算机程序产品,计算机程序产品包括计算机程序,当其在计算机上运行时,使得计算机执行本申请实施例提供的部分或全部步骤。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于装置实施例和终端实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
Claims (12)
1.一种安装操作系统的方法,其特征在于,包括:
获取系统安装包,所述系统安装包包括基础分区镜像、静态分区镜像以及动态分区镜像;
将所述基础分区镜像烧录到电子设备的存储器的基础分区;
将所述静态分区镜像烧录到所述存储器的第一静态分区以及第二静态分区;
将所述动态分区镜像烧录到所述存储器的动态分区;
获取定制数据安装包,所述定制数据安装包包括第一子分区的镜像文件;
生成定制动态分区的分区表,其中,所述定制动态分区包括所述动态分区中的所有子分区以及所述第一子分区;
使用所述定制动态分区的分区表复写所述动态分区的分区表;
基于所述定制动态分区的分区表,将所述第一子分区的镜像文件烧录到所述存储器。
2.根据权利要求1所述方法,其特征在于,所述生成定制动态分区的分区表,包括:
根据所述动态分区镜像获取所述动态分区中所有子分区的镜像文件;
将所述动态分区中所有子分区的镜像文件以及所述第一子分区的镜像文件打包为所述定制动态分区的镜像文件;
从所述定制动态分区的镜像文件中提取所述定制动态分区的分区表。
3.根据权利要求2所述方法,其特征在于,使用打包所述动态分区镜像的镜像打包工具将所述动态分区中所有子分区的镜像文件以及所述第一子分区的镜像文件打包为所述定制动态分区的镜像文件。
4.根据权利要求1所述方法,其特征在于,所述生成定制动态分区的分区表,包括:
获取所述动态分区的分区表;
基于所述第一子分区的镜像文件获取所述第一子分区的分区大小;
根据所述动态分区的分区表以及所述第一子分区的分区大小计算生成所述定制动态分区的分区表。
5.根据权利要求4所述方法,其特征在于,所述根据所述动态分区的分区表以及所述第一子分区的分区大小计算生成所述定制动态分区的分区表,包括:
以所述动态分区的分区表中最后一个子分区的结束地址之后的下一位地址,为所述定制动态分区的分区表中所述第一子分区的起始地址;
将所述第一子分区的起始地址与所述第一子分区的分区大小相加,计算获取所述第一子分区的结束地址。
6.根据权利要求1所述方法,其特征在于,所述定制数据安装包还包括第二子分区的镜像文件;所述定制动态分区包括所述动态分区中的所有子分区、所述第一子分区以及所述第二子分区;
所述方法还包括:
基于所述定制动态分区的分区表,将所述第二子分区的镜像文件烧录到所述存储器。
7.根据权利要求6所述方法,其特征在于,所述生成定制动态分区的分区表,包括:
根据所述动态分区镜像获取所述动态分区中所有子分区的镜像文件;
将所述动态分区中所有子分区的镜像文件、所述第一子分区的镜像文件以及所述第二子分区的镜像文件打包为所述定制动态分区的镜像文件;
从所述定制动态分区的镜像文件中提取所述定制动态分区的分区表。
8.根据权利要求6所述方法,其特征在于,所述生成定制动态分区的分区表,包括:
获取所述动态分区的分区表;
基于所述第一子分区的镜像文件获取所述第一子分区的分区大小;
基于所述第二子分区的镜像文件获取所述第二子分区的分区大小;
根据所述动态分区的分区表、所述第一子分区的分区大小以及所述第二子分区的分区大小计算生成所述定制动态分区的分区表。
9.根据权利要求8所述方法,其特征在于,所述根据所述动态分区的分区表以及所述第一子分区的分区大小计算生成所述定制动态分区的分区表,包括:
以所述动态分区的分区表中最后一个子分区的结束地址之后的下一位地址,为所述定制动态分区的分区表中所述第一子分区的起始地址;
将所述第一子分区的起始地址与所述第一子分区的分区大小相加,计算获取所述第一子分区的结束地址;
以所述第一子分区的结束地址之后的下一位地址,为所述定制动态分区的分区表中所述第二子分区的起始地址;
将所述第二子分区的起始地址与所述第二子分区的分区大小相加,计算获取所述第二子分区的结束地址。
10.一种电子设备,其特征在于,所述电子设备包括处理器以及存储器,所述处理器用于执行所述存储器上存储的软件代码,以使得所述电子设备执行如权利要求1~9中任一项所述的方法流程。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得计算机执行如权利要求1~9中任一项所述的方法。
12.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,当其在计算机上运行时,使得计算机执行如权利要求1~9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110662972.7A CN113821221B (zh) | 2021-06-15 | 2021-06-15 | 安装操作系统的方法、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110662972.7A CN113821221B (zh) | 2021-06-15 | 2021-06-15 | 安装操作系统的方法、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113821221A true CN113821221A (zh) | 2021-12-21 |
CN113821221B CN113821221B (zh) | 2022-09-23 |
Family
ID=78923889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110662972.7A Active CN113821221B (zh) | 2021-06-15 | 2021-06-15 | 安装操作系统的方法、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113821221B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115543368A (zh) * | 2022-01-10 | 2022-12-30 | 荣耀终端有限公司 | 一种操作系统升级方法及电子设备 |
CN115562695A (zh) * | 2022-01-10 | 2023-01-03 | 荣耀终端有限公司 | 操作系统升级方法、电子设备、存储介质及芯片系统 |
CN116088883A (zh) * | 2023-04-11 | 2023-05-09 | 北京朝歌数码科技股份有限公司 | 终端设备烧录方法、生产方法、终端设备及外部存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103761107A (zh) * | 2014-02-13 | 2014-04-30 | 福建星网视易信息系统有限公司 | 软件包定制的装置及方法 |
US8725995B1 (en) * | 2013-11-04 | 2014-05-13 | Symantec Corporation | Systems and methods for updating system-level services within read-only system images |
CN104360871A (zh) * | 2014-10-12 | 2015-02-18 | 厦门雅基软件有限公司 | 一种手机游戏安装快速启动方法 |
CN104978231A (zh) * | 2015-07-10 | 2015-10-14 | 上海斐讯数据通信技术有限公司 | 基于内部存储分区的多系统及其加载和切换方法 |
CN108052342A (zh) * | 2017-12-12 | 2018-05-18 | 杭州华为数字技术有限公司 | 分区表修复方法、装置及电子设备 |
CN110998517A (zh) * | 2017-08-02 | 2020-04-10 | 万事达卡国际公司 | 用于定制化的操作系统转换的系统和方法 |
CN111158697A (zh) * | 2019-12-25 | 2020-05-15 | 惠州华阳通用电子有限公司 | 一种烧录镜像制作方法 |
CN112416359A (zh) * | 2020-11-23 | 2021-02-26 | 捷开通讯(深圳)有限公司 | 动态分区定制方法、装置、设备和计算机可读存储介质 |
-
2021
- 2021-06-15 CN CN202110662972.7A patent/CN113821221B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8725995B1 (en) * | 2013-11-04 | 2014-05-13 | Symantec Corporation | Systems and methods for updating system-level services within read-only system images |
CN103761107A (zh) * | 2014-02-13 | 2014-04-30 | 福建星网视易信息系统有限公司 | 软件包定制的装置及方法 |
CN104360871A (zh) * | 2014-10-12 | 2015-02-18 | 厦门雅基软件有限公司 | 一种手机游戏安装快速启动方法 |
CN104978231A (zh) * | 2015-07-10 | 2015-10-14 | 上海斐讯数据通信技术有限公司 | 基于内部存储分区的多系统及其加载和切换方法 |
CN110998517A (zh) * | 2017-08-02 | 2020-04-10 | 万事达卡国际公司 | 用于定制化的操作系统转换的系统和方法 |
CN108052342A (zh) * | 2017-12-12 | 2018-05-18 | 杭州华为数字技术有限公司 | 分区表修复方法、装置及电子设备 |
CN111158697A (zh) * | 2019-12-25 | 2020-05-15 | 惠州华阳通用电子有限公司 | 一种烧录镜像制作方法 |
CN112416359A (zh) * | 2020-11-23 | 2021-02-26 | 捷开通讯(深圳)有限公司 | 动态分区定制方法、装置、设备和计算机可读存储介质 |
Non-Patent Citations (3)
Title |
---|
CCZHENGV: ""Android10 动态分区介绍"", 《HTTPS://BLOG.CSDN.NET/U012932409/ARTICLE/DETAILS/105075851》 * |
GUOYONG SHI 等: ""A vehicle electric control unit over-the-air reprogramming system"", 《2015 INTERNATIONAL CONFERENCE ON CONNECTED VEHICLES AND EXPO (ICCVE)》 * |
施超 等: ""基于Android平台OTA差分升级系统设计与实现"", 《信息技术》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115543368A (zh) * | 2022-01-10 | 2022-12-30 | 荣耀终端有限公司 | 一种操作系统升级方法及电子设备 |
CN115562695A (zh) * | 2022-01-10 | 2023-01-03 | 荣耀终端有限公司 | 操作系统升级方法、电子设备、存储介质及芯片系统 |
CN115543368B (zh) * | 2022-01-10 | 2023-05-23 | 荣耀终端有限公司 | 一种操作系统升级方法及电子设备 |
CN115562695B (zh) * | 2022-01-10 | 2023-10-27 | 荣耀终端有限公司 | 操作系统升级方法、电子设备、存储介质及芯片系统 |
CN116088883A (zh) * | 2023-04-11 | 2023-05-09 | 北京朝歌数码科技股份有限公司 | 终端设备烧录方法、生产方法、终端设备及外部存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113821221B (zh) | 2022-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113821221B (zh) | 安装操作系统的方法、设备及存储介质 | |
CN113821235B (zh) | 操作系统数据更新方法、设备、存储介质及程序产品 | |
CN113821233B (zh) | 操作系统升级方法、设备、存储介质及计算机程序产品 | |
WO2022262751A1 (zh) | 操作系统升级方法、设备、存储介质及计算机程序产品 | |
US20230229424A1 (en) | Operating System Upgrade Method and Device, Storage Medium, and Computer Program Product | |
CN114116023B (zh) | 操作系统启动方法、设备、存储介质及计算机程序产品 | |
US12093678B2 (en) | Operating system management method, device, storage medium, and computer program product | |
CN113805956B (zh) | 操作系统的配置方法、设备及存储介质 | |
CN113900673B (zh) | 系统安装包的管理方法、设备、存储介质及程序产品 | |
CN114461257B (zh) | 操作系统数据配置方法、设备、存储介质及程序产品 | |
CN113806139B (zh) | 操作系统恢复方法、设备、存储介质及计算机程序产品 | |
CN116795438A (zh) | 配置操作系统制式的方法、设备及存储介质 | |
US20240296035A1 (en) | Method for Configuring Operating System Vendor Country, Device, and Storage Medium | |
CN113821234B (zh) | 操作系统升级方法、设备、存储介质及计算机程序产品 | |
US12131144B2 (en) | Updating operating system data in a static partition of an electronic device | |
CN115562695B (zh) | 操作系统升级方法、电子设备、存储介质及芯片系统 | |
CN116450169A (zh) | 操作系统升级方法、电子设备、存储介质及芯片系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230919 Address after: 201306 building C, No. 888, Huanhu West 2nd Road, Lingang New Area, Pudong New Area, Shanghai Patentee after: Shanghai Glory Smart Technology Development Co.,Ltd. Address before: Unit 3401, unit a, building 6, Shenye Zhongcheng, No. 8089, Hongli West Road, Donghai community, Xiangmihu street, Futian District, Shenzhen, Guangdong 518040 Patentee before: Honor Device Co.,Ltd. |