VTS-Tests mit Debug Ramdisk

Da Android 10, das generische System - Image verwendet (GSI) zu laufen CTS-on-GSI / VTS Compliance - Tests von Userdebug auf Benutzerbuildtyp unterzeichnet , um zu Release geändert. Dies ist ein Problem für VTS - Tests , weil VTS erfordert adb root zu laufen, aber adb root ist auf einem User Build Gerät nicht verfügbar.

Der Debug - RAM - Disk (oder Debug - Boot - Image) eingeführt wird, damit adb root auf einer Benutzervorrichtung , deren Buildbootloader ist entriegelt . Dies vereinfacht den Testfluss durch den gleichen Benutzer build GSI Verwendung system.img für CTS-on-GSI und VTS-on-GSI. Für STS - Setup, eine andere Userdebug OEM mit system.img ist weiterhin erforderlich.

Die folgende Tabelle zeigt Änderungen an Image- und Build-Typen für Compliance-Tests in Android 10.

Testsuite Testen mit Bauen Debug-Ramdisk adb-root? Android 9 -> 10 Änderung der Build-Variante
CTS OEM-System Benutzer n n Keine Änderung
CTS-auf-GSI GSI Benutzer n n

userdebug -> Benutzer GSI

Freigabe unterzeichnet

STS OEM-System Benutzerdebug n Ja Neu in Q
VTS GSI Benutzer Ja Ja

userdebug -> Benutzer GSI

Freigabe unterzeichnet

Überblick

Diese zusätzlichen Bilddateien werden erzeugt unter dem Build - Ordner ( ${ANDROID_PRODUCT_OUT} ):

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

Wenn boot-debug.img auf die geflasht boot - Partition des Geräts, die Userdebug - Version der System sepolicy Datei und eine zusätzliche Eigenschaftendatei, adb_debug.prop , geladen. Dies ermöglicht adb root mit dem Benutzer build system.img (entweder GSI oder OEM).

Für Allgemein Kernel - vendor_boot boot-debug.img boot Image (GKI) unter Verwendung von Vorrichtungen , die eine haben vendor_boot Partition, boot-debug.img darf nicht geblitzt werden, da die boot - Partition muss mit einem zertifizierten GKI Bild geflasht werden. Statt vendor_boot-debug.img sollte auf die geflasht werden vendor_boot Partition , um Debug - RAM - Disk zu erleichtern.

Voraussetzungen für die Verwendung einer Debug-Ramdisk

Die Debug-Ramdisk wird vom OEM bereitgestellt, der die Konformitätstests durchführt. Es darf nicht mit einer Freigabesignatur versehen sein und kann nur verwendet werden, wenn das Gerät entsperrt ist.

Die Debug-Ramdisk wird nicht generiert oder zum Aktualisieren von Geräten verwendet mit:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE wahr
  • skip_initramfs in Kernel - Befehlszeile

Android 12 GSI

Es sind keine zusätzlichen Anweisungen erforderlich, um die Debug-Ramdisk mit Android 12 GSI zu verwenden.

Ausgehend von 2021.09.29, Debug - RAM - Disks nicht mehr aktualisiert werden muß mit dem repack_bootimg - Tool. Android 12 GSI build nach SGR1.210929.001 (7777720) umfasst die up-to-date userdebug_plat_sepolicy.cil Datei in ihrem system.img und ignoriert userdebug_plat_sepolicy.cil vom Debug - RAM - Disk. Siehe die CLs für weitere Einzelheiten.

Android 11 GSI

Wenn die boot-debug.img oder vendor_boot-debug.img verwendet wird, wird das System sepolicy aus der geladenen userdebug_plat_sepolicy.cil Datei in dem Debug - RAM - Disk der boot-debug.img oder vendor_boot-debug.img . Um GSI Bilder zu starten, bitte übernehmen immer up-to-date sepolicy Änderungen aus dem android11-gsi Zweig Ihr wieder aufbauen boot-debug.img oder vendor_boot-debug.img .

Alternativ kann das repack_bootimg könnte Werkzeug verwendet werden , um einen neu zu erstellen boot-debug.img oder vendor_boot-debug.img mit aktualisierten GSI sepolicy.

Eine Debug-Ramdisk neu packen

Statt sepolicy Änderungen der Einbeziehung neu zu erstellen boot-debug.img können Partner verwenden repack_bootimg die GSI sepolicy Datei in aktualisieren boot-debug.img (oder vendor_boot-debug.img , wenn das Gerät verwendet GKI).

