CN113238771B - 一种基于安卓***的fota固件升级方法和装置 - Google Patents
一种基于安卓***的fota固件升级方法和装置 Download PDFInfo
- Publication number
- CN113238771B CN113238771B CN202110460412.3A CN202110460412A CN113238771B CN 113238771 B CN113238771 B CN 113238771B CN 202110460412 A CN202110460412 A CN 202110460412A CN 113238771 B CN113238771 B CN 113238771B
- Authority
- CN
- China
- Prior art keywords
- partition
- firmware
- upgrading
- information
- configuration information
- 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.)
- Active
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/65—Updates
-
- 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
- G06F8/63—Image based installation; Cloning; Build to order
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于安卓***的FOTA固件升级方法和装置,所述方法包括:制定升级数据包,并将所述升级数据包存储于预设存储介质中;向待升级设备的固件分区中的第一位置写入第一升级信息;控制待升级设备进入升级模式,解析所述第一升级信息,获取所述升级程序,根据所述第一升级函数对所述依赖配置信息中所记载的所有分区镜像的固件进行升级,以及根据所述第二升级函数对所述***镜像配置信息中所记载的所有分区镜像的固件进行升级。通过本发明的基于安卓***的FOTA固件升级方法可以将待升级设备中的旧平台固件完整升级为新平台固件,支持对待升级设备的物理分区表进行任意变更,有效满足了不同应用场景下的需求。
Description
技术领域
本发明涉及一种固件升级领域,尤其涉及一种基于安卓***的FOTA固件升级方法和装置。
背景技术
FOTA(Firmware Over-the-Air)固件空中下载技术,即固件在线升级技术,是通过FOTA固件升级引擎以升级数据包作为输入完成固件的升级。
在现有技术中,对于不同大版本的Android***,其基础平台架构会有非常巨大的变化和不同,主要有两个方面的原因:
一方面是由于基于不同Android大版本适配的底层芯片平台技术的升级跃迁导致,这种技术跃迁往往是不兼容的。比如某厂商系列芯片Android 7.1平台和Android 9.0之后的平台,其分区表格式从MBR变更为了GPT,这是底层技术的不兼容变更。
另外一方面是因为Android操作***本身不同的大版本之间的技术跃迁通常也是不兼容的。比如Android 7.1,Android 9.0,Android 10.0和Android 11这四个操作***平台,在操作***本身的层面,Android 7.1的***部分基本只有一个system.img镜像文件,对应一个system物理分区;而Android 9.0则有system.img,vendor.img,odm.img等多个Android***镜像文件对应system、vendor、odm等多个物理分区;Android 10.0则进一步引入动态分区super;Android 11为了支持通用内核,引入GKI,增加vendor_boot,导致整个启动引导过程发生质的变化。
基于上述两方面的原因,为了实现Android***平台跨越大版本的升级,比如从Android 7.1升级到Android 10.0,国内外厂商的通常做法是将使用旧Android操作***平台的设备称为legacy设备,为了支持将legacy设备升级到新Android操作***,通常采用的做法是在新Android操作***平台中,按照legacy设备的方式编译***,忽略新操作***中新添加的不兼容的创新型特征,使新操作***的主要部分在legacy设备上能正常工作,也就是将新***中与旧***兼容的特征塞进legacy设备的分区表,从而实现Android***平台跨越大版本的升级。这种Android***平台跨越大版本的升级方式满足了用户将旧***升级到新***以及使用部分新***功能的需求(特别是GUI方面)。但是与完全使用新Android操作***的设备(称为launch设备)相比,即便***完成升级后用户也享受不到新***中与旧***不兼容的创新型技术。
此外,现有的Android***固件升级,无论是非AB固件的recovery固件升级引擎(固件升级引擎是以升级包作为输入,返回升级结果的核心固件升级程序)或者AB固件升级引擎都依赖于既有的每一个分区节点,通过这些分区设备节点来完成每一个分区固件的升级,这就意味着升级过程中不能改变设备的分区表。同时也不能从非AB***升级到AB***,或者从AB***升级到非AB***。
而现有支持分区表升级的FOTA,通常采用如下几种方式:1、支持物理分区表变更,但只能支持部分分区表变更或支持某些特定方式的变更;2、基本支持任意的分区表变更,由于采用定制的升级包,无法与和标准Android升级包兼容,需要对升级客户端和服务器进行改造。
发明内容
为此,需要提供一种基于安卓***的FOTA的技术方案,用以解决现有技术无法对设备的分区表进行任意变更以及升级后的新***无法体现与旧***不兼容的部分内容的技术问题。
为实现上述目的,本申请在第一方面提供了一种基于安卓***的FOTA固件升级方法,所述方法包括:
制定升级数据包,并将所述升级数据包存储于预设存储介质中;所述升级数据包中包括分区表描述文件、升级程序和升级函数;所述分区表描述文件包括依赖配置信息和***镜像配置信息;所述升级函数包括第一升级函数和第二升级函数;
向待升级设备的固件分区中的第一位置写入第一升级信息;所述第一升级信息包括第一升级指令和第一路径信息;所述第一路径信息与所述升级数据包在所述预设存储介质中的地址路径;
控制待升级设备进入升级模式,解析所述第一升级信息,获取所述升级程序,根据所述第一升级函数对所述依赖配置信息中所记载的所有分区镜像的固件进行升级,以及根据所述第二升级函数对所述***镜像配置信息中所记载的所有分区镜像的固件进行升级。
进一步地,所述升级函数还包括第三升级函数;所述方法还包括:
向待升级设备的固件分区中的第二位置写入第二升级信息;所述第二升级信息包括第二升级指令和第二路径信息;所述第二路径信息和所述第一路径信息相对应;
所述升级程序执行所述第三升级函数,解析所述第二位置中的第二升级信息,获取所述第二路径信息后,并擦除所述第二位置中原有存储的所有内容,以及将所述第二路径信息与擦除完成标记再次写入所述第二位置中,并重启所述待升级设备。
进一步地,所述方法包括:
读取所述第二位置的擦除完成标记,擦除所述待升级设备的可读写区域。
进一步地,所述方法包括:
在所述待升级设备的预设存储目录下创建一个标记文件,并在所述标记文件中写入所述第二路径信息,以及再次擦除当前第二位置中存储的所有内容。
进一步地,所述方法包括:
重启所述待升级设备,进入升级完成后的固件***,判断所述标记文件是否存在,若是则表示固件升级成功,根据用户的数据恢复指令执行所述可读写区域的数据恢复操作。
进一步地,所述分区表描述文件还包括分区布局配置信息;所述待升级设备的固件分区包括引导通信分区;所述根据所述第一升级函数对所述依赖配置信息中所记载的所有分区镜像的固件进行升级包括:
提取所述分区布局配置信息到所述待升级设备的内存,解析所述分区布局配置文件,并记录每个分区的分区信息;所述分区信息包括各个分区对应的分区名称、在预设存储介质中的起始位置和长度信息;
提取所述依赖配置信息到所述待升级设备的内存,然后解析所述依赖配置信息,按顺序提取所述依赖配置信息中所有分区镜像的名称;
读取所述第一位置中的第一升级信息并保存,根据所述分区布局配置信息升级分区表;
判断所述依赖配置信息的第一行是否为表征A/B***固件的第一预设字符串,如果是设置A/B标记为真;
遍历所述依赖配置信息提取的所有分区镜像的名称,剔除所述依赖配置信息第一行中用于标记A/B***固件的第一预设字符串;
根据所述分区布局配置信息提取到的分区信息中查找引导通信分区对应的起始位置和偏移地址,并对该分区进行全部写0x0操作;
将当前第一位置中记载的内容全部写入第二位置中,并在所述第二位置中写入第一升级函数完成标记,而后重启所述待升级设备。
进一步地,所述方法包括:
根据预设命名规则命名固件镜像文件,根据预设命名规则对应的关键词在所述升级数据包中查找符合第一名称要求的固件镜像文件,并将查找到的固件镜像文件提取到外部存储设备中;否则直接提取到待升级设备的内存中;
将查找到的各个分区镜像的名称与所述分区布局配置信息中提取到的分区信息中的各个分区名称进行比较,如果该分区镜像名称在所述分区布局配置信息有对应匹配的分区名,则对该分区名对应的镜像分区进行全部写0x0操作,而后对提取到的固件镜像文件进行固件升级操作;
如果该分区镜像名称在分区布局配置文件中没有对应匹配的分区名,并且此时A/B标记为真,则根据当前分区名进行格式变化,构造两个针对A/B***的分区名,然而将构造的两个针对A/B***的分区名与所述分区布局配置信息提取到的分区信息中的分区名称进行比较,如果找到匹配的分区项,则首先对该镜像分区进行全部写0x0操作,而后再对提取出来的固件镜像文件进行固件升级操作。
进一步地,所述分区表描述文件还包括分区布局配置信息;所述待升级设备的固件分区包括引导通信分区;所述根据所述第二升级函数对所述***镜像配置信息中所记载的所有分区镜像的固件进行升级包括:
提取所述分区布局配置信息到所述待升级设备的内存,解析所述分区布局配置文件,并记录每个分区的分区信息;所述分区信息包括各个分区对应的分区名称、在预设存储介质中的起始位置和长度信息;
提取所述升级数据包中的所述***镜像配置信息到内存,然后解析所述***镜像配置信息,按顺序提取所述***镜像配置信息中所有分区镜像的名称;
判断所述***镜像配置信息的第一行是否为标记A/B***固件的第二预设字符串,如果是则表明升级数据包中的固件是针对A/B***的,设置A/B标记为真;
遍历所述***镜像配置信息中所有分区镜像的名称,剔除所述***镜像配置信息第一行中用于标记A/B***固件的第二预设字符串。
进一步地,所述方法包括:
根据预设命名规则命名固件镜像文件,根据预设命名规则对应的关键词在所述升级数据包中查找符合第二名称要求的固件镜像文件,并将查找到的固件镜像文件提取到外部存储设备中;
将查找到的各个分区镜像的名称与所述分区布局配置信息中提取到的分区信息中的各个分区名称进行比较,如果该分区镜像名称在所述分区布局配置信息有对应匹配的分区名,则对该分区名对应的镜像分区进行全部写0x0操作,而后对提取到的固件镜像文件进行固件升级操作;
如果该分区镜像名称在分区布局配置文件中没有对应匹配的分区名,并且此时A/B标记为真,则根据当前分区名进行格式变化,构造两个针对A/B***的分区名,然而将构造的两个针对A/B***的分区名与所述分区布局配置信息提取到的分区信息中的分区名称进行比较,如果找到匹配的分区项,则首先对该镜像分区进行全部写0x0操作,而后再对提取出来的固件镜像文件进行固件升级操作。
本发明的第二方面还提供了一种安卓***的FOTA固件升级装置,所述装置用于执行如本发明第一方面任一项所述的方法。
区别于现有技术,通过本申请的基于安卓***的FOTA固件升级方法和装置,能够实现将一个Android操作***平台版本完全升级到另外一个大版本,它对legacy设备的整块存储介质完整地重新进行编程升级,从分区表到所有新版本平台的所有固件进行升级,升级后能够使legacy设备中的固件与launch设备完全一致,享受到所有launch设备能够享受到的所有创新技术体验。
附图说明
图1为本发明一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图;
图2为本发明另一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图;
图3为本发明另一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图;
图4为本发明另一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图;
图5为本发明另一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图;
图6为本发明另一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图;
图7为本发明另一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图;
图8为本发明另一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图;
图9为本发明另一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图;
图10为本发明另一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图。
具体实施方式
为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
本发明第一方面提供了一种基于安卓***的FOTA固件升级方法,它能够支持任意Android操作***大版本之间的互升,实现将一个Android操作***平台版本完全升级到另外一个大版本,同时支持针对设备分区表的任意变更升级,包括分区表格式的变更,比如将MBR变成GPT,且不依赖分区设备节点。特别地,本发明涉及的固件升级方法还支持Android***非AB固件和AB固件的互相升级。且只要求设备在升级时有存在可用的外部存储介质(TF/SD卡或者U盘),并且新旧平台固件中都包含“引导通信分区”(属于固件分区的一部分)用于固件升级各个不同阶段的通信。
同时,本发明的方法在对固件进行升级的过程中能和现有的Android标准升级***兼容,升级数据包使用zip压缩存档,并使用signapk.jar签名,与标准Android升级包兼容,从而使得现有的Android升级客户端和服务器能够无缝兼容本申请的固件升级引擎(即基于安卓***的FOTA固件升级装置)。
如图1所示,为本发明一具体实施方式所述基于安卓***的FOTA固件升级方法的流程图。所述方法包括:
首先进入步骤S101制定升级数据包,并将所述升级数据包存储于预设存储介质中;所述升级数据包中包括分区表描述文件、升级程序和升级函数;所述分区表描述文件包括依赖配置信息和***镜像配置信息;所述升级函数包括第一升级函数和第二升级函数。
而后进入步骤S102向待升级设备的固件分区中的第一位置写入第一升级信息;所述第一升级信息包括第一升级指令和第一路径信息;所述第一路径信息与所述升级数据包在所述预设存储介质中的地址路径。
而后进入步骤S103控制待升级设备进入升级模式,解析所述第一升级信息,获取所述升级程序,根据所述第一升级函数对所述依赖配置信息中所记载的所有分区镜像的固件进行升级,以及根据所述第二升级函数对所述***镜像配置信息中所记载的所有分区镜像的固件进行升级。
在本申请中,所述待升级设备包括固件分区,所述固件分区包括引导通信分区,所述第一升级信息被预先写入所述引导通信分区的第一位置;所述第一路径信息为所述升级数据包在所述预设存储介质的路径信息。
如图2所示,在某些实施例中,所述升级函数还包括第三升级函数;所述方法还包括:
首先进入步骤S201向待升级设备的固件分区中的第二位置写入第二升级信息;所述第二升级信息包括第二升级指令和第二路径信息;所述第二路径信息和所述第一路径信息相对应。优选的,所述第二路径信息是第一路径信息的镜像,即复制原有的第一路径信息将其存储至所述第二位置中。
而后进入步骤S202所述升级程序执行所述第三升级函数,解析所述第二位置中的第二升级信息,获取所述第二路径信息后,并擦除所述第二位置中原有存储的所有内容,以及将所述第二路径信息与擦除完成标记再次写入所述第二位置中,并重启所述待升级设备。
在某些实施例中,所述方法包括:读取所述第二位置的擦除完成标记,擦除所述待升级设备的可读写区域。优选的,所述方法包括:在所述待升级设备的预设存储目录下创建一个标记文件,并在所述标记文件中写入所述第二路径信息,以及再次擦除当前第二位置中存储的所有内容。
在某些实施例中,所述方法包括:重启所述待升级设备,进入升级完成后的固件***,判断所述标记文件是否存在,若是则表示固件升级成功,根据用户的数据恢复指令执行所述可读写区域的数据恢复操作。
如图3所示,在某些实施例中,所述分区表描述文件还包括分区布局配置信息;所述待升级设备的固件分区包括引导通信分区;所述根据所述第一升级函数对所述依赖配置信息中所记载的所有分区镜像的固件进行升级包括:
首先进入步骤S301提取所述分区布局配置信息到所述待升级设备的内存,解析所述分区布局配置文件,并记录每个分区的分区信息;所述分区信息包括各个分区对应的分区名称、在预设存储介质中的起始位置和长度信息;
而后进入步骤S302提取所述依赖配置信息到所述待升级设备的内存,然后解析所述依赖配置信息,按顺序提取所述依赖配置信息中所有分区镜像的名称;
而后进入步骤S303读取所述第一位置中的第一升级信息并保存,根据所述分区布局配置信息升级分区表;
而后进入步骤S304判断所述依赖配置信息的第一行是否为表征A/B***固件的第一预设字符串,如果是设置A/B标记为真;
而后进入步骤S305遍历所述依赖配置信息提取的所有分区镜像的名称,剔除所述依赖配置信息第一行中用于标记A/B***固件的第一预设字符串;
而后进入步骤S306根据所述分区布局配置信息提取到的分区信息中查找引导通信分区对应的起始位置和偏移地址,并对该分区进行全部写0x0操作;
而后进入步骤S307将当前第一位置中记载的内容全部写入第二位置中,并在所述第二位置中写入第一升级函数完成标记,而后重启所述待升级设备。
如图4所示,在某些实施例中,所述方法包括:
首先进入步骤S401根据预设命名规则命名固件镜像文件,根据预设命名规则对应的关键词在所述升级数据包中查找符合第一名称要求的固件镜像文件,并将查找到的固件镜像文件提取到外部存储设备中;否则直接提取到待升级设备的内存中;
而后进入步骤S402将查找到的各个分区镜像的名称与所述分区布局配置信息中提取到的分区信息中的各个分区名称进行比较,如果该分区镜像名称在所述分区布局配置信息有对应匹配的分区名,则对该分区名对应的镜像分区进行全部写0x0操作,而后对提取到的固件镜像文件进行固件升级操作;
步骤S401后也可以进入步骤S403如果该分区镜像名称在分区布局配置文件中没有对应匹配的分区名,并且此时A/B标记为真,则根据当前分区名进行格式变化,构造两个针对A/B***的分区名,然而将构造的两个针对A/B***的分区名与所述分区布局配置信息提取到的分区信息中的分区名称进行比较,如果找到匹配的分区项,则首先对该镜像分区进行全部写0x0操作,而后再对提取出来的固件镜像文件进行固件升级操作。
如图5所示,所述分区表描述文件还包括分区布局配置信息;所述待升级设备的固件分区包括引导通信分区;所述根据所述第二升级函数对所述***镜像配置信息中所记载的所有分区镜像的固件进行升级包括:
首先进入步骤S501提取所述分区布局配置信息到所述待升级设备的内存,解析所述分区布局配置文件,并记录每个分区的分区信息;所述分区信息包括各个分区对应的分区名称、在预设存储介质中的起始位置和长度信息;
而后进入步骤S502提取所述升级数据包中的所述***镜像配置信息到内存,然后解析所述***镜像配置信息,按顺序提取所述***镜像配置信息中所有分区镜像的名称;
而后进入步骤S503判断所述***镜像配置信息的第一行是否为标记A/B***固件的第二预设字符串,如果是则表明升级数据包中的固件是针对A/B***的,设置A/B标记为真;
而后进入步骤S504遍历所述***镜像配置信息中所有分区镜像的名称,剔除所述***镜像配置信息第一行中用于标记A/B***固件的第二预设字符串。
如图6所示,在某些实施例中,所述方法包括:
首先进入步骤S601根据预设命名规则命名固件镜像文件,根据预设命名规则对应的关键词在所述升级数据包中查找符合第二名称要求的固件镜像文件,并将查找到的固件镜像文件提取到外部存储设备中;
而后进入步骤S602将查找到的各个分区镜像的名称与所述分区布局配置信息中提取到的分区信息中的各个分区名称进行比较,如果该分区镜像名称在所述分区布局配置信息有对应匹配的分区名,则对该分区名对应的镜像分区进行全部写0x0操作,而后对提取到的固件镜像文件进行固件升级操作;
步骤S601后也可以进入步骤S603如果该分区镜像名称在分区布局配置文件中没有对应匹配的分区名,并且此时A/B标记为真,则根据当前分区名进行格式变化,构造两个针对A/B***的分区名,然而将构造的两个针对A/B***的分区名与所述分区布局配置信息提取到的分区信息中的分区名称进行比较,如果找到匹配的分区项,则首先对该镜像分区进行全部写0x0操作,而后再对提取出来的固件镜像文件进行固件升级操作。
本发明第二方面还提供了一种安卓***的FOTA固件升级装置,所述装置用于执行如本发明第一方面所述的方法。
下面结合本申请图7至图10,对于本申请涉及的安卓***的FOTA固件升级方法详细展开说明。
如图7所示,为本申请涉及的固件升级方法的总体框架流程图,具体如下:
首先进入步骤S701按照升级包的构成要求,制作固件升级包,并签名。
而后进入步骤S702客户端校验升级包,同时判断升级包是否是跨平台完全升级的升级包,如果是,将升级包放在外置存储并做好可能的数据备份操作。
而后进入步骤S703往“引导通信分区”的固定位置1写入升级指令、升级包的存放路径和标记本次升级为跨平台完全升级,重启设备,进入recovery模式。
而后进入步骤S704在recovery中,读取“引导通信分区”的固定位置1,如果存在跨平台完全升级的标记,则仅校验升级包的合法性,不对升级包进行任何其他形式的检查。
而后进入步骤S705提取升级包中的升级程序update-binary并运行,然后update-binary依据升级脚本updater-script开始进行固件升级。
而后进入步骤S706执行升级脚本updater-script中的升级指令1来完成“平台recovery镜像依赖配置文件”所描述的所有分区镜像的固件升级。
而后进入步骤S707执行升级脚本updater-script中的升级指令2完成“平台***镜像配置文件”所描述的所有分区镜像的固件升级。
而后进入步骤S708执行升级脚本updater-script中的升级指令3,该升级指令3被解析后首先读取引导通信分区的固定位置2的内容,获取升级包的存放路径信息,然后擦除引导通信分区的固定位置2中的内容,并在该位置写入擦除标记和升级包的存放路径信息,最后重启设备进入recovery。
而后进入步骤S709 recovery读取“引导通信分区”的固定位置2,如果存在擦除标记,则对平台中的用户可读写分区进行擦除操作,包括data和Cache。
而后进入步骤S710在/cache/recovery下创建一个标记文件,并在该标记文件中写入“引导通信分区”的固定位置2读取到的升级包的存放路径信息,表示本次升级完成,擦除“引导通信分区”的固定位置2的内容。
而后进入步骤S711重启设备,进入升级后的***,升级客户端可以根据/cache/recovery/下的标记文件判断跨平台升级完成,根据需要进行数据恢复操作。
所述固件升级包即为“升级数据包”,在本申请中,所述固件升级包包含有以下三部分内容:(1)升级引擎配置文件;(2)升级程序(update-binary)与升级脚本(updater-script);(3)固件镜像文件。
所述升级引擎配置文件一般包含有以下三种,具体如下:
第一,平台recovery镜像依赖配置文件(如plat_fw_complete.txt),即前文提及的“依赖配置信息”。
该镜像依赖配置文件中描述了对应的Android平台启动recovery过程中所涉及到的所有分区镜像的名字,通常包括启动引导程序分区镜像、芯片安全相关的***分区镜像、存储recovery镜像完整性校验信息的安全校验分区镜像和recovery分区镜像(recovery.img)。如果该固件升级包(即升级数据包)是AndroidA/B***的固件文件,则对应的recovery分区镜像为启动引导镜像boot.img(因为AndroidA/B***没有recovery.img)。
该镜像依赖配置文件中的每一行记录一个分区镜像的名字(如uboot,trust,recovery)。每一个分区镜像仅对应一行,也就说,即使是A/B***固件这里每一行所记录的分区镜像的名字也不带后缀_a和_b,比如当安卓***为A/B***时,有uboot_a和uboot_b,但在该配置文件中仅配置一行uboot,升级数据包里也只有一个被命名为uboot.img的固件镜像文件,a和b分区使用同一个镜像文件。
如果该固件升级包是AndroidA/B***的固件文件,则该镜像依赖配置文件的第一行是一个特殊的字符串,用于表明该固件升级包里的固件是A/B***的。
第二,平台***镜像配置文件(如plat_fw_system.txt),即前文提及的“***镜像配置信息”。
该平台***镜像配置文件描述了一个Android平台中除了“平台recovery镜像依赖配置文件”中所描述的分区镜像以外的所有其他分区镜像的名字,通常这里的其他分区镜像包括启动引导分区镜像(boot.img)和Android***分区镜像。如果该固件升级包是Android A/B***的固件文件,则这里无需写入启动引导分区镜像(boot.img),因为在AndroidA/B***中,recovery的功能包含在启动引导分区镜像(boot.img)中,从而在“平台recovery镜像依赖配置文件”中有所描述。
与“平台recovery镜像依赖配置文件”相类似的,该平台***镜像配置文件的每一行记录了一个分区镜像的名字(如system,super),并且每一个分区镜像仅对应一行。也就说,即使是A/B***固件这里每一行所记录的分区镜像的名字也不带后缀_a和_b,比如当A/B***时,有system_a和system_b,但在该平台***镜像配置文件中仅配置一行system,升级数据包里也只有一个名为system.img的固件镜像文件,a和b分区使用同一个镜像文件。如果该固件升级包是AndroidA/B***的固件文件,则该配置文件的第一行是一个特殊的字符串,用于表明该固件升级包里的固件是A/B***的。
第三,分区布局配置文件(如parameter.txt),即前文提及的“分区布局配置信息”。
所述分区布局配置文件中描述了一个Android平台每一个分区在flash存储介质中的起始位置、长度以及分区表类型(GPT或MBR)。
所述升级脚本可被命名为updater-script,它包括以下三条特殊的指令:升级指令1(即前文提及的第一升级函数)、升级指令2(即前文提及的第二升级函数)和升级指令3(即前文提及的第三升级函数)。
所述升级指令1被执行时用于完成“平台recovery镜像依赖配置文件”所描述的所有分区镜像的固件升级并重启设备。所述升级指令2被执行时用于完成“平台***镜像配置文件”所描述的所有分区镜像的固件升级。所述升级指令3被执行时用于在引导通信分区的固定位置2写入擦除标记并重启设备。
所述升级程序被命名为update-binary,用于实现上述升级脚本中的三条特殊指令。
所述固件镜像文件由构成一个Android平台的所有固件所构成,包括“平台recovery镜像依赖配置文件”和“平台***镜像配置文件”这两个配置文件中描述的每一个分区镜像,也就是说这两个配置文件每一行所指明的分区镜像的名字,都对应有一个固件镜像文件。每个固件镜像文件以“分区镜像的名字+特定后缀”进行命令,以区分不同的分区镜像文件,所述特定后缀可以是.bin或.img等。
如图8所示,为所述升级指令1被执行时所实现的方法步骤,具体包括:
首先进入步骤S801提取固件升级包中的分区布局配置文件到内存,然后解析该分区布局配置文件,记录每个分区的名字、在存储介质中的起始位置和长度信息。
而后进入步骤S802提取固件升级包中的平台recovery镜像依赖配置文件到内存,然后解析该recovery镜像依赖配置文件,按顺序提取该配置文件中所有分区镜像的名字。
而后进入步骤S803读取“引导通信分区”固定位置1的内容并保存。
而后进入步骤S804根据分区布局配置文件升级分区表。
而后进入步骤S805判断平台recovery镜像依赖配置文件的第一行是否为标记A/B***固件的特殊字符串,如果是则表明升级包中的固件是针对A/B***的,设置A/B标记为真。
而后进入步骤S806遍历平台recovery镜像依赖配置文件提取的所有分区镜像的名字,排除配置文件第一行可能的用于标记A/B***固件的特殊字符串。
而后进入步骤S807判断是否到达分区镜像名字列表的结尾,若否则进入步骤S808根据“分区镜像的名字+特定后缀”的规则构造固件镜像文件,并在固件升级包中查找该固件镜像文件。如果分区镜像的名字是recovery或者boot,则将查找到的固件镜像文件提取到外部存储设备中,否则直接提取到内存中。
而后进入步骤S809根据分区镜像的名字与分区布局配置文件提取到的分区信息中的分区名字进行比较。
而后进入步骤S810判断分区镜像名字在分区布局配置文件中是否有对应匹配的分区名,若否则执行步骤S811判断AB标记是否为真,若步骤S811判定为是则执行步骤S812对该分区镜像名+“_a”和该分区镜像名+“_b”,构造两个针对A/B***的分区名,然后将构造出来的2个新分区名与分区布局配置文件提取到的分区信息中的分区名字进行比较。
步骤S812后可以进入步骤S813判断是否找到匹配的分区,若是则进入步骤S814对应分区进行全部写0x0操作,然后根据提取出来的固件镜像文件进行固件升级操作,步骤S814之后可以进入步骤S816读取下一个分区镜像名字。
若步骤S810判定为是则可以进入步骤S815对该分区进行全部写0x0操作,然后根据提取出来的固件镜像文件进行固件升级操作,步骤S815之后可以进入步骤S816读取下一个分区镜像名字。若步骤S811判定为否或者步骤S813判定为否,有可以进入步骤S816读取下一个分区镜像名字,步骤S816之后可以重新进入步骤S807判断是否到达分区镜像名字列表的结尾。
如果步骤S807判定为是则可以进入步骤S817根据分区布局配置文件提取到的分区信息中查找“引导通信分区”在存储介质中的起始位置和偏移,对该分区进行全部写0x0操作。步骤S817后可以进入步骤S818将前面读取的“引导通信分区”固定位置1的内容写入新平台“引导通信分区”的固定位置2,并在新平台的“引导通信分区”的固定位置2附加标记升级指令1已完成的特殊标记字符串。步骤S818之后可以进入步骤S819重启设备,进入recovery模式,此次重启过程使用到的固件就是升级指令1所升级的新平台的固件
当然,在本实施方式中,在执行步骤S801之前还可以进入步骤S820读取“引导通信分区”的固定位置2,步骤S820之后进入步骤S821判断是否有标记升级指令1已完成的特殊标记字符串,若判断为是则退出升级程序,若判断为否则进入步骤S801。
如图9所示,为所述升级指令2被执行时所实现的方法步骤,具体包括:
首先进入步骤S901提取固件升级包中的分区布局配置文件到内存,然后解析该分区布局配置文件,记录每个分区的名字、在存储介质中的起始位置和长度信息。
而后进入步骤S902提取固件升级包中的“平台***镜像配置文件”到内存,然后解析该平台***镜像配置文件,按顺序提取该配置文件中所有分区镜像的名字。
而后进入步骤S903判断平台***镜像配置文件的第一行是否为标记A/B***固件的特殊字符串,如果是则表明升级包中的固件是针对A/B***的,设置A/B标记为真。
而后进入步骤S904遍历平台***镜像配置文件提取的所有分区镜像的名字,排除配置文件第一行可能的用于标记A/B***固件的特殊字符串。
而后进入步骤S905判断是否到达分区镜像名字列表的结尾,若是则退出升级程序,否则进入步骤S906根据“分区镜像的名字+特定后缀”的规则构造固件镜像文件,并在固件升级包中查找该固件镜像文件,将查找到的固件镜像文件提取到外部存储设备中。
而后进入步骤S907判断分区镜像名字在分区布局配置文件中是否有对应匹配的分区名,若是则进入步骤S908对该分区进行全部写0x0操作,然后根据提取出来的固件镜像文件进行固件升级操作;否则进入步骤S910判断AB标记是否为真。
若步骤S910判定结果为是则进入步骤S911对该分区镜像名+“_a”和该分区镜像名+“_b”,构造两个针对A/B***的分区名,然后将构造出来的2个新分区名与分区布局配置文件提取到的分区信息中的分区名字进行比较。而后进入步骤S912判断是否找到匹配的分区,若步骤S912判定结果为是则进入步骤S913对应分区进行全部写0x0操作,然后根据提取出来的固件镜像文件进行固件升级操作。
在步骤S908之后、步骤S910判定结果为否、步骤S912判定结果为否或者步骤S913之后均可以进入步骤S909读取下一个分区镜像名字,步骤S909之后可以再次进入步骤S905,若步骤S905判定结果为是则退出升级程序。
如图9所示,为所述升级指令3被执行时所实现的方法步骤,具体包括:
首先进入步骤S1001读取引导通信分区的固定位置2的内容,获取升级包的存放路径信息。
而后进入步骤S1002擦除引导通信分区的固定位置2中的内容,然后在该位置写入擦除标记和升级包的存放路径信息。
而后进入步骤S1003重启设备进入recovery。
下面针对本申请涉及的固件升级方法的实际应用场景,对该方法涉及的步骤详细进行展开说明:
1.完整编译Android平台所有固件,按照上述升级包的构成要求,制作升级包,并对升级包使用signapk.jar进行签名。
2.升级客户端在线或者离线方式获取到固件升级包后,校验升级包的合法性。同时判断升级包中是否包含“平台recovery镜像依赖配置文件”和/或“平台***镜像配置文件”,如果包含这些配置文件,说明该Android固件升级包是一个跨平台完全升级的固件升级包,会对flash进行重新完整编程,因此需要将该固件升级包放置在外置存储设备中并进行可能的数据备份操作。如果设备没有外置存储,则提示用户***外置存储介质(TF/SD卡或U盘)或者放弃本次升级。
3.如果固件升级包合法,并且完成可能的数据备份后将固件升级包放置在外置存储,并往“引导通信分区”的固定位置1写入升级指令、升级包的存放路径和标记本次升级为跨平台完全升级,然后重启设备,进入recovery模式。
4.在recovery中,读取“引导通信分区”的固定位置1,如果存在跨平台完全升级的标记,则仅校验升级包的合法性,不对升级包进行任何其他形式的检查。提取升级包中的升级程序update-binary并运行,然后update-binary依据升级脚本updater-script开始进行固件升级。
5.执行升级脚本updater-script中的升级指令1来完成“平台recovery镜像依赖配置文件”所描述的所有分区镜像的固件升级。这个过程不允许设备中途掉电。“升级指令1”的执行流程如下(1)-(10):
(1)读取“引导通信分区”的固定位置2,判断是否有标记升级指令1已完成的特殊标记字符串。如果有升级指令1已完成的特殊标记字符串则退出升级指令1,否则继续执行如下步骤(2)提取固件升级包中的分区布局配置文件(如parameter.txt)到内存,然后解析该分区布局配置文件,记录每个分区的名字、在存储介质中的起始位置和长度信息。
(3)提取固件升级包中的平台recovery镜像依赖配置文件(如plat_fw_complete.txt)到内存,然后解析该recovery镜像依赖配置文件,按顺序提取该配置文件中所有分区镜像的名字。
(4)读取“引导通信分区”固定位置1的内容并保存,包括升级指令、升级包的存放路径和是否为跨平台完全升级的标记。
(5)根据分区布局配置文件升级分区表。
(6)判断平台recovery镜像依赖配置文件的第一行是否为标记A/B***固件的特殊字符串,如果是则表明升级包中的固件是针对A/B***的,设置A/B标记为真。
(7)遍历上述步骤(3)提取的所有分区镜像的名字,排除第(6)步中用于标记A/B***固件的特殊字符串。
a\根据“分区镜像的名字+特定后缀”的规则构造固件镜像文件,并在固件升级包中查找该固件镜像文件。如果分区镜像的名字是recovery或者boot,则将查找到的固件镜像文件提取到外部存储设备中,否则直接提取到内存中。
b\根据分区镜像的名字与第(2)步分区布局配置文件提取到的分区信息中的分区名字进行比较,如果该分区镜像名字在分区布局配置文件有对应匹配的分区名,则首先对该分区进行全部写0x0操作,然后根据(a)中提取出来的固件镜像文件进行固件升级操作。
如果该分区镜像名字在分区布局配置文件中没有对应匹配的分区名,并且此时A/B标记为真,则对该分区镜像名+“_a”和该分区镜像名+“_b”,构造两个针对A/B***的分区名,然后将构造出来的2个新分区名与分区布局配置文件提取到的分区信息中的分区名字进行比较,如果找到匹配的分区项,则首先对该分区进行全部写0x0操作,然后根据(a)中提取出来的固件镜像文件进行固件升级操作。
(8)根据第(2)步分区布局配置文件提取到的分区信息中查找“引导通信分区”在存储介质中的起始位置和偏移,对该分区进行全部写0x0操作。
(9)将第(4)步读取的“引导通信分区”固定位置1的内容写入新平台“引导通信分区”的固定位置2,并在新平台的“引导通信分区”的固定位置2附加标记升级指令1已完成的特殊标记字符串。
(10)设备重启再次进入recovery模式。
6.此次重启过程使用到的固件就是升级指令1所升级的新平台的固件。在新平台固件的recovery中,读取“引导通信分区”的固定位置2,如果存在升级指令并且存在跨平台完全升级的标记,则首先仅校验升级包的合法性,不对升级包进行任何其他形式的检查。然后提取升级包中的升级程序update-binary并运行,然后update-binary依据升级脚本updater-script开始进行固件升级。从上述步骤5继续执行,在执行升级脚本updater-script中的升级指令1时,由于“引导通信分区”的固定位置2存在标记升级指令1已完成的特殊标记字符串,因此退出升级指令1。开始执行下面第7步的升级指令2。
7.执行升级脚本updater-script中的升级指令2完成“平台***镜像配置文件”所描述的所有分区镜像的固件升级。这个过程支持设备意外掉电,如果设备意外掉电,则重新上电后,“启动引导程序”通过“引导通信分区”的固定位置2中的升级指令,会重新引导设备进入recovery模式,重新执行步骤6。“升级指令2”的执行流程(1)-(4)如下:
(1)提取固件升级包中的分区布局配置文件到内存,然后解析该分区布局配置文件,记录每个分区的名字、在flash存储介质中的起始位置和长度信息。
(2)提取固件升级包中的“平台***镜像配置文件”(如plat_fw_system.txt)到内存,然后解析该平台***镜像配置文件,按顺序提取该配置文件中所有分区镜像的名字。
(3)判断平台***镜像配置文件的第一行是否为标记A/B***固件的特殊字符串,如果是则表明升级包中的固件是针对A/B***的,设置A/B标记为真。
(4)遍历上述步骤(2)提取的所有分区镜像的名字,排除第(3)步中的标记A/B***固件的特殊字符串。
a\根据“分区镜像的名字+特定后缀”的规则构造固件镜像文件,并在固件升级包中查找该固件镜像文件,将查找到的固件镜像文件提取到外部存储设备中。
b\根据分区镜像的名字与第(1)步分区布局配置文件提取到的分区信息中的分区名字进行比较,如果该分区镜像名字在分区布局配置文件有对应匹配的分区名,则首先对该分区进行全部写0x0操作,然后根据(a)中提取出来的固件镜像文件进行固件升级操作。
如果该分区镜像名字在分区布局配置文件中没有对应匹配的分区名,并且此时A/B标记为真,则对该分区镜像名+“_a”和该分区镜像名+“_b”,构造两个针对A/B***的分区名,然后将构造出来的2个新分区名与分区布局配置文件提取到的分区信息中的分区名字进行比较,如果找到匹配的分区项,则首先对该分区进行全部写0x0操作,然后根据(a)中提取出来的固件镜像文件进行固件升级操作。
8.执行升级脚本updater-script中的升级指令3:
该指令首先读取引导通信分区的固定位置2的内容,获取升级包的存放路径信息。
然后擦除引导通信分区的固定位置2中的内容,并在该位置写入擦除标记和升级包的存放路径信息,最后重启设备进入recovery.
9.recovery读取“引导通信分区”的固定位置2,如果存在擦除标记,则对平台中的用户可读写分区进行擦除操作,包括data和cache。最后在/cache/recovery/下创建一个标记文件,并在该标记文件中写入“引导通信分区”的固定位置2读取到的升级包的存放路径信息,表示本次升级完成。擦除“引导通信分区”的固定位置2的内容。
10.重启设备,进入升级后的***。升级客户端可以根据/cache/recovery/下的标记文件判断跨平台升级完成,根据需要进行数据恢复操作。
采用本申请的固件升级方法所得到的有益效果如下:
(1)本技术能够支持任意Android操作***大版本间的互升,支持针对设备分区表的任意变更升级,包括分区表格式的变更,比如将MBR变成GPT。不依赖分区设备节点。特别地,支持Android***非AB固件和AB固件的互相升级。只要求设备在升级时有存在可用的外部存储介质(TF/SD卡或者U盘),并且新旧平台固件中都包含“引导通信分区”用于固件升级各个不同阶段的通信。通过本发明能够将legacy设备中的固件完全升级成与launch设备一致。通过这种方式,在提高用户体验的同时,显著改善后续的设备固件维护。
(2)同时本技术能和现有的Android标准升级***兼容,升级包使用zip压缩存档,并使用signapk.jar签名,跟标准Android升级包兼容。从而现有的Android升级客户端和服务器能够无缝兼容该固件升级引擎。
最后,需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。
Claims (8)
1.一种基于安卓***的FOTA固件升级方法,其特征在于,所述方法包括:
制定升级数据包,并将所述升级数据包存储于预设存储介质中;所述升级数据包中包括分区表描述文件、升级程序和升级函数;所述分区表描述文件包括依赖配置信息和***镜像配置信息;所述升级函数包括第一升级函数和第二升级函数;
向待升级设备的固件分区中的第一位置写入第一升级信息;所述第一升级信息包括第一升级指令和第一路径信息;所述第一路径信息为 所述升级数据包在所述预设存储介质中的地址路径;
控制待升级设备进入升级模式,解析所述第一升级信息,获取所述升级程序,根据所述第一升级函数对所述依赖配置信息中所记载的所有分区镜像的固件进行升级,以及根据所述第二升级函数对所述***镜像配置信息中所记载的所有分区镜像的固件进行升级;
所述分区表描述文件还包括分区布局配置信息;所述待升级设备的固件分区包括引导通信分区;所述根据所述第一升级函数对所述依赖配置信息中所记载的所有分区镜像的固件进行升级包括:
提取所述分区布局配置信息到所述待升级设备的内存,解析所述分区布局配置文件,并记录每个分区的分区信息;所述分区信息包括各个分区对应的分区名称、在预设存储介质中的起始位置和长度信息;
提取所述依赖配置信息到所述待升级设备的内存,然后解析所述依赖配置信息,按顺序提取所述依赖配置信息中所有分区镜像的名称;
读取所述第一位置中的第一升级信息并保存,根据所述分区布局配置信息升级分区表;
判断所述依赖配置信息的第一行是否为表征A/B***固件的第一预设字符串,如果是设置A/B标记为真;
遍历所述依赖配置信息提取的所有分区镜像的名称,剔除所述依赖配置信息第一行中用于标记A/B***固件的第一预设字符串;
根据所述分区布局配置信息提取到的分区信息中查找引导通信分区对应的起始位置和偏移地址,并对该分区进行全部写0x0操作;
将当前第一位置中记载的内容全部写入第二位置中,并在所述第二位置中写入第一升级函数完成标记,而后重启所述待升级设备;
所述分区表描述文件还包括分区布局配置信息;所述待升级设备的固件分区包括引导通信分区;所述根据所述第二升级函数对所述***镜像配置信息中所记载的所有分区镜像的固件进行升级包括:
提取所述分区布局配置信息到所述待升级设备的内存,解析所述分区布局配置文件,并记录每个分区的分区信息;所述分区信息包括各个分区对应的分区名称、在预设存储介质中的起始位置和长度信息;
提取所述升级数据包中的所述***镜像配置信息到内存,然后解析所述***镜像配置信息,按顺序提取所述***镜像配置信息中所有分区镜像的名称;
判断所述***镜像配置信息的第一行是否为标记A/B***固件的第二预设字符串,如果是则表明升级数据包中的固件是针对A/B***的,设置A/B标记为真;
遍历所述***镜像配置信息中所有分区镜像的名称,剔除所述***镜像配置信息第一行中用于标记A/B***固件的第二预设字符串。
2.如权利要求1所述的基于安卓***的FOTA固件升级方法,其特征在于,所述升级函数还包括第三升级函数;所述方法还包括:
向待升级设备的固件分区中的第二位置写入第二升级信息;所述第二升级信息包括第二升级指令和第二路径信息;所述第二路径信息和所述第一路径信息相对应;
所述升级程序执行所述第三升级函数,解析所述第二位置中的第二升级信息,获取所述第二路径信息后,并擦除所述第二位置中原有存储的所有内容,以及将所述第二路径信息与擦除完成标记再次写入所述第二位置中,并重启所述待升级设备。
3.如权利要求2所述的基于安卓***的FOTA固件升级方法,其特征在于,所述方法包括:
读取所述第二位置的擦除完成标记,擦除所述待升级设备的可读写区域。
4.如权利要求2所述的基于安卓***的FOTA固件升级方法,其特征在于,所述方法包括:
在所述待升级设备的预设存储目录下创建一个标记文件,并在所述标记文件中写入所述第二路径信息,以及再次擦除当前第二位置中存储的所有内容。
5.如权利要求4所述的基于安卓***的FOTA固件升级方法,其特征在于,所述方法包括:
重启所述待升级设备,进入升级完成后的固件***,判断所述标记文件是否存在,若是则表示固件升级成功,根据用户的数据恢复指令执行可读写区域的数据恢复操作。
6.如权利要求1所述的基于安卓***的FOTA固件升级方法,其特征在于,所述方法包括:
根据预设命名规则命名固件镜像文件,根据预设命名规则对应的关键词在所述升级数据包中查找符合第一名称要求的固件镜像文件,并将查找到的固件镜像文件提取到外部存储设备中;否则直接提取到待升级设备的内存中;
将查找到的各个分区镜像的名称与所述分区布局配置信息中提取到的分区信息中的各个分区名称进行比较,如果该分区镜像名称在所述分区布局配置信息有对应匹配的分区名,则对该分区名对应的镜像分区进行全部写0x0操作,而后对提取到的固件镜像文件进行固件升级操作;
如果该分区镜像名称在分区布局配置文件中没有对应匹配的分区名,并且此时A/B标记为真,则根据当前分区名进行格式变化,构造两个针对A/B***的分区名,然而将构造的两个针对A/B***的分区名与所述分区布局配置信息提取到的分区信息中的分区名称进行比较,如果找到匹配的分区项,则首先对该镜像分区进行全部写0x0操作,而后再对提取出来的固件镜像文件进行固件升级操作。
7.如权利要求1所述的基于安卓***的FOTA固件升级方法,其特征在于,所述方法包括:
根据预设命名规则命名固件镜像文件,根据预设命名规则对应的关键词在所述升级数据包中查找符合第二名称要求的固件镜像文件,并将查找到的固件镜像文件提取到外部存储设备中;
将查找到的各个分区镜像的名称与所述分区布局配置信息中提取到的分区信息中的各个分区名称进行比较,如果该分区镜像名称在所述分区布局配置信息有对应匹配的分区名,则对该分区名对应的镜像分区进行全部写0x0操作,而后对提取到的固件镜像文件进行固件升级操作;
如果该分区镜像名称在分区布局配置文件中没有对应匹配的分区名,并且此时A/B标记为真,则根据当前分区名进行格式变化,构造两个针对A/B***的分区名,然而将构造的两个针对A/B***的分区名与所述分区布局配置信息提取到的分区信息中的分区名称进行比较,如果找到匹配的分区项,则首先对该镜像分区进行全部写0x0操作,而后再对提取出来的固件镜像文件进行固件升级操作。
8.一种安卓***的FOTA固件升级装置,其特征在于,所述装置用于执行如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110460412.3A CN113238771B (zh) | 2021-04-27 | 2021-04-27 | 一种基于安卓***的fota固件升级方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110460412.3A CN113238771B (zh) | 2021-04-27 | 2021-04-27 | 一种基于安卓***的fota固件升级方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113238771A CN113238771A (zh) | 2021-08-10 |
CN113238771B true CN113238771B (zh) | 2022-06-21 |
Family
ID=77129413
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110460412.3A Active CN113238771B (zh) | 2021-04-27 | 2021-04-27 | 一种基于安卓***的fota固件升级方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113238771B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114610341A (zh) * | 2022-03-22 | 2022-06-10 | Oppo广东移动通信有限公司 | 产线刷机方法、装置、电子设备、芯片及存储介质 |
CN115033259A (zh) * | 2022-05-31 | 2022-09-09 | 珠海视熙科技有限公司 | 固件升级方法、装置、存储介质及电子设备 |
CN114995893B (zh) * | 2022-08-01 | 2022-11-01 | 摩尔线程智能科技(北京)有限责任公司 | 固件的管理方法、闪存、主机及存储介质 |
CN117971283B (zh) * | 2024-03-28 | 2024-07-19 | 深流微智能科技(深圳)有限公司 | 一种图形处理器的固件升级方法、终端设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109086078A (zh) * | 2017-06-14 | 2018-12-25 | 展讯通信(上海)有限公司 | 安卓***升级方法、装置、服务器及移动终端 |
CN109960523A (zh) * | 2017-12-22 | 2019-07-02 | 浙江宇视科技有限公司 | 一种嵌入式设备的固件升级方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7219343B2 (en) * | 2003-04-10 | 2007-05-15 | International Business Machines Corporation | Firmware update mechanism in a multi-node data processing system |
CN106610840A (zh) * | 2015-10-22 | 2017-05-03 | 深圳市中兴微电子技术有限公司 | 一种无线固件升级方法及*** |
CN109240720B (zh) * | 2018-08-23 | 2021-11-26 | 瑞芯微电子股份有限公司 | 一种安卓***的固件升级方法及一种存储设备 |
-
2021
- 2021-04-27 CN CN202110460412.3A patent/CN113238771B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109086078A (zh) * | 2017-06-14 | 2018-12-25 | 展讯通信(上海)有限公司 | 安卓***升级方法、装置、服务器及移动终端 |
CN109960523A (zh) * | 2017-12-22 | 2019-07-02 | 浙江宇视科技有限公司 | 一种嵌入式设备的固件升级方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113238771A (zh) | 2021-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113238771B (zh) | 一种基于安卓***的fota固件升级方法和装置 | |
KR100987628B1 (ko) | 엠비디드 컨트롤러의 펌웨어 갱신방법 및 갱신용 펌웨어저장매체 | |
CN113064604B (zh) | 一种固件升级方法和装置 | |
CN101763279B (zh) | 一种BootLoader架构设计方法 | |
JP6568947B2 (ja) | 車載制御装置、プログラム更新システム、及び、プログラム更新ソフトウェア | |
CN102667716A (zh) | 使用固件更新应用程序更新部件的固件的方法及装置 | |
CN103294572A (zh) | 电子设备及其恢复mbr的方法 | |
CN112558980A (zh) | 多软件包管理方法及装置 | |
CN102023908A (zh) | 一种引导程序备份方法及装置 | |
US9715874B2 (en) | Techniques for updating an automatic speech recognition system using finite-state transducers | |
US20150309878A1 (en) | Method and computation node for processing application data | |
CN101409074A (zh) | 一种嵌入式语音识别***功能更新的方法 | |
CN104536788A (zh) | 使应用的安装自动化的***和方法 | |
US8196093B2 (en) | Apparatus and method for componentizing legacy system | |
CN109614325A (zh) | 一种确定控件属性的方法及装置、电子设备和存储介质 | |
KR20070024307A (ko) | 정보 처리 장치, 정보 처리 장치 제어 프로그램 및 정보처리 장치 제어 방법 | |
CN109375953B (zh) | 一种操作***启动方法及装置 | |
CN101506772A (zh) | 环境状态改变以更改功能 | |
CN116302011B (zh) | 一种电缆监测设备固件升级方法 | |
KR100228717B1 (ko) | 레이저 프린터의 전원 오프 대처방법 | |
CN113791812B (zh) | 一种固件升级方法和存储设备 | |
CN114706608A (zh) | 升级固件的方法和电子设备 | |
CN102184115B (zh) | 升级***软件的方法及终端设备 | |
CN115599400A (zh) | 一种Docker镜像快速构建方法、***及介质 | |
CN114610516A (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 |