搜索

451

主题

661

帖子

4945

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4945
QQ
发表于 2022-9-16 17:20:12 1369 浏览 0 回复

AB升级

[DESCRIPTION]
         AB 升级 是从 N 版本 开始 在 normal mode 下升级的一种方式。

   本文围绕重点:
   1.  AB 升级的优缺点
   2.  升级流程
   3.  Partition
   4.  开机启动流程
   5.  AB 分区升级包
   6.  参考文档

[SOLUTION]

         1.  AB 升级的优缺点
         优点:
a. 双分区,降低手机变砖的可能。存在 两个slot , 当前A时,往 B分区升级,当前B时,往A 分区升级,不怕分区被破坏。
b. 通过update_engine 应用完成升级,可以实现无感的升级。
c. 如 用户下载完就进行往 另外slot 中升级,再下次重启后切换slot 来 完成整个升级过程。
    那么重启 过程 可以在代码中设定是否提醒用户,或等到用户睡眠时自动重启或立即重启完成升级等。
d. dm-verity , 哈希表层层验证,确保可以启动系统。
     缺点:
双内存,那么系统内存将占用了 8-20GB ,  对于 32GB 以下的机器,顿时感觉存储不够用了。
所以Q 版本以前的小存储上都会使用 non AB 来作为升级方式。


2.  升级流程




3. Partition

    recovery 和 cache 分区 从 AB 分区 开始被拿掉了。

为了保证,recovery 升级的兼容  和 factory reset 正常使用,就将 recovery ramdisk 放入了 boot.img!

抛一个问题给读者。
为什么  AB 分区 在 recovery 中升级,可以不需要recovery.img ,而 non AB 却需要呢?
原因:  AB 分区存在 双 分区, 当前分区是  slot A 时, 带有 recovery ramdisk 的版本可以直接 升级到 slot B 上去。即下次启动的是 boot_b.img 。
          而 non AB ,只有单分区,所以 recovery.img  帮助 其他分区升级完毕后,在下次开机的时候,会将 recovery.img 升级到新版本。


4.  启动流程图。
    在 开机状态下升级完成后,会调用setActiveBootSlot  将slot 切换到 另外一个slot,  当前 A,则切换到slot B,反之一样。
    同时调用 将 slot B 设定的 boot_successful 设定为 0.
    然后由 pl lk 中进行启动,如果 boot_successful 为 0 , 则尝试开机, 开机成功 boot_successful 标记位设定为1.
    并记录到 misc  或 para 分区中(看分区哪一个存在就用那个,可以看scatter.txt)。
   下次开机直接读 misc 或 para 分区, 如果已经为 boot_successful 为1 ,就直接开机。
   如果3-7次后 无法开机, 则会 rollback 到 升级前 的slot A 上进行开机。
   设定次数:

如遇到极端情况,slot B 无法开机, rollback 到 slot A, 发现还是开不了机,则会进入recovery mode.


5.  AB 升级包

metadata 中保存着 版本的信息,applyPayload 读取 payload.bin



6. 默认打开 VABC
  AB , VABC 在从 S 版本开始都是默认打开的。
  关闭 AB  方法:
   
  设置为flase ,关闭 VAB 方法,但VAB会比 AB 更好用,所以不建议关闭:
/build/make/target/product/virtual_ab_ota.mk

Enable scratch support for super
17 PRODUCT_VIRTUAL_AB_OTA := true
18
19 PRODUCT_PROPERTY_OVERRIDES += ro.virtual_ab.enabled=true

Disable scratch support for super
/build/make/target/product/virtual_ab_ota_retrofit.mk
PRODUCT_VIRTUAL_AB_OTA_RETROFIT := true
PRODUCT_PROPERTY_OVERRIDES += ro.virtual_ab.retrofit=true


7. 参考升级文档
1. https://source.android.com/docs/core/ota/ab
2. 代码相关可以参考如下博客:


手机微信同号:13682654092
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


登录或注册
快速回复 返回顶部 返回列表