Android-Implementierungen können ein DTB-Image (Device Tree Blob) für den Bootloader enthalten. Der Speicherort des DTB-Images (und die Optionen zum Angeben von DTB-Imageparametern) unterscheiden sich zwischen den Android-Releases.
Unter Android 11 müssen Geräte, die das Generic Kernel Image (GKI) verwenden, die Boot-Partition des Anbieters unterstützen. Diese enthält alle anbieterspezifischen Informationen, die aus der Boot-Partition verschoben wurden. Da das DTB-Image anbieterspezifische Daten enthält, ist es jetzt Teil der Anbieter-Boot-Partition. Informationen zum Angeben von DTB-Image-Parametern finden Sie unter Vendor Boot Header.
Unter Android 10 können Geräte das DTB-Image in der Bootpartition enthalten. Informationen zum Angeben von DTB-Image-Parametern finden Sie unter DTB-Image in das Boot-Image einbinden.
Unter Android 9 und niedriger kann das DTB-Image in einer eigenen Partition vorhanden sein oder an den Kernel
image.gz
angehängt werden, um das Kernel- und DTB-Image zu erstellen. Dieses wird dann anmkbootimg
übergeben, umboot.img
zu erstellen.
DTB-Image-Format
Unter Android 10 und höher muss das DTB-Image eines der folgenden Formate verwenden:
Gerätebaum-Blobs, die seriell verkettet sind. Der Bootloader verwendet das Feld
totalsize
in jedem FDT-Header, um das entsprechende Blob zu lesen und zu parsen.DTB/DTBO-Partitionen Der Bootloader kann den richtigen DT-Blob effizient auswählen, indem er das
dt_table_entry
-Objekt (enthält die Felderid
,rev
undcustom
) untersucht, das Informationen zur Hardwareidentifikation für den Eintrag enthalten kann. Weitere Informationen finden Sie unter DTB/DTBO-Partitionen.
DTB-Image in das Boot-Image aufnehmen
Geräte mit Android 10 können das DTB-Image im Boot-Image enthalten. Dadurch muss Android keine Scripts mehr unterstützen, die das DTB-Image an image.gz
im Kernel anhängen. Außerdem kann der VTS-Test (Vendor Test Suite) verwendet werden, um die Platzierung des DTB zu prüfen und zu standardisieren.
Außerdem ist es bei Geräten, die keine A/B-Geräte sind, sicherer, das DTB als Teil des Wiederherstellungs-Images anstelle einer separaten Partition zu haben, um Probleme durch unterbrochene OTAs zu vermeiden. Wenn während eines Over-the-air-Updates ein Problem auftritt, nachdem die DTB-Partition aktualisiert wurde, aber vor Abschluss des vollständigen Updates, versucht das Gerät, im Wiederherstellungsmodus zu starten, um das OTA-Update abzuschließen. Da die DTB-Partition jedoch bereits aktualisiert wurde, kann es zu einer Abweichung vom Wiederherstellungs-Image kommen, das noch nicht aktualisiert wurde. Wenn das DTB-Image Teil des Boot-Image-Formats ist, werden solche Probleme verhindert, da das Wiederherstellungs-Image autark ist, d. h., es ist nicht von einer anderen Partition abhängig.
Struktur des Boot-Images
Geräte mit Android 10 können ein DTB-Image mit der folgenden Boot-Image-Struktur enthalten.
Abschnitt „Boot-Image“ | Seitenzahl |
---|---|
Boot-Header (1 Seite) | 1 |
Kernel (l Seiten) | l = (kernel_size + page_size –
1) / page_size |
Ramdisk (m Seiten) | m = (ramdisk_size + page_size –
1) / page_size |
Bootloader der zweiten Phase (n Seiten) | n = (second_size + page_size – 1) ÷ page_size |
Wiederherstellungs-DTBO (o Seiten) | o = (recovery_dtbo_size + page_size –
1) / page_size |
DTB (p Seiten) | p = (dtb_size + page_size – 1) ÷ page_size |
DTB-Image-Pfad
Bei Geräten mit Android 10 können Sie das mkbootimg.py
-Tool und die folgenden Argumente verwenden, um den Pfad zum DTB-Image anzugeben.
Argument | Beschreibung |
---|---|
dtb |
Pfad zum DTB-Image, das in den Boot-/Wiederherstellungs-Images enthalten sein soll. |
dtb_offset |
Wenn dem Argument base hinzugefügt, gibt die physische Ladeadresse für den endgültigen Gerätebaum an. Wenn das base -Argument beispielsweise 0x10000000 und das dtb_offset -Argument 0x01000000 ist, wird dtb_addr_field im Boot-Image-Header als 0x11000000 ausgefüllt. |
Mit der Variablen „board_config“ BOARD_PREBUILT_DTBIMAGE_DIR
muss der Pfad zum DTB-Image angegeben werden. Wenn sich im Verzeichnis BOARD_PREBUILT_DTBIMAGE_DIR
mehr als eine Datei mit der Erweiterung *.dtb
befindet, werden die Dateien vom Android-Build-System zusammengeführt, um das endgültige DTB-Image zu erstellen, das beim Erstellen des Boot-Images verwendet wird.
Wenn das Argument dtb
mit dem DTB-Image aus dem von BOARD_PREBUILT_DTBIMAGE_DIR
angegebenen Verzeichnis an mkbootimg.py
übergeben werden soll, muss die Platinenkonfigurationsvariable BOARD_INCLUDE_DTB_IN_BOOTIMG
auf true
gesetzt sein. Beispiel:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
Sie können das Argument dtb_offset
der Konfigurationsvariablen BOARD_MKBOOTIMG_ARGS
für das Steuerfeld mit den anderen Offsets und der Kopfzeilenversion anhängen. Beispiel:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Bootloader-Unterstützung
Damit VTS auf Geräten mit Android 10 ausgeführt werden kann, muss der Bootloader das aktualisierte Boot-Image unterstützen und den Kernel-Befehlszeilenparameter androidboot.dtb_idx
hinzufügen, um den Index des ausgewählten Gerätebaums anzugeben. Sie können nur einen Index angeben. Beispielsweise meldet der Parameter androidboot.dtb_idx=N
„N
“ als nullbasierten Index des Gerätebaums, der vom Bootloader aus der Menge der im Boot-Image vorhandenen DTBs ausgewählt wurde.