Android-Implementierungen können ein DTB-Image (Gerätebaum-BLOB) enthalten, das vom Bootloader verwendet wird. Der Speicherort des DTB-Images und die Optionen zum Angeben von DTB-Image-Parametern unterscheiden sich je nach Android-Version.
In Android 11 müssen Geräte, die das generische Kernel Image (Generic Kernel Image, GKI) verwenden, die Vendor-Boot Partition unterstützen. Diese enthält alle anbieterspezifischen Informationen, die von der Boot-Partition verschoben wurden. Da das DTB-Image anbieterspezifische Daten enthält, ist es jetzt Teil der Vendor-Boot-Partition. Informationen zum Angeben von DTB-Image-Parametern finden Sie unter Vendor-Boot -Header.
In Android 10 können Geräte das DTB-Image in die Boot-Partition einbeziehen. Informationen zum Angeben von DTB-Image-Parametern finden Sie unter DTB -Image in das Boot-Image einbeziehen.
In Android 9 und niedriger kann das DTB-Image in einer eigenen Partition vorhanden sein oder an den Kernel
image.gzangehängt werden, um das Kernel + DTB-Image zu erstellen. Dieses wird dann anmkbootimgübergeben, umboot.imgzu erstellen.
DTB-Image-Format
In 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
totalsizeim jeweiligen FDT‑Header, um das entsprechende Blob zu lesen und zu parsen.DTB/DTBO-Partitionen. Der Bootloader kann das richtige DTB-Blob effizient auswählen, indem er die Struktur
dt_table_entryuntersucht. Diese enthält die Felderid,revundcustom, die Hardware-Identifikationsinformationen für den Eintrag enthalten können. Weitere Informationen finden Sie unter DTB/DTBO Partitionen.
DTB-Image in das Boot-Image einbeziehen
Geräte mit Android 10 können das DTB-Image in das Boot-Image einbeziehen. Dadurch ist es nicht mehr erforderlich, dass Android Skripts unterstützt, die
das DTB-Image an image.gz im Kernel anhängen. Außerdem können Sie mit dem Vendor Test
Suite (VTS) testen, ob das DTB
Image richtig platziert ist.
Bei Geräten, die keine A/B‑Geräte sind, ist es außerdem sicherer, das DTB-Image in das Wiederherstellungsimage einzubeziehen, anstatt es in einer separaten Partition zu speichern. So lassen sich Probleme vermeiden, die durch unterbrochene OTAs verursacht werden. Wenn bei einer OTA ein Problem auftritt, nachdem die DTB-Partition aktualisiert wurde, aber bevor das vollständige Update abgeschlossen ist, versucht das Gerät, im Wiederherstellungsmodus zu starten, um die OTA abzuschließen. Da die DTB-Partition jedoch bereits aktualisiert wurde, kann es zu einer Abweichung vom Wiederherstellungsimage kommen, das noch nicht aktualisiert wurde. Wenn das DTB-Image Teil des Boot-Image-Formats ist, werden solche Probleme vermieden, da das Wiederherstellungsimage unabhängig ist (d. h., es ist nicht von einer anderen Partition abhängig).
Boot-Image-Struktur
Geräte mit Android 10 können ein DTB-Image mit der folgenden Boot-Image-Struktur einbeziehen.
| Boot-Image-Abschnitt | Anzahl der Seiten |
|---|---|
| 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 mit dem Tool mkbootimg.py und den folgenden Argumenten den Pfad zum DTB-Image angeben.
| Argument | Beschreibung |
|---|---|
dtb |
Pfad zum DTB-Image, das in die Boot-/Wiederherstellungsimages aufgenommen werden soll. |
dtb_offset |
Wenn dieses Argument zum Argument base hinzugefügt wird, wird die physische Lade
adresse für den endgültigen Gerätebaum angegeben. Wenn das base
Argument 0x10000000 und das dtb_offset Argument
0x01000000 ist, wird das dtb_addr_field im Boot-Image
Header mit 0x11000000 gefüllt. |
Die Board-Konfigurationsvariable BOARD_PREBUILT_DTBIMAGE_DIR muss verwendet werden, um den Pfad zum DTB-Image anzugeben. Wenn im Verzeichnis BOARD_PREBUILT_DTBIMAGE_DIR mehrere Dateien mit der Erweiterung *.dtb vorhanden sind, verkettet das Android-Build-System die Dateien, um das endgültige DTB-Image zu erstellen, das bei der Erstellung des Boot-Images verwendet wird.
Wenn Sie das Argument dtb mit dem DTB-Image aus dem Verzeichnis, das durch BOARD_PREBUILT_DTBIMAGE_DIR angegeben wird, an mkbootimg.py übergeben möchten, muss die Board-Konfigurationsvariable BOARD_INCLUDE_DTB_IN_BOOTIMG auf true gesetzt sein. Beispiel:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
Sie können das Argument dtb_offset mit den anderen Offsets und der Header-Version an die Board-Konfigurationsvariable BOARD_MKBOOTIMG_ARGS 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 (Device Tree, DT) anzugeben. Sie können nur einen Index angeben. Beispielsweise meldet der Parameter androidboot.dtb_idx=N den Wert N als den
nullbasierten Index des Gerätebaums, der vom Bootloader aus der Menge der
im Boot-Image vorhandenen Gerätebäume ausgewählt wurde.