Seit Android 10 hat sich das generische Systemimage (GSI), das zum Ausführen der CTS-on-GSI/VTS-Konformitätstests verwendet wird, von „userdebug“ zu „user“ geändert, um Release-signiert zu sein. Das ist ein Problem für VTS-Tests, da für VTS adb root
erforderlich ist, adb root
aber auf einem Gerät mit Nutzer-Build nicht verfügbar ist.
Die Debug-Ramdisk (oder das Debug-Boot-Image) wird eingeführt, um adb root
auf einem Gerät mit Nutzer-Build zu aktivieren, dessen Bootloader entsperrt ist. Dadurch wird der Testablauf vereinfacht, da für CTS‑on‑GSI und VTS‑on‑GSI derselbe Nutzer-Build-GSI system.img
verwendet wird. Für die STS-Einrichtung ist weiterhin ein anderes system.img
-OEM-Userdebug erforderlich.
In der folgenden Tabelle sind die Änderungen bei Bild- und Build-Typen für Compliance-Tests in Android 10 aufgeführt.
Test-Suite | Testen mit | Entwickeln | Ramdisk debuggen | adb root? | Änderung der Build-Variante von Android 9 zu Android 10 |
---|---|---|---|---|---|
CTS | System des OEM | Nutzer | N | N | Keine Änderung |
CTS-on-GSI | GSI | Nutzer | N | N | userdebug -> user GSI Release signiert |
STS | System des OEM | userdebug | N | J | Neu in Q |
VTS | GSI | Nutzer | J | J | userdebug -> user GSI Release signiert |
Übersicht
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 Partition boot
des Geräts geflasht wird, werden die Userdebug-Version der System-SELinux-Datei und eine zusätzliche Eigenschaftendatei, adb_debug.prop
, geladen. Dadurch kann adb root
mit dem Nutzer-Build system.img
(entweder GSIs oder die des OEM) verwendet werden.
Bei Geräten mit einer vendor_boot
-Partition, die Generic Kernel Image (GKI) verwenden, 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 Partition vendor_boot
geflasht werden, um die Debug-Ramdisk zu ermöglichen.
Voraussetzungen für die Verwendung einer Debug-Ramdisk
Die Debug-Ramdisk wird vom OEM bereitgestellt, der die Konformitätstests ausführt. Es darf nicht mit einem Release-Signaturschlüssel signiert sein und kann nur verwendet werden, wenn das Gerät entsperrt ist.
Die Debug-Ramdisk wird nicht generiert oder zum Upgraden von Geräten mit folgenden Eigenschaften verwendet:
BOARD_BUILD_SYSTEM_ROOT_IMAGE
trueskip_initramfs
in der Kernel-Befehlszeile
Android 12 GSI
Für die Verwendung von 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. Der Android 12-GSI-Build nach SGR1.210929.001 (7777720)
enthält die aktuelle userdebug_plat_sepolicy.cil
-Datei in seinem system.img
und ignoriert userdebug_plat_sepolicy.cil
aus der Debug-Ramdisk. Weitere Informationen finden Sie in den Änderungslisten.
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
im Debug-RAM-Laufwerk von boot-debug.img
oder vendor_boot-debug.img
geladen. Damit GSI-Images gebootet werden können, müssen Sie immer aktuelle sepolicy-Änderungen aus dem Branch android11-gsi
einbeziehen, um boot-debug.img
oder vendor_boot-debug.img
neu zu erstellen.
Alternativ kann das repack_bootimg
-Tool verwendet werden, um ein boot-debug.img
oder vendor_boot-debug.img
mit aktualisierten GSI-SELinux-Richtlinien neu zu erstellen.
Debug-Ramdisk neu packen
Anstatt sepolicy-Änderungen zur Neuerstellung von boot-debug.img
einzubinden, 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.
So gehen Sie vor:
Laden Sie
otatools.zip
von https://ci.android.com herunter. Wir empfehlen, die Build-Artefakte vonaosp_cf_arm64_only_phone-userdebug
imaosp-android-latest-release
-Branch 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 die
userdebug_plat_sepolicy.cil
oderboot-with-debug-ramdisk-${KERNEL_VERSION}.img
aus 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 detaillierte Erklärung finden Sie im nächsten Abschnitt.
Pfad der userdebug-SEPolicy
Mit dem obigen repack_bootimg
wird die Datei userdebug_plat_sepolicy.cil
von der Ramdisk von --src_bootimg
auf die Ramdisk von --dst_bootimg
kopiert. Der Pfad in einer Debug-Ramdisk kann sich jedoch in verschiedenen Android-Versionen unterscheiden. Unter 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 ist der Pfad userdebug_plat_sepolicy.cil
.
Führen Sie den folgenden Befehl aus, um zu prüfen, ob androidboot.force_normal_boot
in der Kernel-Befehlszeile vorhanden ist:
adb root
adb shell cat /proc/cmdline | grep force_normal_boot
Ab Android 12 ist der Pfad in einer Debug-Ramdisk immer userdebug_plat_sepolicy.cil
, unabhängig davon, ob androidboot.force_normal_boot=1
in der Kernel-Befehlszeile vorhanden ist. In der folgenden Tabelle sind die Pfade in einer Debug-Ramdisk in verschiedenen Android-Versionen aufgeführt.
Debug-Image | Android 10 | Android 11 | Android 12 |
---|---|---|---|
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img | – | first_stage_ramdisk/userdebug_plat_sepolicy.cil |
userdebug_plat_sepolicy.cil |
Gerätespezifisches boot-debug.img | Abhängig von force_normal_boot | Abhängig von force_normal_boot | userdebug_plat_sepolicy.cil |
Gerätespezifisches vendor_boot-debug.img | – | Abhängig von force_normal_boot | 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. Mit dem folgenden Befehl wird beispielsweise die Datei first_stage_ramdisk/userdebug_plat_sepolicy.cil
aus einem Android 11-boot-with-debug-ramdisk-5.4.img
in first_stage_ramdisk/userdebug_plat_sepolicy.cil
in einem Android 11-vendor_boot-debug.img
kopiert.
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 unten 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
AVB-Fußzeile hinzufügen
Wenn das an --dst_bootimg
übergebene Image als AVB-verkettete Partition konfiguriert ist, muss nach dem Ausführen des repack_bootimg
-Befehls eine AVB-Fußzeile hinzugefügt werden.
Führen Sie beispielsweise vor dem Ausführen von repack_bootimg
den folgenden Befehl aus, um zu prüfen, ob ein vendor_boot-debug.img
einen verketteten AVB-Footer hat.
avbtool info_image --image vendor_boot-debug.img
Wenn das Image ursprünglich eine verkettete AVB-Fußzeile hat, muss eine AVB-Fußzeile nach dem Ausführen des Befehls repack_bootimg
hinzugefügt werden. Die Verwendung eines beliebigen Testschlüssels zum Signieren von vendor_boot-debug.img
ist möglich, da die Debug-Ramdisk nur verwendet werden kann, wenn ein Gerät entsperrt ist. Dadurch können Bilder, die mit einem Nicht-Release-Schlüssel signiert wurden, auf der Partition boot
oder vendor_boot
verwendet werden.
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