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

操作系统的配置方法、设备、存储介质及程序产品与流程

2021-12-17 21:55:00 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,具体地涉及一种操作系统的配置方法、设备、存储介质及计算机程序产品。


背景技术:

2.在现有技术的应用场景中,用户终端需要安装操作系统才可以被用户使用。例如,手机上需要安装手机操作系统(例如:ios系统、安卓系统)才可以被用户使用。由于操作系统的安装过程较为繁琐,并且,某些终端设备的操作系统需要特殊设备才可以进行安装,因此,为了便于用户使用终端设备,在终端设备销售前,终端设备内通常已安装有基础的操作系统。这样,用户在购买到终端设备后,不需要自行进行复杂的操作系统安装操作,就可以使用终端设备。例如,在手机被销售到用户手中前,手机上已安装有基础的手机操作系统。用户在购买到手机后,即可直接使用手机的基本功能(例如,连接到移动网络、拨打电话)。
3.在终端设备销售到用户手中后,在终端设备被使用的过程中,存在由于操作系统数据错误而导致设备运行错误甚至无法启动的情况。在这种情况下,由于系统运行已出现错误,用户很难令系统自行修复,只能将设备返厂重新刷写操作系统,这不仅会影响用户对终端设备的使用,而且也会大大增加设备供应商的维修成本。因此,需要一种针对操作系统数据错误的应对方法。


技术实现要素:

