DTB-Images

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.gz angehängt werden, um das Kernel + DTB-Image zu erstellen. Dieses wird dann an mkbootimg übergeben, um boot.img zu 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 totalsize im 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_entry untersucht. Diese enthält die Felder id, rev und custom, 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.