验证 system_other 分区

实施

搭载 Android 9 及更低版本的 Android 设备,并且具有 A/B 分区,可以使用非活动 system_other 分区(例如,当 slot_a 处于活动状态时为 system_b)来存储预优化的 VDEX/ODEX 文件。当使用 system_other 时,会将 ro.cp_system_other_odex 设置为 1,以便软件包管理器服务为 cppreopts.rc 设置 sys.cppreopt=requested 以对其执行操作。

在 Android 10 中,引入了 libfs_avb 以支持 system_other 分区的独立 AVB 验证。此类分区的 VBMeta 结构附加到分区的末尾,以通过文件系统中预期的公钥进行验证。Android 构建系统支持对 system_other.img 进行签名,同时在 /product/etc/security/avb/system_other.avbpubkey 下包含相应的签名密钥。发布工具 sign_target_files_apks.py 也支持将签名密钥替换为发布版本。

在 Android 10 之前发布的 A/B 设备具有物理 system_other 分区,即使它已使用设置为 truePRODUCT_RETROFIT_DYNAMIC_PARTITIONS 升级到 Android 10 也是如此。

使用 Android 10 发布的 A/B 设备必须具有逻辑 system_other 分区。以下示例显示了一个典型的 fstab.postinstall 文件,该文件在 system_other 上启用 AVB。

#<dev> <mnt_point> <type>  <mnt_flags options>  <fs_mgr_flags>
system /postinstall ext4 ro,nosuid,nodev,noexec
slotselect_other,logical,avb_keys=/product/etc/security/avb/system_other.avbpubkey

需要在 system_other 分区上启用 AVB 的设备应将 fstab 文件放在 product 分区中,并将属性 ro.postinstall.fstab.prefix 设置为 /product

# Use /product/etc/fstab.postinstall to mount system_other. PRODUCT_PRODUCT_PROPERTIES += \
ro.postinstall.fstab.prefix=/product

PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/fstab.postinstall:$(TARGET_COPY_OUT_PRODUCT)/etc/fstab.postinstall