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.img
vendor_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 otatools
export 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 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 ディスク内のパスを次の表に示します。
デバッグ イメージ | 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.cil
AVB フッターを追加する
--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