android P OTA 初探 —— 1、OTA简单介绍

本系列介绍自己理解的基于android P的OTA系统。由于工作需要开始研究,实践经验匮乏,难免有理解不够或者错误之处。还请多多指正,不吝赐教!

1、

本文提及的OTA指的是android手机的基础操作系统、系统分区上安装的只读应用和/或时区规则的无线下载 (OTA) 更新。

根据升级方式不同,分为:A/B(无缝)系统更新(android O新增)、 传统的非 A/B 系统更新、 时区规则更新(Android 8.1 开始支持)。
其中,传统的非 A/B 系统更新 又可以分为 基于文件的ota(android5.0之前) 和 基于块的ota(block , android5.0开始支持,即升级android5.0以上的系统,可以用基于block的ota包)。
块 OTA 不会比较各个文件,也不会分别计算各个二进制补丁程序,而是将整个分区处理为一个文件并计算单个二进制补丁程序,以确保生成的分区刚好包含预期的位数。这样一来,设备系统映像就能够通过 fastboot 或 OTA 达到相同的状态。因为块 OTA 可确保每个设备使用相同的分区,所以它能够使用 dm-verity 以加密的方式为系统分区签名。dm-verity是验证启动相关的,具体的可以查看官网介绍

根据升级内容不同,又可以分为整包升级和差分升级。
文件和块OTA的区别主要在差分包:系统分区的内容可能会在 adb remount 期间或由于恶意软件而被修改。如果某分区已经被修改,执行基于块的OTA升级就会失败。而对于基于文件的OTA方式,只要当前设备的系统中此差分包要升级的文件没有被修改,就不会有冲突。
相应的,块升级前检查到当前设备分区被修改,就升级失败,系统以旧系统重启运行。而文件OTA虽然能升级成功,但重启运行后可能会有问题。

2、

A/B系统更新 与  非 A/B 系统更新 两者是不兼容的。因为他们对应的系统分区和升级逻辑完全不同。

3、

现在基本用的都是基于块的OTA方式。
android P的代码中关于OTA升级包的制作已经默认只有基于块的OTA和AB系统OTA这两种包的制作流程了。
不再支持基于文件的OTA包的制作。
但,基于AB系统的OTA还不流行,主要是因为它System、Vendor等分区都是两份,占用存储空间太多。

4、

OTA流程:

1)、设备会与 OTA 服务器进行定期确认,并被告知是否有更新可用,包括更新软件包的 URL 和向用户显示的描述字符串。
2)、将更新下载到缓存或数据分区,并根据 /system/etc/security/otacerts.zip 中的证书验证加密签名。系统提示用户安装更新。
3)、设备重新启动进入Recovery模式,引导恢复分区中的内核和系统启动,而非引导分区中的内核。
恢复分区的二进制文件由 init 启动。它会在 /cache/recovery/command 中寻找将其指向下载软件包的命令行参数。
4)、恢复操作会根据 /res/keys (包含在恢复分区中的 RAM 磁盘的一部分)中的公钥来验证软件包的加密签名。
5)、从软件包中提取数据,并根据需要使用该数据更新引导、系统和/或供应商分区。系统分区上其中一个新文件包含新恢复分区内容。
6)、设备正常重启。加载最新更新的引导分区,在最新更新的系统分区中装载并开始执行二进制文件。
7)、作为正常启动的一部分,系统会根据所需内容(预先存储为 /system 中的一个文件)检查恢复分区的内容。如果二者内容不同,则恢复分区会被所需内容重新刷写(在后续引导中,恢复分区已经包含新内容,因此无需重新刷写)。
系统更新完成!

5、还有一点要补充

OTA过程中相关的几种软件包:
(1)、Target包。
这个包可以理解为系统内容资料收集包,它对应了某个版本的软件。里面基本包含了系统的所有内容。是用来生成升级包的中间包。我们每次编译android系统软件,都可以同步生成Target包,特别是发布的软件一定要备份对应的Target包,以便后面升级使用。

(2)、完整升级包。
这个是用来进行系统完整升级的包。任何版本的软件都可以用这个包升级到指定的版本。比如,从android O升级到android P一般会通过完整升级包进行升级。它是通过脚本,从Target包生成的。

(3)、增量升级包。
这个是用来进行增量升级的包。里面一般只包含了一些新版本对比老版本变化了的内容。理所当然的,这种升级包要求只能从指定的版本(版本1)升级到当前新版本(版本2)。它是在版本1 和版本2 对应的Target包基础上生成的。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值