Pengujian VTS dengan ramdisk debug

Sejak Android 10, Generic System Image (GSI) yang digunakan untuk menjalankan Pengujian kepatuhan CTS-on-GSI/VTS berubah dari userdebug ke jenis build pengguna agar bisa ditandatangani rilis. Ini adalah masalah untuk pengujian VTS karena VTS memerlukan adb root yang akan dijalankan, tetapi adb root tidak tersedia di perangkat build pengguna.

Ramdisk debug (atau image boot debug) diperkenalkan untuk mengaktifkan adb root pada perangkat build pengguna yang bootloader-nya terbuka. Hal ini menyederhanakan pengujian dengan menggunakan system.img GSI build pengguna yang sama untuk CTS-on-GSI dan VTS-on-GSI. Untuk penyiapan STS, penggunaan system.img OEM userdebug lain masih tidak diperlukan.

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

Rangkaian pengujian Uji dengan Build Men-debug ramdisk root adb? Android 9 -> 10 perubahan varian build
CTS Sistem OEM pengguna T T Tidak ada perubahan
CTS-on-GSI GSI pengguna T T

userdebug -> GSI pengguna

ditandatangani rilis

STS Sistem OEM debug pengguna T Y Baru di Q
VTS GSI pengguna Y Y

userdebug -> GSI pengguna

ditandatangani rilis

Ringkasan

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

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

Saat 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 build pengguna system.img (GSI atau OEM).

Sebagai Gambar Kernel Generik (GKI) menggunakan perangkat yang memiliki partisi vendor_boot, boot-debug.img tidak boleh di-flash, karena partisi boot harus di-flash dengan image GKI yang tersertifikasi. Sebagai gantinya, vendor_boot-debug.img harus di-flash ke vendor_boot partisi untuk memfasilitasi {i>debug ramdisk<i}.

Prasyarat untuk menggunakan ramdisk debug

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

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

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE benar
  • skip_initramfs di command line kernel

GSI Android 12

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

Mulai tanggal 29/09/2021, debug ramdisk tidak lagi memerlukan pembaruan dengan Alat repack_bootimg. GSI Android 12 build setelah SGR1.210929.001 (7777720) menggabungkan userdebug_plat_sepolicy.cil file dalam system.img dan mengabaikan userdebug_plat_sepolicy.cil dari ramdisk debug. Lihat CL untuk spesifikasi pendukung.

GSI Android 11

Jika boot-debug.img atau vendor_boot-debug.img digunakan, sistem sepolicy dimuat dari file userdebug_plat_sepolicy.cil dalam debug ramdisk boot-debug.img atau vendor_boot-debug.img. Untuk mem-booting GSI gambar, harap selalu sertakan perubahan keamanan terkini dari android11-gsi untuk membuat ulang boot-debug.img atau vendor_boot-debug.img.

Atau, alat repack_bootimg dapat digunakan untuk membuat ulang boot-debug.img atau vendor_boot-debug.img dengan sekebijakan GSI yang diupdate.

Kemas ulang ramdisk debug

Partner tidak menyertakan perubahan kebijakan untuk membangun ulang boot-debug.img dapat menggunakan repack_bootimg untuk mengupdate file sepolicy GSI ke boot-debug.img (atau vendor_boot-debug.img jika perangkat menggunakan GKI).

Langkah-langkahnya sebagai berikut:

  1. Download otatools.zip dari https://ci.android.com. Sebaiknya download dari artefak build aosp_arm64-userdebug pada aosp-main.

  2. Siapkan lingkungan eksekusi untuk repack_bootimg:

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. Download 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), lalu download dari https://ci.android.com/builds/submitted/7840830/AOSP_arm64-user/latest.

  4. Update 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 perangkatnya konfigurasi standar. Lihat bagian berikutnya untuk mengetahui informasi selengkapnya penjelasan.

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 beberapa Android 10 dan 11, jalurnya adalah first_stage_ramdisk/userdebug_plat_sepolicy.cil untuk perangkat dengan androidboot.force_normal_boot=1 di command line kernel. Jika tidak, jalurnya adalah userdebug_plat_sepolicy.cil.

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

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

Mulai dari Android 12, jalur dalam debug ramdisk selalu userdebug_plat_sepolicy.cil, terlepas dari keberadaan androidboot.force_normal_boot=1 di command line kernel. Hal berikut tabel yang menunjukkan jalur dalam ramdisk debug pada versi Android yang berbeda.

Gambar debug Android 10 Android 11 Android 12
Booting-with-debug-ramdisk GKI-${KERNEL_VERSION}.img T/A first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
Boot-debug.img khusus perangkat Bergantung pada force_normal_boot Bergantung pada force_normal_boot userdebug_plat_sepolicy.cil
Vendor_boot-debug.img khusus perangkat T/A Bergantung pada force_normal_boot userdebug_plat_sepolicy.cil

Anda dapat menentukan --ramdisk_add untuk menyalin file dari dan ke jalur yang 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 command line 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 Dirantai AVB partisi, footer AVB perlu ditambahkan setelah menjalankan repack_bootimg perintah.

Misalnya, sebelum menjalankan repack_bootimg, jalankan perintah berikut untuk periksa apakah vendor_boot-debug.img memiliki footer AVB berantai.

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 uji apa pun untuk menandatangani vendor_boot-debug.img berfungsi karena ramdisk debug hanya dapat digunakan saat perangkat tidak dikunci, yang mengizinkan image bertanda tangan non-rilis di boot atau Partisi 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