Test VTS con ramdisk di debug

Da Android 10, Generic System Image (GSI) utilizzata per l'esecuzione Test di conformità CTS-on-GSI/VTS cambiati da userdebug al tipo di build dell'utente per ottenere la firma della release. Si tratta di un problemi per i test VTS perché VTS richiede adb root per essere eseguito, adb root non è disponibile su un dispositivo di build dell'utente.

Viene introdotto il ramdisk di debug (o immagine di avvio di debug) per abilitare adb root su un dispositivo di build dell'utente il cui bootloader sbloccato. Ciò semplifica le fasi di test il flusso di lavoro utilizzando la stessa build dell'utente system.img per CTS-on-GSI e VTS su GSI. Per la configurazione di STS, l'utilizzo di un altro OEM userdebug system.img è ancora obbligatorio.

La tabella seguente mostra le modifiche al tipo di immagine e di build per i test di conformità in Android 10.

Suite di test Testa con Crea Debug di ramdisk root ADB? Android 9 -> 10 modifiche alle varianti della build
CTS Sistema dell'OEM utente N N Nessuna influenza
CTS su GSI GSI utente N N

debug utente -> GSI dell'utente

release firmata

STIT Sistema dell'OEM debug utente N Y Novità nel trimestre
VTS GSI utente Y Y

debug utente -> GSI dell'utente

release firmata

Panoramica

Questi file immagine aggiuntivi vengono generati nella cartella di build (${ANDROID_PRODUCT_OUT}):

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

Quando il flash boot-debug.img viene eseguito sulla partizione boot del dispositivo, la versione userdebug del file sepolicy di sistema e un altro file delle proprietà, adb_debug.prop sono caricati. Questo permette a adb root di creare contenuti system.img (di GSI o dell'OEM).

Per Immagine del kernel generica (GKI) che utilizzano dispositivi con una partizione vendor_boot, boot-debug.img poiché la partizione boot deve essere inclusa in un flashing con un'immagine GKI certificata. Al contrario, deve essere eseguito il flashing di vendor_boot-debug.img su vendor_boot per facilitare il debug del ramdisk.

Prerequisiti per l'utilizzo di un ramdisk di debug

Il ramdisk di debug viene fornito dall'OEM che esegue i test di conformità. it non deve avere la firma di release e può essere utilizzato soltanto se il dispositivo è sbloccato.

Il ramdisk di debug non verrà generato o utilizzato per l'upgrade dei dispositivi con:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE vero
  • skip_initramfs nella riga di comando del kernel
di Gemini Advanced.

GSI per Android 12

Non sono necessarie istruzioni aggiuntive per utilizzare il ramdisk di debug con Android 12 GSI.

A partire dal 29/09/2021, i ramdisk di debug non richiedono più l'aggiornamento con repack_bootimg. GSI per Android 12 creare dopo che SGR1.210929.001 (7777720) incorpora lo stato userdebug_plat_sepolicy.cil file nel suo system.img e ignora userdebug_plat_sepolicy.cil dal ramdisk di debug. Consulta le CL per i dettagli.

GSI per Android 11

Quando si utilizza boot-debug.img o vendor_boot-debug.img, il sistema sepolicy viene caricato dal file userdebug_plat_sepolicy.cil nella fase di debug ramdisk di boot-debug.img o vendor_boot-debug.img. Per avviare GSI immagini, ti invitiamo a incorporare sempre le modifiche Sepolicy aggiornate nel android11-gsi ramo per ricreare boot-debug.img o vendor_boot-debug.img.

In alternativa, potrebbe essere utilizzato lo strumento repack_bootimg per ricreare boot-debug.img o vendor_boot-debug.img con sepolicy GSI aggiornato.

Recompressione di un ramdisk di debug

Anziché incorporare modifiche al programma per ricreare boot-debug.img, i partner puoi utilizzare repack_bootimg per aggiornare il file GSI sepolicy in boot-debug.img (o vendor_boot-debug.img se il dispositivo utilizza GKI).

Ecco la procedura:

  1. Scarica otatools.zip da https://ci.android.com. Ti consigliamo di eseguire il download dagli elementi della build di aosp_arm64-userdebug il giorno aosp-main.

  2. Configura l'ambiente di esecuzione per repack_bootimg:

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. Scarica l'userdebug_plat_sepolicy.cil o boot-with-debug-ramdisk-${KERNEL_VERSION}.img della build GSI che stai che utilizzano. Ad esempio, se utilizzi un GSI arm64 RJR1.211020.001 (7840830), quindi scarica da https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest.

  4. Aggiorna il dispositivo boot-debug.img o vendor_boot-debug.img con 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
    

    Con 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
    

    Gli argomenti di --ramdisk_add possono essere regolati in base al dispositivo configurazioni. Per informazioni dettagliate, consulta la sezione successiva spiegazione.

Percorso del sepolicy userdebug

Il pulsante repack_bootimg sopra copia il file userdebug_plat_sepolicy.cil dal ramdisk di --src_bootimg al ramdisk di --dst_bootimg. Tuttavia, il percorso all'interno di un ramdisk di debug potrebbe essere diverso nelle diverse versioni di Android. Nella Android 10 e 11, il percorso first_stage_ramdisk/userdebug_plat_sepolicy.cil per i dispositivi con androidboot.force_normal_boot=1 nella riga di comando del kernel. In caso contrario, il percorso è userdebug_plat_sepolicy.cil.

Esegui questo comando per verificare se è presente androidboot.force_normal_boot nella riga di comando del kernel:

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

A partire da Android 12, il percorso all'interno di un debug ramdisk è sempre userdebug_plat_sepolicy.cil, indipendentemente dall'esistenza di androidboot.force_normal_boot=1 nella riga di comando del kernel. Le seguenti mostra i percorsi all'interno di un ramdisk di debug in diverse versioni di Android.

Immagine di debug Android 10 Android 11 Android 12
Avvio-GKI-con-ramdisk-debug-${KERNEL_VERSION}.img N/D first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
boot-debug.img specifico per dispositivo Dipende da force_normal_boot Dipende da force_normal_boot userdebug_plat_sepolicy.cil
Vendor_boot-debug specifico per dispositivo N/D Dipende da force_normal_boot userdebug_plat_sepolicy.cil

Puoi specificare il criterio --ramdisk_add per la copia di file da e in percorsi diversi con un elenco di src_path:dst_path coppie. Ad esempio, il seguente comando copia il file first_stage_ramdisk/userdebug_plat_sepolicy.cil da un dispositivo Android 11 boot-with-debug-ramdisk-5.4.img a first_stage_ramdisk/userdebug_plat_sepolicy.cil in un vendor_boot-debug.img di 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

Se nella riga di comando del kernel non è presente androidboot.force_normal_boot=1, il comando deve essere modificato come segue per cambiare il percorso di destinazione in 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

Se l'immagine passata a --dst_bootimg è configurata come Collegamento AVB devi aggiungere un piè di pagina AVB dopo aver eseguito repack_bootimg .

Ad esempio, prima di eseguire repack_bootimg, esegui questo comando per verifica se vendor_boot-debug.img ha un piè di pagina AVB concatenato.

avbtool info_image --image vendor_boot-debug.img

Se originariamente ha un piè di pagina AVB concatenato, dovrà essere aggiunto un piè di pagina AVB dopo aver eseguito il comando repack_bootimg. L'utilizzo di qualsiasi chiave di test per firmare vendor_boot-debug.img funziona perché il ramdisk di debug può essere utilizzato solo quando un dispositivo è sbloccato, il che consente immagini con chiave non rilasciato su boot o vendor_boot partizione.

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