デバッグ用 RAM ディスクを使用した VTS テスト

Android 10 以降、 CTS-on-GSI/VTSコンプライアンス テストの実行に使用される汎用システム イメージ(GSI) は、リリース署名されるために userdebug からユーザー ビルド タイプに変更されました。 VTS の実行にはadb root必要ですが、ユーザー ビルド デバイスではadb root使用できないため、これは VTS テストにとって問題です。

デバッグ RAM ディスク (またはデバッグ ブート イメージ) は、ブートローダーがロック解除されているユーザー ビルド デバイスでadb root有効にするために導入されました。これにより、CTS-on-GSI と VTS-on-GSI に同じユーザー ビルド GSI system.imgを使用することにより、テスト フローが簡素化されます。 STS セットアップの場合は、別の userdebug OEM system.imgを使用する必要があります。

次の表は、Android 10 でのコンプライアンス テストのイメージとビルド タイプの変更を示しています。

テストスイートでテストします建てるRAMディスクをデバッグするadbルート? Android 9 -> 10 ビルド バリアントの変更
CTS OEMのシステムユーザーN N変化なし
CTS-on-GSI地理院ユーザーN N

ユーザーデバッグ -> ユーザー GSI

リリース署名済み

STS OEMのシステムユーザーデバッグN Y Qの新機能
VTS地理院ユーザーY Y

ユーザーデバッグ -> ユーザー GSI

リリース署名済み

概要

これらの追加のイメージ ファイルは、ビルド フォルダー ( ${ANDROID_PRODUCT_OUT} ) の下に生成されます。

  • boot-debug.img
  • vendor_boot-debug.img

boot-debug.imgデバイスのbootパーティションにフラッシュされると、システム sepolicy ファイルの userdebug バージョンと追加のプロパティ ファイルadb_debug.propがロードされます。これにより、ユーザー build system.img (GSI または OEM のいずれか) でのadb rootが許可されます。

ブート パーティションは認定された GKI イメージでフラッシュする必要があるため、 vendor_bootパーティションを持つデバイスを使用する汎用カーネル イメージ (GKI)の場合、 boot boot-debug.imgをフラッシュしてはなりません。代わりに、ramdisk のデバッグを容易にするために、 vendor_boot-debug.img vendor_bootパーティションにフラッシュする必要があります。

デバッグ RAM ディスクを使用するための前提条件

デバッグ RAM ディスクは、コンプライアンス テストを実行する OEM によって提供されます。リリース署名されていてはならず、デバイスがロック解除されている場合にのみ使用できます。

デバッグ RAM ディスクは、次のデバイスをアップグレードするために生成または使用されません。

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE true
  • カーネルコマンドラインのskip_initramfs

アンドロイド12GSI

Android 12 GSI でデバッグ RAM ディスクを使用するために追加の指示は必要ありません。

2021 年 9 月 29 日以降、デバッグ RAM ディスクはrepack_bootimgツールを使用して更新する必要がなくなりました。 SGR1.210929.001 (7777720)以降の Android 12 GSI ビルドでは、最新のuserdebug_plat_sepolicy.cilファイルがsystem.imgに組み込まれ、デバッグ RAM ディスクのuserdebug_plat_sepolicy.cilが無視されます。詳細についてはCL を参照してください。

アンドロイド11GSI

boot-debug.imgまたはvendor_boot-debug.imgが使用される場合、システム sepolicy は、 boot-debug.imgまたはvendor_boot-debug.imgのデバッグ RAM ディスク内のuserdebug_plat_sepolicy.cilファイルからロードされます。 GSI イメージをブートするには、常にandroid11-gsiブランチから最新の sepolicy 変更を組み込み、 boot-debug.imgまたはvendor_boot-debug.imgを再構築してください。

あるいは、 repack_bootimgツールを使用して、更新された GSI sepolicy でboot-debug.imgまたはvendor_boot-debug.imgを再構築することもできます。

デバッグ RAM ディスクを再パックする

sepolicy の変更を組み込んでboot-debug.imgを再構築する代わりに、パートナーはrepack_bootimgを使用して GSI sepolicy ファイルをboot-debug.img (デバイスが GKI を使用している場合はvendor_boot-debug.img ) に更新できます。

