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

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

ブートローダーがロック解除されているユーザー ビルド デバイスでadb rootを有効にするために、デバッグ RAM ディスク (またはデバッグ ブート イメージ) が導入されました。これにより、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 GSIユーザーN N

userdebug -> ユーザー GSI

リリース署名済み

STS OEMのシステムユーザーデバッグNQ の新機能
VTS GSIユーザー

userdebug -> ユーザー GSI

リリース署名済み

概要

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

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

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

vendor_bootパーティションを持つデバイスを使用するGeneric Kernel Image (GKI)の場合、 bootパーティションは認定された GKI イメージでフラッシュする必要があるため、 boot-debug.imgをフラッシュする必要はありません。代わりに、デバッグ RAM ディスクを容易にするために、 vendor_boot-debug.imgvendor_bootパーティションにフラッシュする必要があります。

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

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

デバッグ ramdisk は生成されず、次のデバイスのアップグレードには使用されません。

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

Android 12 GSI

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

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

Android 11 GSI

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-masteraosp_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.imguserdebug_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 の ramdisk から--src_bootimgの ramdisk に--dst_bootimgします。ただし、デバッグ 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 バージョンのデバッグ ramdisk 内のパスを示しています。

デバッグ画像アンドロイド 10人造人間11号人造人間12号
GKI boot-with-debug-ramdisk-${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 フッターを追加する必要があります。テスト キーを使用してvendor_boot-debug.imgに署名すると、デバイスのロックが解除されている場合にのみデバッグ RAM ディスクを使用でき、 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