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:
Laden Sie
otatools.zip
von https://ci.android.com herunter. Wir empfehlen, die Build-Artefakte vonaosp_arm64-userdebug
aufaosp-main
herunterzuladen.Richten Sie die Ausführungsumgebung für
repack_bootimg
ein:unzip otatools.zip -d otatools
export PATH="${PWD}/otatools/bin:${PATH}"
repack_bootimg --help
Laden Sie
userdebug_plat_sepolicy.cil
oderboot-with-debug-ramdisk-${KERNEL_VERSION}.img
von dem GSI-Build herunter, den Sie verwenden. Wenn Sie beispielsweise ein arm64-GSI vonRJR1.211020.001 (7840830)
verwenden, laden Sie es von https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest herunter.Aktualisieren Sie das Gerät
boot-debug.img
odervendor_boot-debug.img
mituserdebug_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
Fügen Sie eine AVB-Fußzeile hinzu
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