Android A/B system - update_engine

本文详细介绍了Android A/B System中的update_engine,它是A/B更新的核心组件,负责后台升级逻辑,不修改partition table。内容涵盖update_engine的启动、升级命令触发、Action执行流程,包括InstallAction、DownloadPlanAction等,以及各种不同类型Operation的处理方式,如ZERO/DISCARD、REPLACE等,同时提到了FilesystemVerifierAction和PostinstallRunnerAction的作用。
摘要由CSDN通过智能技术生成

Android A/B System系列

update_engine overview

update engine是A/B update的核心逻辑,这一部分代码在system/update_engine这里面。

  • 在后台运行
  • 会调用bootctrl HAL接口
  • 通过update_engine.rc执行
  • 不会修改partition table

update_engine_client

  • 只是为了debug,进程会获取当前升级状态

update_verifier

  • 通过update_verifier.rc执行
  • 标记successful_flag,在misc分区

trigger update_engine to start update

升级命令:

python update_device.py --file update.zip

update.zip里面有以下几个内容,其中脚本需要的是:

  • payload.bin
  • payload_properties.txt
    在这里插入图片描述

通过adb,会传入升级需要的参数:

  • url:升级包的位置
  • offsetpayload.bin在压缩包的偏移
  • sizepayload_properties.txt的size
  • headerKeyValuePairs

触发升级后,update engine会做两件事:

  • Init()
    • boot_control_ (bootctrl HAL对应的应用层对象)
    • hardware_
    • certificate_checker_
    • update_attempter_(最核心的升级逻辑)
    • prefs_(保存进度的信息,假设升级的时候突然中断,重新恢复就是从prefs获取信息)
  • ApplyUpdatePayload()
    • BuildUpdateActions()
      • InstallPlanAction
      • DownloadAction
      • FilesystemVerfierAction
      • PostinstallRunnerAction
    • UpdateBootFlags() 检查当前slot是否已经标记为successful状态
      • 已经标记,执行CompleteUpdateBootFlags()
      • 没有标记,调用
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值