Die Schritte sind wie folgt:

  1. Herunterladen otatools.zip von https://ci.android.com . Wir empfehlen , das Herunterladen von den Build - Artefakte von aosp_arm64-userdebug auf aosp-master .

  2. Richten Sie die Ausführungsumgebung für repack_bootimg :

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. Laden Sie die userdebug_plat_sepolicy.cil oder boot-with-debug-ramdisk-${KERNEL_VERSION}.img - boot-with-debug-ramdisk-${KERNEL_VERSION}.img von der GSI bauen Sie verwenden. Zum Beispiel, wenn Sie eine arm64 GSI aus verwenden RJR1.211020.001 (7840830) , dann laden Sie von https://ci.android.com/builds/submitted/ 7.840.830 / aosp_arm64-user / latest .

  4. Aktualisieren Sie das Gerät boot-debug.img oder vendor_boot-debug.img mit 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
    

    Mit boot-with-debug-ramdisk-${KERNEL_VERSION}.img - 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
    

    Die Argumente von --ramdisk_add können entsprechend den Gerätekonfigurationen eingestellt werden. Siehe den nächsten Abschnitt für ausführliche Erklärung.

Pfad der Benutzerdebug-Sepolicy

Die obige repack_bootimg Kopien Datei userdebug_plat_sepolicy.cil aus dem RAM - Disk von --src_bootimg auf den RAM - Disk von --dst_bootimg . Der Pfad innerhalb einer Debug-Ramdisk kann jedoch in verschiedenen Android-Versionen unterschiedlich sein. In Android 10 und 11 ist der Weg first_stage_ramdisk/userdebug_plat_sepolicy.cil für Geräte mit androidboot.force_normal_boot=1 in der Kernel - Befehlszeile. Ansonsten ist der Weg userdebug_plat_sepolicy.cil .

Führen Sie den folgenden Befehl zu überprüfen , ob es androidboot.force_normal_boot in der Kernel - Kommandozeile:

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

Ausgehend von Android 12, der Pfad in einem Debug - RAM - Disk ist immer userdebug_plat_sepolicy.cil , unabhängig von der Existenz von androidboot.force_normal_boot=1 in der Kernel - Kommandozeile. Die folgende Tabelle zeigt die Pfade innerhalb einer Debug-Ramdisk in verschiedenen Android-Versionen.

Bild debuggen Android 10 Android 11 Android 12
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img N / A first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
Gerätespezifische boot-debug.img Abhängig von force_normal_boot Abhängig von force_normal_boot userdebug_plat_sepolicy.cil
Gerätespezifischer Vendor_boot-debug.img N / A Abhängig von force_normal_boot userdebug_plat_sepolicy.cil

Sie können angeben , --ramdisk_add zum Kopieren von Dateien von und auf verschiedene Pfade mit einer Liste von src_path:dst_path Paaren. Zum Beispiel, die Datei mit dem folgenden Befehl kopiert first_stage_ramdisk/userdebug_plat_sepolicy.cil von einem Android - 11 - boot-with-debug-ramdisk-5.4.img zu first_stage_ramdisk/userdebug_plat_sepolicy.cil innerhalb eines Android 11 vendor_boot-debug.img .

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

Wenn es keine androidboot.force_normal_boot=1 in der Kernel - Kommandozeile, dann sollte der Befehl eingestellt wird , wie unter dem Zielpfad ändern 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

Wenn das Bild zu übergeben --dst_bootimg als so konfiguriert ist , AVB-gekettet Partition muss ein AVB Fußzeile nach dem Ausführen des hinzugefügt wird repack_bootimg Befehl.

Zum Beispiel, vor dem Ausführen von repack_bootimg , führen Sie den folgenden Befehl zu überprüfen , ob ein vendor_boot-debug.img eine verkettete AVB Fußzeile hat.

avbtool info_image --image vendor_boot-debug.img

Wenn es ursprünglich eine verkettete AVB Fußzeile hat, muss eine AVB Fußzeile nach dem Ausführen des hinzugefügt werden repack_bootimg Befehl. Unter Verwendung eine beliebige Testtaste , um die zu unterschreiben vendor_boot-debug.img funktioniert , weil der Debug - RAM - Disk kann nur verwendet werden , wenn ein Gerät entsperrt ist, die nicht-Freigabeschlüssel signiert Bilder auf das ermöglicht boot oder vendor_boot Partition.

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