Android10动态分区介绍.


Android 10支持了动态分区,这是一种可以通过无线下载 (OTA) 更新来创建、销毁分区或调整分区大小的用户空间分区系统。系统为设备分配一个 super 分区,其中的子分区可动态地调整大小。单个分区映像不再需要为将来的 OTA 预留空间,super 中剩余的可用空间可用于所有动态分区。


动态分区是使用 Linux 内核中的 dm-linear device-mapper 模块实现的。super 分区中包含列出 super 内每个动态分区的名称和块范围的元数据。在第一阶段 init 执行期间,系统会解析和验证这些元数据,并创建虚拟块设备来表示每个动态分区。


应用 OTA 时,系统会根据需要自动创建/删除动态分区,或者调整动态分区的大小。若是 A/B 设备,将存在两个元数据副本,而更改仅会应用到表示目标槽位的副本。 由于动态分区是在用户空间中实现的,因此引导加载程序所需的分区不能是动态的。例如,引导加载程序会读取 boot、dtbo 和 vbmeta,因此这些分区必须仍保持为物理分区。


下面列出标准Android系统中存在的分区,Android 9开始对分区结构增加新的技术(A/B 设备、system-as-root等),它们对分区作用有很大影响。


boot:包含通过 mkbootimg 组合在一起的kernel镜像和 ramdisk。使能system-as-root后,该分区仅存放kernel镜像。

system:主要包含 Android 框架。使能system-as-root后,该分区会包含原始 system.img 和 ramdisk.img 的合并内容。

recovery:用于存储在 OTA 升级时使用的recovery系统。如果设备支持A/B更新,OTA升级可以通过ramdisk执行,该分区可以不需要。

cache:用于存储临时数据,OTA升级包也会下载到这个分区。如果设备使用 A/B 更新,则可以不要此分区。

misc:分区供recovery使用,存储空间不能小于 4KB。

userdata:存储用户安装的应用和数据。

metadata:如果设备被加密,则需要使用该分区,分区的存储空间不能小于 16MB。

vendor:包含所有不可分发给 Android 开源项目 (AOSP) 的二进制文件。如果没有专有信息,可以不要该分区。

radio:包含无线装置映像。只有包含无线装置的设备才需要此分区。

tos:用于存储 Trusty 操作系统的二进制映像文件,仅在设备包含 Trusty 时使用。

product:用于存放产品专用的配置和应用,以便OEM定制自己的系统。Android 9 及更高版本支持该分区。product分区是对system分区的扩展,必须同时升级这两个分区。

odm:用于ODM自定义自己的板级支持包。Android 10 开始支持该分区。odm分区是对vendor分区的扩展,必须同时升级这两个分区。

最后编辑:2020年08月01日 ©著作权归作者所有

发表评论