手順は次のとおりです。

  1. https://ci.android.comからotatools.zipをダウンロードします。 aosp-mainaosp_arm64-userdebugのビルド アーティファクトからダウンロードすることをお勧めします。

  2. repack_bootimgの実行環境をセットアップします。

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. 使用している GSI ビルドからuserdebug_plat_sepolicy.cilまたはboot-with-debug-ramdisk-${KERNEL_VERSION}.imgをダウンロードします。たとえば、 RJR1.211020.001 (7840830)の arm64 GSI を使用している場合は、 https://ci.android.com/builds/submitted/ 7840830 /aosp_arm64-user/latestからダウンロードします。

  4. デバイスboot-debug.imgまたはvendor_boot-debug.img userdebug_plat_sepolicy.cilで更新します。

    repack_bootimg --local --dst_bootimg boot-debug.img \
        --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    # If using GKI
    repack_bootimg --local --dst_bootimg vendor_boot-debug.img \
        --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    

    boot-with-debug-ramdisk-${KERNEL_VERSION}.imgの場合:

    repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \
        --dst_bootimg boot-debug.img \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    # If using GKI
    repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \
        --dst_bootimg vendor_boot-debug.img \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    

    --ramdisk_addの引数は、デバイスの構成に応じて調整できます。詳細な説明については、次のセクションを参照してください。

userdebug sepolicy のパス

上記のrepack_bootimg 、ファイルuserdebug_plat_sepolicy.cil--src_bootimgの RAM ディスクから--dst_bootimgの RAM ディスクにコピーします。ただし、デバッグ RAM ディスク内のパスは Android バージョンによって異なる場合があります。 Android 10 および 11 では、カーネル コマンド ラインでandroidboot.force_normal_boot=1が設定されているデバイスのパスは、 first_stage_ramdisk/userdebug_plat_sepolicy.cilです。それ以外の場合、パスはuserdebug_plat_sepolicy.cilです。

次のコマンドを実行して、カーネル コマンド ラインにandroidboot.force_normal_bootがあるかどうかを確認します。

adb root
adb shell cat /proc/cmdline | grep force_normal_boot

Android 12 以降、カーネル コマンド ラインにandroidboot.force_normal_boot=1が存在するかどうかに関係なく、デバッグ RAM ディスク内のパスは常にuserdebug_plat_sepolicy.cilになります。次の表は、さまざまな Android バージョンのデバッグ RAM ディスク内のパスを示しています。

デバッグイメージアンドロイド10アンドロイド11アンドロイド12
デバッグ RAM ディスクを使用した GKI ブート-${KERNEL_VERSION}.img該当なしfirst_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
デバイス固有の boot-debug.img Force_normal_boot に依存しますForce_normal_boot に依存しますuserdebug_plat_sepolicy.cil
デバイス固有のvendor_boot-debug.img該当なしForce_normal_boot に依存しますuserdebug_plat_sepolicy.cil

--ramdisk_addを指定するとsrc_path:dst_pathペアのリストを使用して、異なるパスとの間でファイルをコピーできます。たとえば、次のコマンドは、ファイルfirst_stage_ramdisk/userdebug_plat_sepolicy.cilを Android 11 boot-with-debug-ramdisk-5.4.imgから Android 11 vendor_boot-debug.img内のfirst_stage_ramdisk/userdebug_plat_sepolicy.cilにコピーします。

repack_bootimg \
    --src_bootimg boot-with-debug-ramdisk-5.4.img \
    --dst_bootimg vendor_boot-debug.img \
    --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil

カーネル コマンド ラインにandroidboot.force_normal_boot=1がない場合は、コマンドを次のように調整して、宛先パスをuserdebug_plat_sepolicy.cilに変更する必要があります。

repack_bootimg \
    --src_bootimg boot-with-debug-ramdisk-5.4.img \
    --dst_bootimg vendor_boot-debug.img \
    --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil

--dst_bootimgに渡されたイメージがAVB チェーンパーティションとして構成されている場合、 repack_bootimgコマンドの実行後に AVB フッターを追加する必要があります。

たとえば、 repack_bootimgを実行する前に、次のコマンドを実行して、 vendor_boot-debug.imgチェーンされた AVB フッターがあるかどうかを確認します。

avbtool info_image --image vendor_boot-debug.img

もともとチェーンされた AVB フッターがある場合は、 repack_bootimgコマンドの実行後にAVB フッターを追加する必要があります。デバッグ RAM ディスクはデバイスのロックが解除されている場合にのみ使用できるため、任意のテスト キーを使用してvendor_boot-debug.imgに署名すると機能します。これにより、 bootまたはvendor_bootパーティション上で非リリース キーで署名されたイメージが許可されます。

avbtool add_hash_footer --partition_name vendor_boot \
    --partition_size 100663296 \
    --algorithm SHA256_RSA4096 \
    --key otatools/external/avb/test/data/testkey_rsa4096.pem \
    --image vendor_boot-debug.img