In Android 10 e versioni successive, l'immagine di sistema generica (GSI) utilizzata per eseguire i test di conformità CTS-on-GSI/VTS è passata dal tipo di compilazione userdebug al tipo di compilazione user per essere firmata per la release. Questo è un
problema per i test VTS perché VTS richiede
adb root per l'esecuzione, ma
adb root non è disponibile su un dispositivo con build user.
Il ramdisk di debug (o l'immagine di avvio di debug) viene introdotto per abilitare adb root su un
dispositivo con build user il cui bootloader è
sbloccato. In questo modo, il flusso di test viene semplificato utilizzando lo stesso system.img GSI con build user per CTS-on-GSI e VTS-on-GSI. Per la configurazione di STS, è comunque necessario utilizzare un altro system.img OEM userdebug.
La tabella seguente mostra le modifiche al tipo di immagine e build per i test di conformità in Android 10.
| Suite di test | Testa con | Build | Ramdisk di debug | adb root? | Modifica della variante di compilazione da Android 9 ad Android 10 |
|---|---|---|---|---|---|
| CTS | Sistema OEM | user | N | N | Nessuna variazione |
| CTS-on-GSI | GSI | user | N | N | GSI userdebug -> user Firma per la release |
| STS | Sistema OEM | userdebug | N | Y | Novità di Q |
| VTS | GSI | user | Y | Y | GSI userdebug -> user Firma per la release |
Panoramica
Questi file immagine aggiuntivi vengono generati nella cartella di build (${ANDROID_PRODUCT_OUT}):
boot-debug.imgvendor_boot-debug.img
Quando boot-debug.img viene eseguito il flashing nella partizione boot del dispositivo, vengono caricati la
versione userdebug del file sepolicy di sistema e un file di proprietà aggiuntivo,
adb_debug.prop. In questo modo, adb root può essere utilizzato con system.img con build user (di GSI o dell'OEM).
Per i dispositivi che utilizzano l'
immagine kernel generica (GKI)
e che hanno una partizione vendor_boot, non è necessario eseguire il flashing di boot-debug.img, poiché la partizione boot deve essere eseguita con il flashing di un'immagine GKI certificata.
Invece, vendor_boot-debug.img deve essere eseguito il flashing nella partizione vendor_boot
per facilitare il ramdisk di debug.
Prerequisiti per l'utilizzo di un ramdisk di debug
Il ramdisk di debug viene fornito dall'OEM che esegue i test di conformità. Non deve essere firmato per la release e può essere utilizzato solo se il dispositivo è sbloccato.
Il ramdisk di debug non verrà generato o utilizzato per l'upgrade dei dispositivi con:
BOARD_BUILD_SYSTEM_ROOT_IMAGEtrueskip_initramfsnella riga di comando del kernel
GSI Android 12
Non sono necessarie istruzioni aggiuntive per utilizzare il ramdisk di debug con GSI Android 12.
A partire dal 29/09/2021, i ramdisk di debug non richiedono più l'aggiornamento con lo
repack_bootimg strumento. La build GSI Android 12 successiva a SGR1.210929.001 (7777720) incorpora il file userdebug_plat_sepolicy.cil aggiornato in system.img e ignora userdebug_plat_sepolicy.cil dal ramdisk di debug. Per maggiori dettagli, consulta i
CL per
dettagli.
GSI Android 11
Quando viene utilizzato boot-debug.img o vendor_boot-debug.img, il sepolicy di sistema
viene caricato dal file userdebug_plat_sepolicy.cil nel ramdisk di debug
di boot-debug.img o vendor_boot-debug.img. Per avviare le immagini GSI, incorpora sempre le modifiche sepolicy aggiornate dal
android11-gsi
ramo per ricompilare boot-debug.img o vendor_boot-debug.img.
In alternativa, è possibile utilizzare lo strumento repack_bootimg per ricompilare un
boot-debug.img o vendor_boot-debug.img con il sepolicy GSI aggiornato.
Ricompilare un ramdisk di debug
Anziché incorporare le modifiche sepolicy per ricompilare boot-debug.img, i partner
possono utilizzare repack_bootimg per aggiornare il file sepolicy GSI in boot-debug.img
(o vendor_boot-debug.img se il dispositivo utilizza GKI).
I passaggi sono i seguenti:
Scarica
otatools.zipda https://ci.android.com. Ti consigliamo di scaricare gli artefatti di build diaosp_cf_arm64_only_phone-userdebugnel ramoaosp-android-latest-release.Configura l'ambiente di esecuzione per
repack_bootimg:unzip otatools.zip -d otatoolsexport PATH="${PWD}/otatools/bin:${PATH}"repack_bootimg --helpScarica
userdebug_plat_sepolicy.ciloboot-with-debug-ramdisk-${KERNEL_VERSION}.imgdalla build GSI che stai utilizzando. Ad esempio, se utilizzi un GSI arm64 daRJR1.211020.001 (7840830), scaricalo da https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest.Aggiorna
boot-debug.imgovendor_boot-debug.imgdel dispositivo conuserdebug_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.cilCon
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 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.cilGli argomenti di
--ramdisk_addpossono essere modificati in base alle configurazioni del dispositivo. Per una spiegazione dettagliata, consulta la sezione successiva.
Percorso del sepolicy userdebug
Il comando repack_bootimg riportato 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 in diverse versioni di Android. In 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 il seguente comando per verificare se nella riga di comando del kernel è presente androidboot.force_normal_boot:
adb rootadb shell cat /proc/cmdline | grep force_normal_boot
In Android 12 e versioni successive, il percorso all'interno di un ramdisk di debug è sempre userdebug_plat_sepolicy.cil, indipendentemente dall'esistenza di androidboot.force_normal_boot=1 nella riga di comando del kernel. La tabella seguente mostra i percorsi all'interno di un ramdisk di debug in diverse versioni di Android.
| Immagine di debug | Android 10 | Android 11 | Android 12 |
|---|---|---|---|
| GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img | N/D | first_stage_ramdisk/userdebug_plat_sepolicy.cil |
userdebug_plat_sepolicy.cil |
| boot-debug.img specifico per il dispositivo | Dipende da force_normal_boot | Dipende da force_normal_boot | userdebug_plat_sepolicy.cil |
| vendor_boot-debug.img specifico per il dispositivo | N/D | Dipende da force_normal_boot | userdebug_plat_sepolicy.cil |
Puoi specificare --ramdisk_add per copiare i file da e verso percorsi diversi con un elenco di coppie src_path:dst_path. Ad esempio, il seguente comando copia il file first_stage_ramdisk/userdebug_plat_sepolicy.cil da un boot-with-debug-ramdisk-5.4.img Android 11 a first_stage_ramdisk/userdebug_plat_sepolicy.cil all'interno di un 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.cilSe nella riga di comando del kernel non è presente androidboot.force_normal_boot=1, il comando deve essere modificato come indicato di seguito per modificare 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.cilAggiungere un piè di pagina AVB
Ad esempio, prima di eseguire repack_bootimg, esegui il seguente comando per verificare se un vendor_boot-debug.img ha un piè di pagina AVB concatenato.
avbtool info_image --image vendor_boot-debug.imgSe originariamente ha un piè di pagina AVB concatenato, è necessario aggiungere un piè di pagina AVB dopo aver eseguito il comando repack_bootimg. L'utilizzo di qualsiasi chiave di test per firmare il
vendor_boot-debug.img funziona perché il ramdisk di debug può essere utilizzato solo quando un
dispositivo è sbloccato, il che consente immagini firmate con chiavi non di release nella partizione boot o
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