Pengujian VTS dengan debug ramdisk

Sejak Android 10, Generic System Image (GSI) yang digunakan untuk menjalankan pengujian kepatuhan CTS-on-GSI/VTS diubah dari userdebug menjadi tipe build pengguna agar dapat ditandatangani rilis. Ini adalah masalah untuk pengujian VTS karena VTS memerlukan adb root untuk dijalankan, tetapi adb root tidak tersedia pada perangkat yang dibuat pengguna.

Debug ramdisk (atau image boot debug) diperkenalkan untuk mengaktifkan adb root pada perangkat build pengguna yang bootloadernya tidak terkunci . Hal ini menyederhanakan alur pengujian dengan menggunakan GSI system.img buatan pengguna yang sama untuk CTS-on-GSI dan VTS-on-GSI. Untuk penyiapan STS, masih diperlukan userdebug OEM system.img lain.

Tabel berikut menunjukkan perubahan gambar dan jenis build untuk pengujian kepatuhan di Android 10.

Rangkaian tes Uji dengan Membangun Debug ramdisk akar adb? Android 9 -> 10 perubahan varian build
CTS sistem OEM pengguna N N Tidak ada perubahan
CTS-on-GSI GSI pengguna N N

debug pengguna -> pengguna GSI

rilis ditandatangani

STS sistem OEM debug pengguna N Y Baru di Q
VTS GSI pengguna Y Y

debug pengguna -> pengguna GSI

rilis ditandatangani

Ringkasan

File gambar tambahan ini dihasilkan di bawah folder build ( ${ANDROID_PRODUCT_OUT} ):

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

Ketika boot-debug.img di-flash ke partisi boot perangkat, versi userdebug dari file sepolicy sistem dan file properti tambahan, adb_debug.prop , dimuat. Hal ini memungkinkan adb root dengan pengguna build system.img (baik GSI atau OEM).

Untuk Generic Kernel Image (GKI) yang menggunakan perangkat yang memiliki partisi vendor_boot , boot-debug.img tidak boleh di-flash, karena partisi boot harus di-flash dengan image GKI bersertifikat. Sebaliknya vendor_boot-debug.img harus di-flash ke partisi vendor_boot untuk memfasilitasi debug ramdisk.

Prasyarat untuk menggunakan ramdisk debug

Ramdisk debug disediakan oleh OEM yang menjalankan uji kepatuhan. Itu tidak boleh ditandatangani rilisnya, dan hanya dapat digunakan jika perangkat tidak terkunci.

Ramdisk debug tidak akan dibuat atau digunakan untuk memutakhirkan perangkat dengan:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE benar
  • skip_initramfs di baris perintah kernel

Android 12GSI

Tidak diperlukan instruksi tambahan untuk menggunakan debug ramdisk dengan Android 12 GSI.

Mulai 29/09/2021, debug ramdisk tidak lagi memerlukan pembaruan dengan alat repack_bootimg . Android 12 GSI yang dibuat setelah SGR1.210929.001 (7777720) menggabungkan file userdebug_plat_sepolicy.cil terbaru di system.img -nya dan mengabaikan userdebug_plat_sepolicy.cil dari ramdisk debug. Lihat CL untuk detailnya.

Android 11GSI

Ketika boot-debug.img atau vendor_boot-debug.img digunakan, sepolicy sistem dimuat dari file userdebug_plat_sepolicy.cil di ramdisk debug boot-debug.img atau vendor_boot-debug.img . Untuk mem-boot image GSI, harap selalu sertakan perubahan sepolicy terkini dari cabang android11-gsi untuk membangun kembali boot-debug.img atau vendor_boot-debug.img .

Alternatifnya, alat repack_bootimg dapat digunakan untuk membangun kembali boot-debug.img atau vendor_boot-debug.img dengan kebijakan GSI yang diperbarui.

Kemas ulang ramdisk debug

Daripada memasukkan perubahan sepolicy untuk membangun kembali boot-debug.img , partner dapat menggunakan repack_bootimg untuk mengupdate file sepolicy GSI menjadi boot-debug.img (atau vendor_boot-debug.img jika perangkat menggunakan GKI).

