Android 10 以降、CTS-on-GSI / VTS コンプライアンス テストの実行に使用される Generic System Image(GSI)は、リリース署名のために userdebug から user ビルドタイプに変更されました。これは VTS テストで問題になります。VTS は実行のために adb root を必要としますが、ユーザービルド デバイスでは adb root を使用できないからです。
デバッグ用 RAM ディスク(またはデバッグ ブートイメージ)は、ブートローダーがロック解除されているユーザービルド デバイスで adb root を有効にするために導入されました。これにより、CTS-on-GSI と VTS-on-GSI で同じ user ビルド 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 リリース署名 |
概要
次の追加のイメージ ファイルは、ビルドフォルダ(${ANDROID_PRODUCT_OUT})に生成されます。
boot-debug.imgvendor_boot-debug.img
boot-debug.img がデバイスの boot パーティションに書き込まれると、userdebug 版のシステム sepolicy ファイルと、追加のプロパティ ファイル adb_debug.prop が読み込まれます。これにより、ユーザービルド system.img(GSI または OEM のいずれかのもの)を使用した adb root が可能になります。
vendor_boot パーティションを含むデバイスを使用する汎用カーネル イメージ(GKI)の場合は、boot-debug.img を書き込んではなりません。boot パーティションには認定済み GKI イメージを書き込む必要があるからです。代わりに、デバッグ用 RAM ディスクを容易に使用できるように、vendor_boot-debug.img を vendor_boot パーティションに書き込む必要があります。
デバッグ用 RAM ディスクを使用するための前提条件
デバッグ用 RAM ディスクは、コンプライアンス テストを実行する OEM から提供されます。リリース署名されたものは使用できず、デバイスがロック解除されている場合にのみ使用できます。
次の場合、デバイスのアップグレード用にデバッグ用 RAM ディスクが生成または使用されることはありません。
BOARD_BUILD_SYSTEM_ROOT_IMAGEが true の場合skip_initramfsがカーネルのコマンドラインで指定された場合
Android 12 GSI
Android 12 GSI では、デバッグ用 RAM ディスクを使用するための追加の手順は不要です。
2021 年 9 月 29 日以降、repack_bootimg ツールを使用してデバッグ用 RAM ディスクを更新する必要はなくなりました。SGR1.210929.001 (7777720) 以降の Android 12 GSI ビルドでは、最新の userdebug_plat_sepolicy.cil ファイルが system.img に組み込まれており、デバッグ用 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)に更新できます。
手順は以下のとおりです。
https://ci.android.com から
otatools.zipをダウンロードします。aosp-mainにあるaosp_arm64-userdebugのビルド アーティファクトからダウンロードすることをおすすめします。repack_bootimgの実行環境をセットアップします。unzip otatools.zip -d otatoolsexport PATH="${PWD}/otatools/bin:${PATH}"repack_bootimg --help使用している 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 からダウンロードします。デバイスの
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 GKIrepack_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.cilboot-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 GKIrepack_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 rootadb shell cat /proc/cmdline | grep force_normal_boot
Android 12 以降では、カーネルのコマンドラインに androidboot.force_normal_boot=1 が存在するかどうかにかかわらず、デバッグ用 RAM ディスク内のパスは常に userdebug_plat_sepolicy.cil です。Android の各バージョンにおけるデバッグ用 RAM ディスク内のパスを次の表に示します。
| デバッグ イメージ | Android 10 | Android 11 | Android 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.cilAVB フッターを追加する
--dst_bootimg に渡されるイメージが AVB チェーン パーティションとして構成されている場合は、repack_bootimg コマンドを実行した後に AVB フッターを追加する必要があります。
たとえば、repack_bootimg を実行する前に、以下のコマンドを実行して、チェーンされた AVB フッターが vendor_boot-debug.img にあるかどうかを確認します。
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