4.有鉴于此,本技术提供一种操作系统的配置方法、设备、存储介质及计算机程序产品,以利于解决现有技术中操作系统静态分区数据错误导致无法运行操作系统的问题。
5.第一方面,本技术实施例提供了一种操作系统的配置方法,应用于电子设备,所述电子设备包括处理器以及存储器,所述存储器包括基础分区、第一静态分区、第二静态分区、动态分区和用户数据分区,所述动态分区包括卡槽一数据和卡槽二数据,所述动态分区还包括第一动态子分区,所述卡槽一数据包含对应所述第一动态子分区的第一描述组和第二描述组,所述第一描述组的地址项的值为第一值,所述第二描述组的地址项的值为第二值,所述卡槽二数据与所述卡槽一数据一致;
6.所述电子设备加载所述基础分区、所述第一静态分区、所述动态分区的数据,以从所述第一静态分区启动,在加载所述动态分区的数据的过程中,读取所述卡槽一数据的第一描述组,基于所述第一描述组的地址项的值加载所述第一动态子分区的数据;
7.当所述电子设备被配置为从所述第二静态分区启动时,加载所述基础分区、所述第二静态分区、所述动态分区的数据,并且,在加载所述动态分区的数据的过程中,读取所述卡槽二数据的第二描述组,基于所述第二描述组的地址项的值加载所述第一动态子分区的数据;
8.所述方法包括:
9.修正所述卡槽二数据,包括,将所述卡槽二数据中第二描述组的地址项的值修改
为所述第一值。
10.在第一方面的一种实现方式中,所述修正所述卡槽二数据,还包括,将所述卡槽二数据中第一描述组的地址项的值修改为所述第二值。
11.在第一方面的一种实现方式中,所述第二值为空值。
12.在第一方面的一种实现方式中,所述动态分区还包括第二动态子分区,所述卡槽一数据包含对应所述第二动态子分区的第三描述组和第四描述组,所述第三描述组的地址项的值为第三值,所述第四描述组的地址项的值为第四值;
13.所述电子设备从所述第一静态分区启动时加载所述基础分区、所述第一静态分区、所述动态分区的数据,并且,在加载所述动态分区的数据的过程中,读取所述卡槽一数据的第三描述组,基于所述第三描述组的地址项的值加载所述第二动态子分区的数据;
14.所述电子设备从所述第二静态分区启动时加载所述基础分区、所述第二静态分区、所述动态分区的数据,并且,在加载所述动态分区的数据的过程中,读取所述卡槽二数据的第四描述组,基于所述第四描述组的地址项的值加载所述第二动态子分区的数据;
15.所述修正所述卡槽二数据,还包括,将所述卡槽二数据中第四描述组的地址项的值修改为所述第三值。
16.在第一方面的一种实现方式中,所述修正所述卡槽二数据,包括:
17.读取所述卡槽一数据或所述卡槽二数据,生成第一表数据;
18.删除所述第一表数据中名称项和/或组项的值的后缀名为_a的描述组,生成第二表数据;
19.将所述第二表数据中描述组的名称项的值的后缀名由_a修改为_b,生成第三表数据;
20.将所述第三表数据中各个描述组的地址项的值,分别赋值给所述卡槽二数据中具有相同名称项值的描述组的地址项;
21.将所述卡槽二数据中名称项值后缀名为_a的描述组的地址项置空。
22.在第一方面的一种实现方式中,所述修正所述卡槽二数据,包括:
23.读取所述卡槽一数据或所述卡槽二数据,生成第一表数据;
24.删除所述第一表数据中名称项和/或组项的值的后缀名为_a的描述组,生成第二表数据;
25.将所述第二表数据中描述组的名称项的值的后缀名由_a修改为_b,生成第三表数据;
26.将所述卡槽二数据中所有描述组的地址项的值置空;
27.将所述第三表数据中各个描述组的地址项的值,分别赋值给所述地址项的值置空后的卡槽二数据中具有相同名称项值的描述组的地址项。
28.在第一方面的一种实现方式中,所述修正所述卡槽二数据之前,所述方法还包括:
29.获取操作系统安装包,其中,所述操作系统安装包包括基础分区数据、静态分区数据、动态分区数据,所述动态分区数据包括所述卡槽一数据、所述卡槽二数据以及所述第一动态子分区的数据;
30.根据所述操作系统安装包,在所述电子设备的所述基础分区、所述第一静态分区、所述第二静态分区、所述动态分区中烧录数据。
31.第二方面,本技术提供一种电子设备,所述电子设备包括处理器以及存储器,所述存储器包括基础分区、第一静态分区、第二静态分区、动态分区和用户数据分区,所述动态分区包括卡槽一数据和卡槽二数据,所述动态分区还包括第一动态子分区,所述卡槽一数据包含对应所述第一动态子分区的第一描述组和第二描述组,所述第一描述组的地址项的值为第一值,所述第二描述组的地址项的值为第二值,所述卡槽二数据与所述卡槽一数据一致;
32.所述处理器用于执行所述存储器上存储的软件代码,以使得:
33.所述电子设备启动后加载所述基础分区、所述第一静态分区以及所述动态分区的数据,以从所述第一静态分区启动,在加载所述动态分区的数据的过程中,读取所述卡槽一数据的第一描述组,基于所述第一描述组的地址项的值加载所述第一动态子分区的数据;
34.当所述电子设备被配置为从所述第二静态分区启动时,加载所述基础分区、所述第二静态分区、所述动态分区的数据,并且,在加载所述动态分区的数据的过程中,读取所述卡槽二数据的第二描述组,基于所述第二描述组的地址项的值加载所述第一动态子分区的数据;
35.所述电子设备执行如第一方面所述的方法流程。
36.第三方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行如第一方面所述的方法。
37.第四方面,本技术提供一种计算机程序产品,所述计算机程序产品包括计算机程序,当其在计算机上运行时,使得计算机执行如第一方面所述的方法。
38.根据本技术实施例所提出的上述技术方案,至少可以实现下述技术效果:
39.根据本技术实施例的方法,可以使得设备支持从任意静态分区启动,从而可以在一个静态分区数据出错时从另一个静态分区启动,以确保顺利运行操作系统。
附图说明
40.为了更清楚地说明本技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
41.图1所示为一应用场景下设备出厂前进行系统烧录的烧录系统框架结构示意图;
42.图2所示为根据本技术一实施例的数据存储结构示意图;
43.图3所示为根据本技术一实施例的操作系统升级的流程图;
44.图4所示为一应用场景下设备出厂前进行系统烧录的烧录系统框架结构示意图;
45.图5所示为一实施例中slot0所保存的部分数据;
46.图6所示为一应用场景下设备上操作系统的数据保存结构框架示意图;
47.图7所示为一应用场景下设备出厂前被烧录操作系统后的数据保存结构框架示意图;
48.图8所示为根据本技术一实施例的出厂前操作系统安装流程图;
49.图9所示为根据本技术一实施例的出厂前定制操作系统安装流程图;
50.图10所示为一实施例中数据内容变化示意图;
51.图11所示为根据本技术一实施例的出厂前操作系统安装流程图。
具体实施方式
52.为了更好的理解本技术的技术方案,下面结合附图对本技术实施例进行详细描述。
53.应当明确,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。
54.在本技术实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本技术实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
55.应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,甲和/或乙,可以表示:单独存在甲,同时存在甲和乙,单独存在乙这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
56.针对终端设备销售到用户手中后,操作系统数据错误而导致设备运行错误甚至无法启动的问题,一种可行的解决方案是在设备出厂前,就在设备上构建操作系统备份数据。这样,在终端设备销售到用户手中后,当操作系统数据出现错误时,可以利用备份数据回滚到操作系统出现错误之前的状态。但是,备份数据会占据存储空间,这就会压缩用户可以自由使用的数据空间,造成存储空间浪费。
57.为解决上述问题,本技术通过解析操作系统的数据存储结构,在设备出厂前,利用原始的操作系统存储空间实现数据备份,从而在不压缩用户可以自由使用的数据空间的前提下,在操作系统数据出现错误时,确保设备可以正常运行以及顺利启动。
58.具体的,图1所示为一应用场景下设备出厂前进行系统烧录的烧录系统框架结构示意图,如图1所示,在设备100完成硬件组装后,设备100被连接到烧录设备110上,存储器120连接到烧录设备110。存储器120中保存有操作系统的系统安装包,系统安装包包含操作系统的镜像文件。烧录设备110读取存储器120中的系统安装包,解析系统安装包获取操作系统的镜像文件,基于操作系统的镜像文件进行数据烧录,将操作系统的镜像文件对应的操作系统数据烧录到设备100的存储器上,从而实现出厂前在设备100上安装操作系统。
59.本技术实施例的设备100包括但不限于可以安装操作系统的智能手机、智能耳机、平板电脑、智能冰箱、智能音箱等。设备100也可以是设备内部可以安装操作系统的控制板。操作系统的示例性实施例包括但不限于linux或者其它操作系统。
60.以采用虚拟a/b升级方式的安卓系统为例,图1所示为安卓系统在终端设备上的数据存储结构示意图。在烧录设备110在设备100上烧录操作系统后,设备100中所保存的操作系统文件结构如图2所示,安卓系统数据存储区包含基础分区(common)、静态分区(a)、静态分区(b)、动态分区(super)、用户数据分区(userdata)。
61.userdata用于存储用户的个人数据,例如,用户个人安装的app、用户个人保存的图片、文档以及视频等个人数据。基础部分中保存的数据为不参与操作系统升级的系统数据。静态分区(a)与静态分区(b)的结构相互对应,子分区命名通过后缀_a以及_b相互区分。
例如,静态分区(a)包括bootloader_a、boot_a、vendor_boot_a、dtbo_a、vbmeta_a;静态分区(b)包括bootloader_b、boot_b、vendor_boot_b、dtbo_b、vbmeta_b。动态分区(super)包含多个子分区(system、system_ext、product、vendor、odm)。
62.在设备启动时,从一个静态分区启动。例如,设备从静态分区(a)启动:依次加载基础分区(common)、静态分区(a)以及动态分区(super);设备从静态分区(b)启动:依次加载基础分区(common)、静态分区(b)以及动态分区(super)。
63.以采用主引导记录(master boot record,mbr)格式的通用闪存(universal flash storage,ufs)为例。在ufs的mbr(主引导扇区,ufs的第一个扇区,即c/h/s地址的0柱面0磁头1扇区)中,保存有设备启动顺序描述,例如,从静态分区(a)启动(启动顺序标志为a)或从静态分区(b)启动(启动顺序标志为a)。设备启动后首先从ufs的mbr中读取设备启动顺序。
64.图3所示为针对图2所示系统数据存储结构进行操作系统升级的流程图,当设备当前是从静态分区(a)启动时,设备按照如图3所示的流程实现操作系统的升级。
65.s300,设备依次加载基础分区(common)、静态分区(a)以及动态分区(super),从静态分区(a)启动。
66.s310,设备获取操作系统升级安装包;
67.示例的,在一种可行的实现方案中,设备定期向搜包服务器发起搜包请求,搜包请求包含设备当前运行的操作系统的版本号(例如版本1.1);搜包服务器根据搜包请求中的操作系统版本号,检索当前是否存在更新版本号的操作系统安装包(例如版本1.2);当存在更新版本的操作系统安装包时,搜包服务器向设备反馈操作系统升级安装包(例如,由版本1.1升级到版本1.2的操作系统升级包)的下载地址;设备根据操作系统升级安装包的下载地址下载操作系统升级安装包,并将操作系统升级安装包保存到用户数据分区(userdata)。
68.s320,设备从用户数据分区(userdata)读取s310中所保存的操作系统升级安装包,根据操作系统升级安装包针对静态分区(b)进行数据写入操作以升级静态分区;
69.例如,在操作系统升级安装包中包含版本1.2的静态分区的数据,设备将版本1.2的静态分区的数据覆写到静态分区(b)中。
70.s330,设备根据操作系统升级安装包在用户数据分区(userdata)创建虚拟动态分区,在虚拟动态分区写入动态分区(super)的升级数据。例如,在操作系统升级安装包中包含版本1.2的动态分区的数据,设备在虚拟动态分区中写入版本1.2的动态分区(super)的数据。
71.进一步的,在虚拟a/b升级方案中,针对动态分区(super),采用增量升级方式。在升级过程中,用户数据分区(userdata)的虚拟动态分区中保存的并不是升级后新版本的动态分区(super)的全部文件,而是旧版本的动态分区(super)中需要升级的数据在升级后的升级结果。即,用户数据分区(userdata)的虚拟动态分区中保存的是动态分区的更新数据。
72.以system子分区为例,假设在版本1.1中,system子分区中的数据可以分为system1、system2两部分。从版本1.1升级到版本1.2,数据system2没有发生变化,数据syetem1被升级为system3。那么,在s330中,设备在用户数据分区(userdata)创建虚拟动态分区,在虚拟动态分区中写入数据system3。
73.例如,版本1.1升级到版本1.2的系统增量升级安装包包含版本1.1升级到版本1.2的动态分区(super)更新数据,该动态分区(super)更新数据包含数据system3。
74.进一步的,在虚拟a/b升级方案中,基于快照技术(snapshot)实现动态分区(super)的增量升级。具体的,用户数据分区(userdata)的虚拟动态分区中,采用写时拷贝(copy

on

write,cow)文件保存动态分区(super)的升级数据。
75.具体的,用户数据分区(userdata)中保存的动态分区(super)的升级数据包含多个cow文件,每个cow文件对应一个动态分区(super)的子分区,cow文件的命名与其所针对的动态分区(super)子分区相对应。
76.在s310所获取的操作系统升级安装包中,动态分区(super)的升级数据的cow文件以二进制代码形式压缩保存。在操作系统升级安装包中,每个cow文件根据其所针对的动态分区(super)子分区所命名。例如,针对system子分区的cow文件被命名为system