Langkah-langkahnya adalah sebagai berikut:

  1. Unduh otatools.zip dari https://ci.android.com . Kami merekomendasikan mengunduh dari artefak build aosp_arm64-userdebug di aosp-main .

  2. Siapkan lingkungan eksekusi untuk repack_bootimg :

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. Unduh userdebug_plat_sepolicy.cil atau boot-with-debug-ramdisk-${KERNEL_VERSION}.img dari build GSI yang Anda gunakan. Misalnya, jika Anda menggunakan GSI arm64 dari RJR1.211020.001 (7840830) , unduh dari https://ci.android.com/builds/subowned/ 7840830 /aosp_arm64-user/latest .

  4. Perbarui perangkat boot-debug.img atau vendor_boot-debug.img dengan 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
    

    Dengan 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
    

    Argumen --ramdisk_add dapat disesuaikan dengan konfigurasi perangkat. Lihat bagian selanjutnya untuk penjelasan rinci.

Jalur sepolicy userdebug

repack_bootimg di atas menyalin file userdebug_plat_sepolicy.cil dari ramdisk --src_bootimg ke ramdisk --dst_bootimg . Namun, jalur dalam ramdisk debug mungkin berbeda di versi Android yang berbeda. Di Android 10 dan 11, jalurnya adalah first_stage_ramdisk/userdebug_plat_sepolicy.cil untuk perangkat dengan androidboot.force_normal_boot=1 di baris perintah kernel. Jika tidak, jalurnya adalah userdebug_plat_sepolicy.cil .

Jalankan perintah berikut untuk memeriksa apakah ada androidboot.force_normal_boot di baris perintah kernel:

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

Mulai Android 12, jalur dalam ramdisk debug selalu userdebug_plat_sepolicy.cil , terlepas dari keberadaan androidboot.force_normal_boot=1 di baris perintah kernel. Tabel berikut menunjukkan jalur dalam ramdisk debug di berbagai versi Android.

Men-debug gambar Android 10 Android 11 Android 12
Boot GKI dengan-debug-ramdisk-${KERNEL_VERSION}.img T/A first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
Boot-debug.img khusus perangkat Tergantung pada force_normal_boot Tergantung pada force_normal_boot userdebug_plat_sepolicy.cil
Vendor_boot-debug.img khusus perangkat T/A Tergantung pada force_normal_boot userdebug_plat_sepolicy.cil

Anda dapat menentukan --ramdisk_add untuk menyalin file dari dan ke jalur berbeda dengan daftar pasangan src_path:dst_path . Misalnya, perintah berikut menyalin file first_stage_ramdisk/userdebug_plat_sepolicy.cil dari boot-with-debug-ramdisk-5.4.img Android 11 ke first_stage_ramdisk/userdebug_plat_sepolicy.cil dalam vendor_boot-debug.img Android 11.

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

Jika tidak ada androidboot.force_normal_boot=1 di baris perintah kernel, maka perintahnya harus disesuaikan seperti di bawah ini untuk mengubah jalur tujuan menjadi 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

Jika gambar yang diteruskan ke --dst_bootimg dikonfigurasi sebagai partisi berantai AVB , footer AVB perlu ditambahkan setelah menjalankan perintah repack_bootimg .

Misalnya, sebelum menjalankan repack_bootimg , jalankan perintah berikut untuk memeriksa apakah vendor_boot-debug.img memiliki footer AVB yang dirantai.

avbtool info_image --image vendor_boot-debug.img

Jika awalnya memiliki footer AVB berantai, footer AVB perlu ditambahkan setelah menjalankan perintah repack_bootimg . Menggunakan kunci tes apa pun untuk menandatangani vendor_boot-debug.img berfungsi karena ramdisk debug hanya dapat digunakan ketika perangkat tidak terkunci, yang memungkinkan gambar yang ditandatangani kunci non-rilis pada partisi boot atau 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