OTA 功能,主要用于 修复 bug 、系统升级等。
一 .OTA升级包分为整体完全升级包和增量升级包,增量升级包需要增量编译(编译脚本的修改),相比完全升级包,升级包的体积更小。
整体完全升级包
优势:使用全包的优势在于无需对应版本号,可以直接从任何之前的版本升级到OTA包中的版本。
劣势:全包所占的空间比较大,升级时间较长。
全编项目版本,然后使用指令,即可制作ota全包
make otapackage
out目录下生成ota包
out/target/product/tab08_rk66_pas/tab08_rk66_pas-ota-eng.xxx.zip
增量升级包又叫OTA差分包
优势:差分包所占空间较小,升级速度较快。
劣势:差分包制作比全包复杂,升级需要对应版本号。
out\target\product\项目名称\obj\PACKAGING\target_files_intermediates\tab08_rk66_pas-target_files为制作差分包的原始包。
如果确认需要使用差分包升级,每个版本的此文件都需要保存,以便做出可以升级到任何版本的差分包。
旧的差分包原始包重命名为old.zip
新的差分包原始包重命名为new.zip
将old.zip和new.zip放在根目录下,执行命令,生成update.zip,即ota差分包
./build/tools/releasetools/ota_from_target_files -i old.zip new.zip update.zip
二、OTA升级方式分为A/B系统升级和非A/B系统升级以及虚拟A/B。
- 非A/B系统升级(一般在android7 之前):android系统中,也存在两个系统,一个android主系统,一个recovery系统,在使用recovery模式进行升级的过程是,首先在android主系统中检查到了,有升级系统的提示,然后用户根据提示选择是否需要升级,如果升级则将升级的数据包下载并存放到cache分区,重启系统后就会进入recovery模式,并用cache分区下载好的数据更新android主系统,更新完成后重新启动进入android主系统。如果更新失败,设备直接成砖。唯一的办法就是重新升级,直到成功。
- A/B系统升级是指设备上有两套系统可以用,其中一套处于active状态,另一套处于备用状态,但是userdata只有一份,两套系统共用,我们在进行系统升级的时候,可以在active的系统中去对备用系统进行更新。当然,设备出厂时这两套系统肯定是一样的且都能正常工作的系统,升级时确保设备上始终有一个可以工作的系统如果OTA升级失败,设备可以回退到升级前的旧系统,并且可以尝试再次更新升级;,减少设备变砖的可能性,方便维修和售后。
- A/B系统与非A/B系统的区别
-
a)系统的分区设置 非A/B系统只有一套分区 A/B系统有两套分区,称为slot A和slot B b)跟bootloader沟通的方式 传统方式bootloader通过读取misc分区信息来决定是进入Android主系统还是Recovery系统 A/B系统的bootloader通过特定的分区信息来决定从slot A还是slot B启动 c)系统的编译过程 传统方式在编译时会生成boot.img和recovery.img分别用于Android主系统和Recovery系统的ramdisk A/B系统只有boot.img,而不再生成单独的recovery.img d)OTA更新包的生成方式 A/B系统生成OTA包的工具和命令跟传统方式一样,但是生成内容的格式不一样了系统分区到底是什么样的啦?如下:
系统分区 非A/B系统 A/B系统 boot分区 包含了Linux内核和最小的根文件系统(会被加载到RAM中去).它装载了系统和其它分区,并且boot分区还被用来启动system分区中的运行环境. boot_a和boot_b
分别用于存放两套系统各自的linux kernel文件和用于挂载system和其他分区的ramdisksystem 包含在 Android 开源项目 (AOSP)上提供源代码的系统应用和库.在正常操作期间,此分区被装载为只读分区;其内容仅在 OTA 更新期间更改. system_a和system_b
Android主系统分区,分别用于存放两套系统各自的系统应用程序和库文件vendor vendor分区中包含在 Android 开源项目 (AOSP) 上未提供源代码的系统应用和库.在正常操作期间,此分区被装载为只读分区;其内容仅在 OTA 更新期间更改. vendor_a和vendor_b
Android主系统分区, 分别用于存放两套系统各自的开发厂商定制的一些应用和库文件,很多时候开发厂商也直接将这个分区的内容直接放入system分区userdata 存储由用户安装的应用所保存的数据等.OTA 更新过程通常不会触及该分区. 用户数据分区,存放用户数据,包括用户安装的应用程序和使用时生成的数据 cache 几个应用使用的临时保留区域(访问此分区需要使用特殊的应用权限),用于存储下载的 OTA 更新包。其他程序也可使用该空间,但是此类文件可能会随时消失。安装某些 OTA 更新包可能会导致此分区被完全擦除。缓存还包含 OTA 更新的更新日志。 recovery 包含第二个完整的 Linux 系统,其中包括一个内核和特殊的恢复二进制文件(该文件可读取一个软件包并使用其内容来更新其他分区)。 misc 执行恢复操作时使用的微小分区,可在应用 OTA 更新包并重新启动设备时,隐藏某些进程的信息。 misc或其他名字分区; 存放Android主系统和Recovery系统跟bootloader通信的数据,由于存放方式和分区名字没有强制要求,所以部分实现上保留了misc分区(代码中可见Brillo和Intel的平台),另外部分实现采用其他分区存放数据(Broadcom机顶盒平台采用名为eio的分区) bootloader 存放用于引导Linux的bootloader 存放用于引导linux的bootloader -
在Android11以及更高版本,Google提出了虚拟A/B,虚拟A/B与A/B以及非A/B 区别何在?google提出的意义又在哪里?
-
对应用大小的影响 非 A/B A/B 虚拟 A/B 虚拟 A/B(压缩) 原始出厂映像 4.5GB 超级数据(3.8G 图片 + 700
-

本文详细介绍了Android系统的A/B OTA升级过程,包括整体完全升级包和增量升级包的区别,以及非A/B系统升级的工作原理。重点讲解了A/B系统升级的优缺点,虚拟A/B的概念及其意义,以及集成A/B系统所需的Android、kernel和u-boot的配置。此外,还提到了升级过程中的版本校验和常见错误码分析。
最低0.47元/天 解锁文章
293

被折叠的 条评论
为什么被折叠?



