Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

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

Android 10 では、CTS-on-GSI/VTS 準拠性テストを実行する Generic System Image(GSI)がリリース署名されているため、userdebug からユーザービルド タイプに変更されます。ただし、テスト中の Android デバイスへのホストルート権限を与える adb root コマンドは、ユーザービルドでは使用できません。この問題は、VTS の実行に adb root が必要なことに起因しています。

デバッグ用 RAM ディスクは、デバイスがロック解除されている場合に adb root を可能にするため Android 10 で導入されました。これにより、同じユーザービルド GSI system.img を再利用され、テストフローがシンプルになります。STS のセットアップの場合は、別の userdebug OEM system.img が引き続き必要です Android 10 の準拠テストのイメージとビルドタイプを次の表に示します。

テストスイート テストに使用するイメージ ビルド デバッグ用 RAM ディスク adb root? Android 9 から 10 でのビルド バリアントの変更
CTS OEM のシステム イメージ user × × 変更なし
CTS-on-GSI GSI user × ×

userdebug から user GSI

リリース署名

STS OEM のシステム イメージ userdebug × Q の新機能
VTS GSI user

userdebug から user GSI

リリース署名

ベンダーブート デバッグ用 RAM ディスク

Android 11 以降、汎用カーネル イメージ(GKI)アーキテクチャをサポートするデバイスでは、vendor_boot-debug.img を VTS の /vendor_boot パーティションに書き込む必要があります。また、boot-debug-{KERNEL_VERSION}.img ではなく、署名付き GKI boot-${KERNEL_VERSION}.img/boot パーティションに書き込む必要があります。

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

デバッグ用 RAM ディスクは、準拠性テストを実行する OEM によって提供されます。リリース署名されず、デバイスをロック解除している場合のみ使用できます

次の場合、デバイスのアップグレード用にデバッグ用 RAM ディスクが生成または使用されることはありません。

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE が true の場合
  • skip_initramfs がカーネルのコマンドラインで指定されている場合

boot-debug.img を使用すると、システムの sepolicy(plat_sepolicy.cil)が boot-debug.img から読み込まれます。必ず android{N}-gsi ブランチから sepolicy の新しい変更を組み込んで boot-debug.img を再ビルドしてください(例: android11-gsi)。これを行わなかった場合、デバイスで新しい GSI イメージを起動できない可能性があります。これは、/vendor_boot パーティションを備えたデバイスの vendor_boot-debug.img にも当てはまります。

デバッグ用 RAM ディスクの再パック

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

手順は以下のとおりです。

  1. https://ci.android.com から otatools.zip をダウンロードします。たとえば、aosp_arm64-userdebug ビルド アーティファクトからダウンロードします。

  2. 次のコマンドを実行して、repack_bootimg が使用可能かどうかをチェックします。

    $ unzip otatools.zip -d otatools
    $ export PATH="$PWD"/otatools/bin:"$PATH"
    $ repack_bootimg
    
  3. GSI ビルドから汎用の boot-debug.img をダウンロードします。たとえば、RJR1.210330.001_7244771 からの汎用の system.img を使用している場合は、同じバージョン RJR1.210330.001_7244771 から汎用の boot-debug-${KERNEL_VERSION}.img をダウンロードします。

  4. 次のコマンドを実行して userdebug sepolicy ファイルを boot-debug-${KERNEL_VERSION}.img から抽出し、そのファイルをデバイス固有の boot-debug.img(または vendor_boot-debug.img)に更新します。

    $ repack_bootimg --src_bootimg boot-debug-5.4.img --dst_bootimg boot-debug.img
    $ repack_bootimg --src_bootimg boot-debug-5.4.img --dst_bootimg vendor_boot-debug.img
    

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 です。

カーネルのコマンドラインに 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 になります。さまざまな Android バージョンにおけるデバッグ用 RAM ディスク内のパスを次の表に示します。

デバッグ イメージ Android 10 Android 11 Android 12
GKI boot-debug-{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 ペアのリストを指定して、異なる場所の間でファイルをコピーできます。--help オプションを使用すると、詳細な例も表示されます。

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

$ repack_bootimg --help

AOSP の変更点

AOSP でのデバッグ用 RAM ディスクの変更点は、debug_ramdisk ハッシュタグで識別されます。

次の追加のイメージ ファイルは、ビルドフォルダ out/target/product/$(TARGET_DEVICE) に生成されます。

  • ramdisk-debug.img
  • boot-debug.img

boot-debug.img がデバイスの /boot パーティションに書き込まれると、userdebug 版のシステム sepolicy ファイルと、追加のプロパティ ファイル adb_debug.prop が読み込まれます。これにより、ユーザービルド system.img(GSI または OEM のいずれかのもの)を使用した adb root が可能になります。

これは、vendor_boot-debug.imgvendor_boot パーティションに書き込まれたデバイスにも当てはまります。つまり、/boot パーティションまたは /vendor_boot パーティションからデバッグ ファイルを読み込むことができます。