cow

img.img.0000。
77.在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。
78.进一步的,在s330中,在用户数据分区(userdata)中创建update文件夹,将重命名的cow文件保存到update文件夹下。例如,在一应用场景中,在向用户数据分区(userdata)写入cow文件后,用户数据分区(userdata)的update文件夹中包含下述文件:
79.system_b

cow

img.img.0000;
80.system_ext_b

cow

img.img.0000;
81.vendor_b

cow

img.img.0000;
82.product_b

cow

img.img.0000;
83.cust_b

cow

img.img.0000;
84.odm_b

cow

img.img.0000。
85.具体的,cow文件中包含cow文件自身的cow文件地图(快照map)以及升级数据。cow文件地图(快照)与cow文件所针对的动态分区(super)的子分区的文件地图相对应。动态分区(super)的子分区的文件地图用于描述当前版本的操作系统(本次升级之前的版本,例如,版本1.1)动态分区(super)的子分区中的所有文件以及各个文件的保存地址。
86.cow文件中的升级数据为相较于当前版本的子分区数据,新版本的子分区数据中被更新的文件;cow文件自身的cow文件地图则用于描述被更新的文件与当前版本的子分区中的文件间的对应关系以及被更新的文件的保存地址。
87.基于动态分区(super)的子分区的文件地图以及cow文件中的cow文件地图,就可以使用cow文件中的升级数据替换动态分区(super)的子分区中的对应文件,从而实现动态分区(super)数据的升级。具体的,在需要获取动态分区(super)的子分区的文件地图时,可以基于snapshot对动态分区(super)的子分区的数据进行快照操作以生成动态分区(super)的子分区的文件地图。也可以在制作操作系统升级安装包时,预先生成动态分区
(super)的子分区的文件地图,将该文件地图加入到cow文件中。
88.以system子分区为例,假设system子分区中按照以下路径保存数据:
89./system/app/a0.xxx;
90./system/app/a1.xxx;
91./system/app/a2.xxx;
92./system/b0.xxx;
93./system/b1.xxx;
94./system/user/c0.xxx;
95./system/user/c1.xxx;
96./system/user/c2.xxx;
97./system/user/c3.xxx。
98.system子分区的文件地图可以是:
99./system/app/a0.xxx:024010~024013;
100./system/app/a1.xxx:024014~024017;
101./system/app/a2.xxx:024018~024020;
102./system/b0.xxx:024021~024026;
103./system/b1.xxx:024027~024028;
104./system/user/c0.xxx:024029~024032;
105./system/user/c1.xxx:024033~024035;
106./system/user/c2.xxx:024036~024040;
107./system/user/c3.xxx:024041~024044。
108.文件名后的数值(例如,/system/app/a0.xxx:024010~024013中的024010~024013)为该文件在动态分区(super)的system子分区的物理保存地址(块地址)。
109.假设当前操作系统升级需要更新数据/system/app/a2.xxx以及/system/user/c2.xxx。
110.可以视为:
111./system/app/a2.xxx以及/system/user/c2.xxx为system子分区数据的system1部分;
112./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部分。
113.那么,针对system子分区的cow文件(system_b

cow

img.img.0000)就包含最新版的/system/app/a2.xxx以及/system/user/c2.xxx。
114.可以视为,最新版的/system/app/a2.xxx以及/system/user/c2.xxx为system3。升级目标是使用system3更新掉system1。
115.当cow文件中的更新数据的大小与其所要更新的原始数据的大小一致,并且,cow文件中的更新数据在数据更新后在子分区中的保存位置与其所要更新的原始数据在子分区中的保存位置一致时,cow文件(system_b

cow

img.img.0000)自身的cow文件地图可以为:
116./system/app/a2.xxx:
117.map1(原super分区中待更新数据的地址):起始地址address start:024018(相对于system起始地址的偏移量);偏移量大小size:2(即024018~024020地址段的数据)
118.map2(cow文件中存储的更新数据的地址):起始地址address start:045033(相对于cow文件存储的起始地址的偏移量);偏移量大小size:2(即045033~045035地址段的数据);
119./system/user/c2.xxx:
120.map1(原super分区中待更新数据的地址):起始地址address start:024036(相对于system起始地址的偏移量);偏移量大小size:4(即024036~024040地址段的数据)
121.map2(cow文件中存储的更新数据的地址):起始地址address start:045036(相对于cow文件存储的起始地址的偏移量);偏移量大小size:4(即045036~045040地址段的数据)。
122.当cow文件中的更新数据的大小与其所要更新的原始数据的大小不一致时,cow文件(system_b

cow

img.img.0000)自身的cow文件地图可以为:
123./system/app/a2.xxx:
124.map1.1(原super分区中待更新数据的地址):起始地址address start:024018(相对于system起始地址的偏移量);偏移量大小size:2(即024018~024020地址段的数据)
125.map2.1(cow文件中存储的,需要覆盖map1.1地址的更新数据的地址):起始地址address start:045033(相对于cow文件存储的起始地址的偏移量);偏移量大小size:2(即045033~045035地址段的数据);
126.map1.2(cow文件中更新数据超出待更新数据大小的那一部分在原super分区中的待写入地址):起始地址address start:025018(相对于system起始地址的偏移量);偏移量大小size:1(即025018~025020地址段的数据)
127.map2.2(cow文件中存储的,需要覆盖map1.2地址的更新数据的地址):起始地址address start:046033(相对于cow文件存储的起始地址的偏移量);偏移量大小size:2(即046033~046035地址段的数据)。
128.在接下来的说明书描述中,为便于描述,仅以当cow文件中的更新数据的大小与其所要更新的原始数据的大小一致,并且,cow文件中的更新数据在数据更新后在子分区中的保存位置与其所要更新的原始数据在子分区中的保存位置一致的应用场景进行举例说明。
129.在上述例子中,地址段(045033~045035以及045036~045040)分别为cow文件(system_b

cow

img.img.0000)中最新版的/system/app/a2.xxx以及/system/user/c2.xxx在用户数据分区(userdata)的物理保存地址(块地址)。
130.这样,如果使用地址045033~045035上的a2.xxx替换掉地址024018~024020上的a2.xxx,并且,使用地址045036~045040上的c2.xxx替换掉地址024036~024040上的c2.xxx,就可以完成动态分区(super)的system子分区的数据升级。
131.进一步的,在s330中,在将cow文件写入用户数据分区(userdata)后,还需要对动态分区(super) cow文件进行整体校验,校验动态分区(super) cow文件的有效性,验证当前版本的动态分区(super)数据 cow文件的合成结果是否为新版本的动态分区(super)数据。
132.具体的,以从1.1版本升级到1.3版本为例,计算动态分区(super)中不需要升级的数据(从版本1.1到版本1.2未发生变化的数据)与cow文件中升级数据(从版本1.1到版本1.2需要升级的数据)的合成结果的哈希值,判断该哈希值与1.3版本中动态分区(super)的完整数据的哈希值是否一致,如果一致,则说明cow文件有效;如果不一致,则说明cow文件无效,升级失败,中断升级进程并报错;其中,1.3版本中动态分区(super)的完整数据的哈希值被保存在操作系统升级安装包中。
133.具体的,在校验过程中,基于snapshot合并动态分区(super) cow文件。在snapshot的实现过程中,动态分区(super)与cow文件的合并并不是物理意义上的合并,而是将cow文件中子分区的整体文件地图与cow文件自身的cow文件地图进行合并,生成新版本的子分区数据的文件地图。
134.例如,将system子分区的文件地图:
135./system/app/a0.xxx:024010~024013;
136./system/app/a1.xxx:024014~024017;
137./system/app/a2.xxx:024018~024020;
138./system/b0.xxx:024021~024026;
139./system/b1.xxx:024027~024028;
140./system/user/c0.xxx:024029~024032;
141./system/user/c1.xxx:024033~024035;
142./system/user/c2.xxx:024036~024040;
143./system/user/c3.xxx:024041~024044。
144.与cow文件地图:
145./system/app/a2.xxx:
146.map1:address start:024018;size:2(即024018~024020地址段的数据)
147.map2:address start:045033;size:2(即045033~045035地址段的数据);
148./system/user/c2.xxx:
149.map1:address start:024036;size:4(即024036~024040地址段的数据)
150.map2:address start:045036;size:4(即045036~045040地址段的数据)。
151.合并。则得到system子分区的新版本的文件地图:
152./system/app/a0.xxx:024010~024013;
153.(指向动态分区(super)中/system/app下的a0.xxx)
154./system/app/a1.xxx:024014~024017;
155.(指向动态分区(super)中/system/app下的a1.xxx)
156./system/app/a2.xxx:045033~045035;
157.(指向用户数据分区(userdata)中/update/system_b

cow

img.img.0000中的a2.xxx)
158./system/b0.xxx:024021~024026;
159.(指向动态分区(super)中/system下的b0.xxx)
160./system/b1.xxx:024027~024028;
161.(指向动态分区(super)中/system下的b1.xxx)
162./system/user/c0.xxx:024029~024032;
163.(指向动态分区(super)中/system/user下的c0.xxx)
164./system/user/c1.xxx:024033~024035;
165.(指向动态分区(super)中/system/user下的c1.xxx)
166./system/user/c2.xxx:045036~045040;
167.(指向用户数据分区(userdata)中/update/system_b

cow

img.img.0000中的c2.xxx)
168./system/user/c3.xxx:024041~024044。
169.(指向动态分区(super)中/system/user下的c3.xxx)
170.在新版本的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。
171.在校验过程中,按照上述合成方式,获取动态分区(super)的所有子分区的新版本的文件地图(如果用户数据分区(userdata)中并未写入某个子分区的对应cow文件,则直接以该子分区的文件地图为新版本的文件地图)。将所有子分区的新版本的文件地图组合生成动态分区(super)的新版本的文件系统。
172.基于动态分区(super)的新版本的文件系统读取数据,读取动态分区(super)的新版本的文件系统所包含的所有文件并计算哈希值。
173.当cow文件有效时,将基础分区(common)的元数据分区(/metadata)中的落盘状态信息由“已落盘(merged)”改为“未落盘(wait for merge)”。落盘状态信息用于表示当前是否存在需要落盘到动态分区(super)的cow文件。具体的,落盘状态信息包含针对动态分区(super)的整体标识以及针对每个子分区的子分区标识。当整体标识为“已落盘(merged)”时,代表动态分区(super)的所有子分区均不需要进行落盘操作;当整体标识为“未落盘(wait for merge)”时,代表动态分区(super)的一个或多个子分区需要进行落盘操作;当子分区标识为“已落盘(merged)”时,代表该子分区不需要进行落盘操作;当子分区标识为“未落盘(wait for merge)”时,代表该子分区需要进行落盘操作。
174.s331,将设备的启动顺序由从静态分区(a)启动变更为从静态分区(b)启动。
175.例如,改写主引导记录(master boot record,mbr)的启动顺序标识,将启动顺序标识由a改写为b。在设备上电后,当设备读取到启动顺序标识为a,设备从静态分区(a)启动,启动过程中加载静态分区(a);当设备读取到启动顺序标识为b,设备从静态分区(b)启动,启动过程中加载静态分区(b)。
176.s332,设备重启。退出当前的操作系统,切断设备电源,再次开启设备电源。
177.s340,设备依次加载基础分区(common)、静态分区(b)。
178.例如,设备首先加载基础分区(common)。在加载基础分区(common)的过程中,设备读取基础分区(common)中的启动标记;当基础分区(common)中的启动标记为(a)时,设备在加载基础分区(common)之后会加载静态分区(a),从而从静态分区(a)启动;当基础分区(common)中的启动标记为(b)时,设备在加载基础分区(common)之后会加载静态分区(b),
从而从静态分区(b)启动。
179.在s340中,设备读取基础分区(common)中的启动标记。基础分区(common)中的启动标记为(b),设备在加载基础分区(common)之后加载静态分区(b),从静态分区(b)启动。
180.s341,设备加载动态分区(super)以及用户数据分区(userdata)的虚拟动态分区。
181.具体的,设备读取元数据(/metadata)中的落盘状态信息,基于落盘状态信息确定是否需要从用户数据分区(userdata)的指定路径中检索cow文件,并采用snapshot合并加载动态分区(super)以及cow文件。
182.进一步的,在s341中,设备并不加载动态分区(super)以及用户数据分区(userdata)中的全部cow文件,而是根据操作系统运行需求加载对应的文件。具体的,在s341中,设备根据操作系统运行需求确定需要加载的文件,基于snapshot从动态分区(super)或虚拟动态分区中的cow文件中提取对应的文件进行加载。
183.具体的,在s341中,当动态分区(super)的子分区首存在对应的cow文件时,先基于snapshot生成动态分区(super)各个子分区的新版本的文件地图。生成新版本的文件地图的过程可以参照s330。设备根据操作系统运行需求确定需要加载的文件,基于动态分区(super)子分区的新版本的文件地图进行文件加载。
184.例如,操作系统运行需求加载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子分区的新版本的文件地图中:
185./system/user/c0.xxx:024029~024032;
186./system/user/c1.xxx:024033~024035;
187./system/user/c2.xxx:045036~045040;
188./system/user/c3.xxx:024041~024044。
189.加载地址024029~024032处的c0.xxx、地址024033~024035处的c1.xxx、地址045036~045040处的c2.xxx以及地址024041~024044处的c3.xxx。
190.进一步的,在加载system子分区下目录user(/system/user)中的所有数据时,当落盘状态信息中system子分区的子分区标识为“已落盘(merged)”时,设备就不会在用户数据分区(userdata)中/update下搜索cow文件,而是直接加载system子分区下目录user(/system/user)中的所有数据。
191.进一步的,在加载system子分区下目录user(/system/user)中的所有数据时,当落盘状态信息中system子分区的子分区标识为“未落盘(wait for merge)”时,如果设备在用户数据分区(userdata)中/update下未搜索到对应system子分区的cow文件时,则说明升级过程中数据写入错误(cow文件写入错误或者落盘状态信息写入错误),此时设备回滚系统并报错。
192.进一步的,在s341中,在加载文件之前,设备还需要对加载文件进行校验。不同于s330,在s341中,不对动态分区(super) cow文件进行整体验证,而是仅对需要加载的文件
进行验证。例如,基于dmverity进行校验(dm

verity是dm(device mapper)的一个目标(target),是一个虚拟块设备,专门用于文件系统的校验)。校验成功则加载文件,校验失败则重启设备,回滚系统或者尝试再次加载文件。
193.s350,设备成功启动,进入用户交互界面。
194.s351,设备在后台将虚拟动态分区的数据落盘到动态分区(super)。
195.在本技术说明书的描述中,落盘操作指的是,在操作系统升级过程中,将用户数据分区(userdata)上虚拟动态分区中保存的动态分区(super)升级文件(cow文件)写入到动态分区(super)中,使得动态分区(super)的文件完成数据升级,以便设备在下次启动时不需要加载动态分区(super)和虚拟动态分区,只需加载动态分区(super)就可以完成设备启动。
196.具体的,设备在启动成功后进行开机广播,开机广播后开启升级进程。升级进程读取基础分区(common)的元数据(/metadata)中的落盘状态信息,如果落盘状态信息为“已落盘(merged)”,则设备进入正常运行模式。
197.如果落盘状态信息为“未落盘(wait for merge)”,升级进程将用户数据分区(userdata)中的cow文件落盘到动态分区(super)中。
198.具体的,升级进程将用户数据分区(userdata)中的cow文件中的升级数据写入到动态分区(super)中的对应地址上,使得动态分区(super)中的全部数据均为升级后的新版本的数据。
199.例如,基于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上。
200.在此之后升级进程删除用户数据分区(userdata)中的cow文件,将存储空间归还给用户数据分区(userdata);并且,将基础分区(common)的元数据(/metadata)中的落盘状态信息由“未落盘(wait for merge)”改为“已落盘(merged)”。
201.在s320中,静态分区升级的数据操作是针对静态分区(b)中的操作系统数据的,其并不会影响到当前启动的静态分区(a)的操作系统数据;并且,在s330中,动态分区升级的数据操作是在用户数据分区(userdata)中所创建的虚拟动态分区上完成的,其并不会影响到当前挂载的动态分区(super)。因此,在整个操作系统升级的过程中,用户可以正常使用设备;并且,在s331完成后,设备并不需要立即重启,可以由用户自行选择重启时机;这样,操作系统的升级过程并不会对用户的正常手机操作产生影响,从而大大提高了用户体验。进一步的,针对动态分区(super),仅在需要进行升级时才会在用户数据分区(userdata)上创建虚拟动态分区,因此有效提高了数据存储空间利用率。
202.在图2所示的系统数据存储结构中,静态分区(a)与静态分区(b)的分区结构是一致的,并且,在操作系统运行时只需读取一个静态分区,那么,理论上讲,当一个静态分区不可用时,可以使用另一个静态分区来维持操作系统的正常运行。但是,在实际应用场景中,在采用虚拟a/b升级方式的安卓系统的终端设备完成出厂前的操作系统安装后,终端设备仅可以从静态分区(a),而无法从静态分区(b)启动。也就是说,在采用虚拟a/b升级方式的
安卓系统的终端设备完成出厂前的操作系统安装后,如果静态分区(a)出现数据错误,那么,设备无法从静态分区(b)启动,只能返厂进行操作系统数据的修复。
203.具体的,图4所示为一应用场景下设备出厂前进行系统烧录的烧录系统框架结构示意图。在采用虚拟a/b升级方式的安卓系统中,由于只有静态分区采用a/b方案,而动态分区采用升级时构造虚拟动态分区的方案。因此,为了静态分区与动态分区的匹配,如图4所示,在动态分区(super)的头部的元数据(/supermetadata)中,包含对应静态分区(a)的slot0(插槽一数据)以及静态分区(b)的slot1(插槽二数据)。slot0以及slot1用于保存super分区的分区表。
204.例如,在ufs的mbr中,设备启动顺序描述中,配置slot0对应从静态分区(a)启动,配置slot1对应从静态分区(b)启动。在设备启动时,根据启动的静态分区的不同,选择从slot0或slot1中的一个中获取super分区的分区信息。例如,在设备由静态分区a启动时,在加载super分区时,设备首先读取slot0,以获取super分区的子分区地址;在设备由静态分区b启动时,在加载super分区时,设备首先读取slot1,以获取super分区的子分区地址。
205.具体的,slot0以及slot1中包含多个子分区描述组,每个子分区描述组对应super分区的一个子分区。每个子分区描述组包含:
206.名称(name)项,其值为子分区的名称;
207.组(group)项,其值为子分区类型;
208.属性(attributes)项,其值为分区读写属性,例如,只读属性(readonly);
209.地址(extents)项,其值为子分区的地址。
210.在name项以及group项中,值的后缀为_a,则对应静态分区(a);值的后缀为_b,则对应静态分区(b)。
211.在由静态分区a启动,加载super分区时,首先读取slot0。在读取slot0时,由于后缀为_a对应静态分区(a),设备读取slot0中name项和/或group项后缀为_a的分区描述组中extents项的值,以获取super分区的子分区地址。
212.在由静态分区b启动,加载super分区时,首先读取slot1。在读取slot1时,由于后缀为_b对应静态分区(b),设备读取slot0中name项和/或group项后缀为_b的分区描述组中extents项的值,以获取super分区的子分区地址。
213.一般的,在slot0以及slot1中,针对super分区的每个子分区,存在两组子分区描述,一组子分区描述对应静态分区(a),一组子分区描述对应静态分区(b)。在读取slot0或slot1时,设备根据后缀(_a或_b)选定需要读取的子分区描述。
214.即,在slot0以及slot1中,针对super分区的每个子分区,针对每个子分区,均存在两个描述组(例如,第一描述组和第二描述组)。针对同一子分区的两个描述组的name项和group项的值的前缀相同,后缀不同(分别为_a以及_b)。针对同一子分区的两个描述组的地址项的值可以不同。
215.图5所示为一实施例中slot0所保存的部分数据。如图5所示,name项以及group项的值的后缀为_a的分区描述组中,extents项的值为子分区的真实地址。name项以及group项的值的后缀为_b的分区描述组中,extents项的值被置空。在由静态分区a启动,加载super分区时,首先读取slot0。在读取slot0时,由于后缀为_a对应静态分区(a),设备读取slot0中name项和/或group项后缀为_a的分区描述组中extents项的值,以获取super分区
的子分区地址,从而顺利加载super分区。
216.在读取slot0时,由于后缀为_b对应静态分区(b),设备无需读取slot0中name项和/或group项后缀为_b的分区描述组,因此,name项以及group项的值的后缀为_b的分区描述组中,extents项的值被置空不会影响super分区的加载。
217.进一步,在一实施例中,slot1所保存的数据与图5所示的数据结构类似,区别在于,为了确保顺利加载super分区,在slot1的数据中,name项以及group项的值的后缀为_b的分区描述组中,extents项的值为子分区的真实地址。name项以及group项的值的后缀为_a的分区描述组中,extents项的值被置空。
218.图6所示为一应用场景下设备上操作系统的数据保存结构框架示意图。以super分区的system子分区为例,如图6所示,slot0中针对system子分区(第一动态子分区)的数据为:
219.第一描述组:
220.name:system_a
221.group:qti_dynamic_partitions_a
222.attributes:readonly
223.extents:0..6995967linear super 2048(第一值)
224.第二描述组:
225.name:system_b
226.group:qti_dynamic_partitions_b
227.attributes:readonly
228.extents:(第二值)
229.这样,当设备从静态分区(a)启动时,设备读取slot0中后缀为_a的system_a子分区数据。基于slot0中的system_a数据,设备可以顺利加载system子分区。
230.如图6所示,slot1中针对system子分区的数据为:
231.第一描述组:
232.name:system_a
233.group:qti_dynamic_partitions_a
234.attributes:readonly
235.extents:(第二值)
236.第二描述组:
237.name:system_b
238.group:qti_dynamic_partitions_b
239.attributes:readonly
240.extents:0..6995967linear super 2048(第一值)
241.这样,当设备从静态分区(b)启动时,设备读取slot1中后缀为_b的system_b子分区数据。基于slot0中的system_b数据,设备可以顺利加载system子分区。
242.但是,在设备出厂前进行操作系统的烧录时,slot1与slot0中会烧录相同的数据。即,在slot1中,name项以及group项的值的后缀为_a的分区描述组中,extents项的值为子分区的真实地址。name项以及group项的值的后缀为_b的分区描述组中,extents项的值被
置空。这样,在设备出厂前进行操作系统的烧录后,如果试图从静态分区(b)启动设备,在加载super分区时,会从slot1中name项以及group项的值的后缀为_b的分区描述组中读取extents项的值。由于slot1中name项以及group项的值的后缀为_b的分区描述组中的extents项的值被置空,因此就会出现地址读取失败,从而无法顺利加载super分区。因此,静态分区(b)无法启动设备。
243.例如,图7所示为一应用场景下设备出厂前被烧录操作系统后的数据保存结构框架示意图。以super分区的system子分区为例,如图7所示,slot0中针对system子分区的数据为:
244.第一描述组:
245.name:system_a
246.group:qti_dynamic_partitions_a
247.attributes:readonly
248.extents:0..6995967linear super 2048(第一值)
249.第二描述组:
250.name:system_b
251.group:qti_dynamic_partitions_b
252.attributes:readonly
253.extents:(第二值)
254.如图7所示,slot1中针对system子分区的数据与slot0中一致,为:
255.第一描述组:name:system_a
256.group:qti_dynamic_partitions_a
257.attributes:readonly
258.extents:0..6995967linear super 2048(第一值)
259.第二描述组:
260.name:system_b
261.group:qti_dynamic_partitions_b
262.attributes:readonly
263.extents:(第二值)
264.这样,当设备从静态分区(b)启动时,设备读取slot1中后缀为_b的system_b子分区数据。由于slot1中的system_b数据的extents项被置空,因此设备无法顺利加载system子分区。
265.针对上述问题,本技术提出了一种操作系统的配置方法,在出厂前安装操作系统时,令super分区的slot0以及slot1均为正确的配置数据,使得静态分区(a)以及静态分区(b)均可以启动设备,从而在静态分区(a)出现数据错误时,用户可以通过静态分区(b)启动设备,维持操作系统正常运行并进行数据修复。
266.图8所示为根据本技术一实施例的出厂前操作系统安装流程图。存储器120中保存有操作系统的系统安装包,系统安装包包含操作系统的镜像文件。烧录设备110执行如图8所示的以下流程以在设备100上安装操作系统。
267.s800,烧录设备110读取存储器120中的系统安装包。
268.s801,烧录设备110解析系统安装包获取操作系统的镜像文件,基于操作系统的镜像文件进行数据烧录,将操作系统的镜像文件对应的操作系统数据烧录到设备100的存储器上。
269.在s801之后,设备100所保存的操作系统结构可参照图4。
270.s810,烧录设备110修改slot1中的数据,将slot1数据中对应静态分区b的super分区子分区描述数据修改为正确值。
271.具体的,在s810中,将slot1数据中name项以及group项的值的后缀为_b的分区描述组中extents项的值由置空修改为真实值。
272.进一步的,在s810中,还将slot1数据中name项以及group项的值的后缀为_a的分区描述组中extents项的值置空。例如,针对system子分区,将图7所示的slot1的数据修改为图6所示的slot1的数据。
273.或者,考虑到静态分区(b)启动设备,读取slot1时,并不读取name项以及group项的值的后缀为_a的分区描述组,因此,在s810中,对slot1数据中name项以及group项的值的后缀为_a的分区描述组中extents项的值不做修改。
274.进一步的,本技术对s810的具体实现方式不做具体限制,本领域的技术人员可以采用多种可行的实现方式实现s810。以下结合附图描述具体实施例以及举例说明s810的具体实现流程。以下通过具体实施例举例说明本技术实施例的具体实现流程。
275.图9所示为根据本技术一实施例的出厂前操作系统安装流程图。存储器120中保存有操作系统的系统安装包,系统安装包包含操作系统的镜像文件。烧录设备110执行如图9所示的以下流程以在设备100上安装操作系统。
276.s900以及s701可以参照s600以及s601。
277.s910,读取slot0或者slot1中的数据,保存为第一表数据;示例的,第一表数据中,system子分区为第一动态子分区,system_ext子分区为第二动态子分区。
278.第一描述组:
279.name:system_a
280.group:qti_dynamic_partitions_a
281.attributes:readonly
282.extents:0..6995967linear super 2048(第一值)
283.第二描述组:
284.name:system_b
285.group:qti_dynamic_partitions_b
286.attributes:readonly
287.extents:(第二值)
288.第三描述组:
289.name:system_ext_a
290.group:qti_dynamic_partitions_a
291.attributes:readonly
292.extents:0..262143linear super 6998016(第三值)
293.第四描述组:
294.name:system_ext_b
295.group:qti_dynamic_partitions_b
296.attributes:readonly
297.extents:(第四值)
298.s911,读取第一表数据中name项或group项的值;
299.s912,将第一表数据中name项或group项的值的后缀为_b的子分区描述组删除,获得第二表数据;
300.例如,slot0以及slot1中的部分数据如图10所示(第一表数据的部分数据为图5所示数据),读取slot0中的数据生成第一表数据,当由第一表数据生成第二表数据后,在第二表数据中对应图5所示部分数据的数据为:
301.第一描述组:
302.name:system_a
303.group:qti_dynamic_partitions_a
304.attributes:readonly
305.extents:0..6995967linear super 2048
306.第三描述组:
307.name:system_ext_a
308.group:qti_dynamic_partitions_a
309.attributes:readonly
310.extents:0..262143linear super 6998016
311.第一描述组与第三描述组所对应的第二描述组与第四描述组被删除。
312.s913,将第二表数据中name项以及group项的值的后缀(_a)修改为(_b),获得第三表数据;
313.在s913中,也可以不修改group项的值的后缀。
314.s914,选定第三表数据中一个未被选定过的子分区描述组(第一子分区描述组);
315.具体的,在s914之前,第三表数据中所有的子分区描述均为未被选定过的。在s913中,为所有的子分区描述组增加选择(checked)项,所有子分区描述组的checked项的值为0。在s914中,根据checked项的值确定未被选定过的子分区描述组(checked项的值为0的子分区描述组)。在s914中,当选定一个未被选定过的子分区描述组时,将该组中checked项的值置为1。
316.如图10所示,在第三表数据中对应图5所示部分数据的数据为:
317.name:system_b
318.group:qti_dynamic_partitions_b
319.attributes:readonly
320.extents:0..6995967linear super 2048
321.checked:0
322.name:system_ext_b
323.group:qti_dynamic_partitions_b
324.attributes:readonly
325.extents:0..262143linear super 6998016
326.checked:0
327.首次执行s914时,选定name为system_b的子分区描述组,将该子分区描述组的checked项置为1。
328.name:system_b
329.group:qti_dynamic_partitions_b
330.attributes:readonly
331.extents:0..6995967linear super 2048
332.checked:1
333.name:system_ext_b
334.group:qti_dynamic_partitions_b
335.attributes:readonly
336.extents:0..262143linear super 6998016
337.checked:0
338.第二次执行s914时,选定name为system_b的子分区描述组中checked项值为1,说明该子分区描述组已被选定过。选定name为system_ext_b的子分区描述组,将该子分区描述组的checked项置为1。
339.name:system_b
340.group:qti_dynamic_partitions_b
341.attributes:readonly
342.extents:0..6995967linear super 2048
343.checked:1
344.name:system_ext_b
345.group:qti_dynamic_partitions_b
346.attributes:readonly
347.extents:0..262143linear super 6998016
348.checked:1
349.s915,将slot1中各个子分区描述组的name项的值与第一子分区描述组的name项的值做匹配,确定slot1中name项的值与第一子分区描述组的name项的值一致的子分区描述组(第二子分区描述组);
350.s916,将第二子分区描述组中extents的值配置为第一子分区描述组中extents的值;
351.s917,判断第三表数据中是否存在未被选定过的子分区描述组;
352.如果存在,返回s914;
353.如不存在,执行s920;
354.例如,假设第一表数据的部分数据为图5所示数据,如图10所示,在执行s920之前(修正后),slot1中对应图5所示部分数据的数据为:
355.name:system_a
356.group:qti_dynamic_partitions_a
357.attributes:readonly
358.extents:0..6995967linear super 2048()
359.name:system_b
360.group:qti_dynamic_partitions_b
361.attributes:readonly
362.extents:0..6995967linear super 2048
363.name:system_ext_a
364.group:qti_dynamic_partitions_a
365.attributes:readonly
366.extents:0..262143linear super 6998016
367.name:system_ext_b
368.group:qti_dynamic_partitions_b
369.attributes:readonly
370.extents:0..262143linear super 6998016
371.s920,将slot1中name项或group项的值的后缀为_a的子分区描述组中extents的值置空。
372.例如,如图10所示,在执行s920之后(置空后),slot1中对应图5所示部分数据的数据为:
373.第一描述组:
374.name:system_a
375.group:qti_dynamic_partitions_a
376.attributes:readonly
377.extents:(第二值)
378.第二描述组:
379.name:system_b
380.group:qti_dynamic_partitions_b
381.attributes:readonly
382.extents:0..6995967linear super 2048(第一值)
383.第三描述组:
384.name:system_ext_a
385.group:qti_dynamic_partitions_a
386.attributes:readonly
387.extents:(第四值)
388.第四描述组:
389.name:system_ext_b
390.group:qti_dynamic_partitions_b
391.attributes:readonly
392.extents:0..262143linear super 6998016(第三值)
393.图11所示为根据本技术一实施例的出厂前操作系统安装流程图。存储器120中保
存有操作系统的系统安装包,系统安装包包含操作系统的镜像文件。烧录设备110执行如图6所示的以下流程以在设备100上安装操作系统。
394.s1100~s1113可以参照s900~s913。
395.s1114,将slot1中所有extents项的值置空。
396.s1115~s1117,参照s914~s916.
397.s1118,判断第三表数据中是否存在未被选定过的子分区描述组;
398.如果存在,返回s1115;
399.如不存在,流程结束。
400.进一步的,在根据本技术实施例的方法修正slot1中的数据后,设备就可以从静态分区(a)或静态分区(b)启动。具体的,根据需要启动的静态分区,修改设备的启动顺序,就可以使得设备在启动后从指定的静态分区启动。例如,改写设备主引导记录(master boot record,mbr)的启动顺序标识,将启动顺序标识写为a或b。在设备上电后,当设备读取到启动顺序标识为a,设备从静态分区(a)启动,启动过程中加载静态分区(a);当设备读取到启动顺序标识为b,设备从静态分区(b)启动。
401.进一步的,在一应用场景中,假设设备从静态分区(a)启动,当静态分区(a)数据出错,导致设备无法运行操作系统时,改写设备主引导记录(master boot record,mbr)的启动顺序标识,将启动顺序标识由a改写为b。在设备上电后,当设备读取到启动顺序标识为b,设备从静态分区(b)启动。从而确保在静态分区(a)出现数据错误时也可以顺利运行操作系统。
402.可以理解的是,上述实施例中的部分或全部步骤或操作仅是示例,本技术实施例还可以执行其它操作或者各种操作的变形。此外,各个步骤可以按照上述实施例呈现的不同的顺序来执行,并且有可能并非要执行上述实施例中的全部操作。
403.进一步的,一般的,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmable logic device,pld)(例如现场可编程门阵列(field programmable gate array,fpga))就是这样一种集成电路,其逻辑功能由访问方对器件编程来确定。由设计人员自行编程来把一个数字装置“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardware description language,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advanced boolean expression language)、ahdl(altera hardware description language)、confluence、cupl(cornell university programming language)、hdcal、jhdl(java hardware description language)、lava、lola、myhdl、palasm、rhdl(ruby hardware description language)等,目前最普遍使用的是vhdl(very

high

speed integrated circuit hardware description language)与verilog。本领域技术人员也应
该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
404.因此,本技术实施例所提出的方法流程可以以硬件方式实现,例如,使用控制器,控制器控制触摸屏以实现本技术实施例所提出的方法流程。
405.控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(application specific integrated circuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc 625d、atmel at91sam、microchip pic18f26k20以及silicone labs c8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
406.与上述实施例对应,本技术还提供了一种电子设备。电子设备包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发电子设备执行如本技术实施例所述的方法步骤。
407.本技术还提供一种计算机程序产品,计算机程序产品包括计算机程序,当其在计算机上运行时,使得计算机执行本技术实施例提供的部分或全部步骤。
408.本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
409.本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于装置实施例和终端实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
再多了解一些

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

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

相关文献