VTS-Tests mit Debug-Ramdisk

Seit Android 10 wurde das Generic System Image (GSI), das zum Ausführen von CTS-on-GSI/VTS- Konformitätstests verwendet wird, von „userdebug“ in „user build type“ geändert, um eine Release-Signatur zu erhalten. Dies ist ein Problem für VTS-Tests, da für die Ausführung von VTS adb root erforderlich ist, adb root jedoch auf einem Benutzer-Build-Gerät nicht verfügbar ist.

Die Debug-Ramdisk (oder das Debug-Boot-Image) wird eingeführt, um adb root auf einem Benutzer-Build-Gerät zu aktivieren, dessen Bootloader entsperrt ist. Dies vereinfacht den Testablauf, indem für CTS-on-GSI und VTS-on-GSI dasselbe Benutzer-Build-GSI- system.img verwendet wird. Für die STS-Einrichtung ist weiterhin die Verwendung eines anderen userdebug OEM system.img erforderlich.

Die folgende Tabelle zeigt Image- und Build-Typ-Änderungen für Konformitätstests in Android 10.

Testsuite Testen Sie mit Bauen Ramdisk debuggen ADB-Root? Änderung der Build-Variante von Android 9 -> 10
CTS OEM-System Benutzer N N Keine Änderung
CTS-on-GSI GSI Benutzer N N

userdebug -> Benutzer-GSI

Freigabe unterschrieben

STS OEM-System Benutzerdebug N Y Neu in Q
VTS GSI Benutzer Y Y

userdebug -> Benutzer-GSI

Freigabe unterschrieben

Überblick

Diese zusätzlichen Bilddateien werden im Build-Ordner ( ${ANDROID_PRODUCT_OUT} ) generiert:

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

Wenn boot-debug.img auf die boot Partition des Geräts geflasht wird, werden die Userdebug-Version der System-Sepolicy-Datei und eine zusätzliche Eigenschaftendatei, adb_debug.prop , geladen. Dies ermöglicht adb root mit dem Benutzer, system.img zu erstellen (entweder GSIs oder OEMs).

Bei generischem Kernel-Image (GKI) mit Geräten, die über eine vendor_boot Partition verfügen, darf boot-debug.img nicht geflasht werden, da die boot Partition mit einem zertifizierten GKI-Image geflasht werden muss. Stattdessen sollte vendor_boot-debug.img auf die vendor_boot Partition geflasht werden, um das Debuggen der Ramdisk 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 der Kernel-Befehlszeile

Android 12 GSI

Für die Verwendung der Debug-Ramdisk mit Android 12 GSI sind keine zusätzlichen Anweisungen erforderlich.

Ab dem 29.09.2021 müssen Debug-Ramdisks nicht mehr mit dem Tool repack_bootimg aktualisiert werden. Android 12 GSI Build nach SGR1.210929.001 (7777720) integriert die aktuelle Datei userdebug_plat_sepolicy.cil in seine system.img und ignoriert userdebug_plat_sepolicy.cil von der Debug-Ramdisk. Einzelheiten finden Sie in den CLs .

Android 11 GSI

Wenn boot-debug.img oder vendor_boot-debug.img verwendet wird, wird die System-Sepolicy aus der Datei userdebug_plat_sepolicy.cil in der Debug-Ramdisk von boot-debug.img oder vendor_boot-debug.img geladen. Um GSI-Images zu booten, integrieren Sie bitte immer aktuelle Sepolicy-Änderungen aus dem android11-gsi Zweig, um Ihre boot-debug.img oder vendor_boot-debug.img neu zu erstellen.

Alternativ könnte das Tool repack_bootimg verwendet werden, um eine boot-debug.img oder vendor_boot-debug.img mit aktualisierter GSI-Separatrichtlinie neu zu erstellen.

Packen Sie eine Debug-Ramdisk neu

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

Die Schritte sind wie folgt:

  1. Laden Sie otatools.zip von https://ci.android.com herunter. Wir empfehlen, die Build-Artefakte von aosp_arm64-userdebug auf aosp-main herunterzuladen.

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

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. Laden Sie userdebug_plat_sepolicy.cil oder boot-with-debug-ramdisk-${KERNEL_VERSION}.img von dem GSI-Build herunter, den Sie verwenden. Wenn Sie beispielsweise ein arm64-GSI von RJR1.211020.001 (7840830) verwenden, laden Sie es von https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest herunter.

  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 :

    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 angepasst werden. Eine ausführliche Erklärung finden Sie im nächsten Abschnitt .

Pfad der Userdebug-Separatrichtlinie

Das obige repack_bootimg kopiert die Datei userdebug_plat_sepolicy.cil von der Ramdisk von --src_bootimg auf die Ramdisk von --dst_bootimg . Allerdings kann der Pfad innerhalb einer Debug-Ramdisk in verschiedenen Android-Versionen unterschiedlich sein. In Android 10 und 11 lautet der Pfad first_stage_ramdisk/userdebug_plat_sepolicy.cil für Geräte mit androidboot.force_normal_boot=1 in der Kernel-Befehlszeile. Andernfalls lautet der Pfad userdebug_plat_sepolicy.cil .

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob in der Kernel-Befehlszeile androidboot.force_normal_boot vorhanden ist:

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

Ab Android 12 lautet der Pfad innerhalb einer Debug-Ramdisk immer userdebug_plat_sepolicy.cil , unabhängig von der Existenz von androidboot.force_normal_boot=1 in der Kernel-Befehlszeile. Die folgende Tabelle zeigt die Pfade innerhalb einer Debug-Ramdisk in verschiedenen Android-Versionen.

Debug-Bild 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 Hängt von force_normal_boot ab Hängt von force_normal_boot ab userdebug_plat_sepolicy.cil
Gerätespezifischer Vendor_boot-debug.img N / A Hängt von force_normal_boot ab userdebug_plat_sepolicy.cil

Sie können --ramdisk_add angeben, um Dateien von und zu verschiedenen Pfaden mit einer Liste von src_path:dst_path -Paaren zu kopieren. Der folgende Befehl kopiert beispielsweise die Datei first_stage_ramdisk/userdebug_plat_sepolicy.cil von einem Android 11 boot-with-debug-ramdisk-5.4.img nach 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 in der Kernel-Befehlszeile kein androidboot.force_normal_boot=1 vorhanden ist, sollte der Befehl wie folgt angepasst werden, um den Zielpfad in userdebug_plat_sepolicy.cil zu ändern.

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 an --dst_bootimg übergebene Image als AVB-verkettete Partition konfiguriert ist, muss nach der Ausführung des Befehls repack_bootimg eine AVB-Fußzeile hinzugefügt werden.

Führen Sie beispielsweise vor dem Ausführen repack_bootimg den folgenden Befehl aus, um zu prüfen, ob eine vendor_boot-debug.img über eine verkettete AVB-Fußzeile verfügt.

avbtool info_image --image vendor_boot-debug.img

Wenn es ursprünglich über eine verkettete AVB-Fußzeile verfügt, muss nach der Ausführung des Befehls repack_bootimg eine AVB-Fußzeile hinzugefügt werden. Die Verwendung eines beliebigen Testschlüssels zum Signieren von vendor_boot-debug.img funktioniert, da die Debug-Ramdisk nur verwendet werden kann, wenn ein Gerät entsperrt ist, was nicht mit einem Freigabeschlüssel signierte Bilder auf der boot oder vendor_boot -Partition zulässt.

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