system_other パーティションの検証

実装

A/B パーティションを備えた Android 9 以下の Android 搭載デバイスでは、無効な system_other パーティション(たとえば、slot_a が無効な場合の system_b)を使用して、事前に最適化された VDEX/ODEX ファイルを保存します。system_other が使用された場合、ro.cp_system_other_odex が 1 に設定され、パッケージ マネージャー サービスが sys.cppreopt=requested を設定し、cppreopts.rc が機能するようになります。

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 パーティションがあります。このパーティションは Android 10 にアップグレードして PRODUCT_RETROFIT_DYNAMIC_PARTITIONStrue に設定された後も存在します。

リリース時に Android 10 が搭載されている A/B デバイスには論理 system_other パーティションが存在しているはずです。次の例は、system_other で AVB を有効にする一般的な fstab.postinstall ファイルを示しています。

#<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 ファイルをプロダクト パーティションに配置し、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