问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Android OTA升级机制详解:从传统到现代的演进之路

创作时间:
作者:
@小白创作中心

Android OTA升级机制详解:从传统到现代的演进之路

引用
CSDN
1.
https://blog.csdn.net/m0_56255097/article/details/137125100

OTA(Over-the-Air Technology)升级是一种无需刷机的在线升级方式,可以通过Wi-Fi或移动网络完成系统更新。随着Android系统的不断发展,OTA升级机制也在不断演进,从传统的非A/B系统更新到A/B系统更新,再到虚拟A/B和动态分区技术,为用户带来了更加便捷和安全的升级体验。本文将详细介绍Android系统的OTA升级机制,帮助读者更好地理解这一重要技术。

非A/B系统更新

在传统的Android系统中,分区结构主要包括以下几个部分:

  • bootloader:设备启动后,会先进入bootloader程序,通过判断开机时的按键组合选择启动模式,包括Android系统、recovery模式、fastboot模式等。
  • boot:包含Android系统的kernel和ramdisk,负责内核启动。
  • misc:用于Android系统和bootloader通信,使Android系统能够重启进入recovery系统并执行相应操作。
  • system:包含Android系统的可执行程序、库、系统服务和app等,是系统组件的主要存储位置。
  • vendor:包含厂商私有的可执行程序、库、系统服务和app等,可以看作是system分区的补充。
  • userdata:用户存储空间,用于存放用户安装的app和数据。
  • recovery:包含recovery系统的kernel和ramdisk,用于执行OTA升级、双清等操作。
  • cache:主要用于缓存系统升级OTA包等。

升级过程

  1. Android系统收到服务端下发的OTA推送,将OTA包下载至cache分区。
  2. OTA包下载完成后,向misc分区写入指令,表明下次启动时进入recovery模式并使用该OTA包进行升级。
  3. 重启手机。
  4. bootloader读取misc分区的内容并解析,引导启动recovery系统。
  5. recovery读取cache分区中的OTA包,按照升级脚本对系统各个分区进行升级。
  6. 清除misc分区。
  7. 重启手机,进入OTA升级后的新版本系统。

缺点

  • 升级下载的OTA包占用cache分区空间
  • 升级失败无法恢复回旧系统

A/B系统更新

为了解决传统OTA升级的缺点,Android O引入了A/B分区结构。这种结构将系统分区分成了A和B两个槽(slot),手机启动时会选择A槽或B槽启动,运行过程中仅使用当前槽位的分区。

采用A/B分区结构,能够实现无缝升级。例如用户正在运行A槽,此时收到OTA推送,则系统会一边从服务端获取OTA数据,一边直接写入待升级的槽,不需要临时存储OTA包的空间,因此不再需要在cache或userdata分区预留足够空间。当B槽系统升级完成,用户会收到重启提示,此时重启手机将自动切换到B槽的新版本系统。

bootloader通过以下标识判断系统槽的状态:

  • bootable:标识该槽的系统是否可以启动。
  • successful:标识该槽的系统是否成功启动过。
  • active:标识该槽是否是当前运行的系统。

缺点

  • 系统所需的存储空间比非A/B OTA所需的更多,因为A/B系统的分区boot. system, vendor等都作了两套分区

虚拟A/B

为了解决A/B分区存储空间的问题,Android引入了虚拟A/B系统更新。与传统的AB分区备份不同,虚拟A/B使用写时复制快照技术,动态调整分区大小,节省存储空间。

动态分区

动态分区解决了各个分区映像不再需要预留空间的问题。借助动态分区,供应商无需担心各个分区(例如system、vendor和product)的大小。取而代之的是,设备会分配一个super分区,其中的子分区可动态调整大小。动态分区是使用Linux内核中的dm-linear device-mapper模块实现的。

Snapshot

快照技术通过记录数据的修改时间点和改动的数据,而不是完整备份所有数据,从而节省存储空间。写时复制是快照技术的一种实现方式,当数据需要修改时,先读取原始数据,然后将修改后的数据写入快照设备,最后将修改后的数据写回到原始位置。

流程

  1. 创建system_b_base,对应映射到system_a。
  2. 创建system_cow(写时复制)设备。
  3. base和cow统一组成一个快照。
  4. 设备重新引导时,从快照上进行挂载,直到成功引导。从快照挂载成功后,将base和快照的内容合并,删除快照设备。

小结

Android系统的OTA升级机制经历了从传统非A/B系统更新到A/B系统更新,再到虚拟A/B和动态分区技术的演进。这些技术的引入,不仅提高了升级的便利性和安全性,还优化了存储空间的使用效率。对于Android开发者和对系统底层原理感兴趣的读者来说,理解这些技术细节有助于更好地掌握Android系统的运行机制。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号