DTB-Bilder

Android-Implementierungen können ein DTB-Image (Device Tree Blob) zur Verwendung durch den Bootloader enthalten. Der Speicherort des DTB-Bildes (und die Optionen zum Festlegen von DTB-Bildparametern) unterscheiden sich zwischen den Android-Versionen.

  • In Android 11 müssen Geräte, die das Generic Kernel Image (GKI) verwenden, die Boot-Partition des Herstellers unterstützen, die alle herstellerspezifischen Informationen enthält, die von der Boot-Partition verlagert wurden. Da das DTB-Image herstellerspezifische Daten enthält, ist es jetzt Teil der Bootpartition des Herstellers. Informationen zum Festlegen der DTB-Image-Parameter finden Sie unter Boot-Header des Anbieters .

  • In Android 10 können Geräte das DTB-Image in die Boot-Partition einbinden. Informationen zum Festlegen der DTB-Image-Parameter finden Sie unter Einbinden des DTB-Images in das Boot-Image .

  • In Android 9 und niedriger kann das DTB-Image in einer eigenen Partition vorhanden sein oder an das Kernel- image.gz angehängt werden, um das Kernel- und DTB-Image zu erstellen (das dann an mkbootimg übergeben wird, um boot.img zu erstellen).

DTB-Bildformat

In Android 10 und höher muss das DTB-Bild eines der folgenden Formate verwenden:

  • Nacheinander verkettete DT-Blobs. Der Bootloader verwendet das Feld totalsize in jedem FDT-Header, um den entsprechenden Blob zu lesen und zu analysieren.

  • DTB/DTBO-Partitionen. Der Bootloader verfügt über eine effiziente Möglichkeit, den richtigen DT-Blob auszuwählen, indem er die dt_table_entry Struktur (enthält id , rev und custom Felder) untersucht, die Hardware-Identifikationsinformationen für den Eintrag enthalten kann. Einzelheiten finden Sie unter DTB/DTBO-Partitionen .

Einbinden des DTB-Images in das Boot-Image

Geräte mit Android 10 können das DTB-Image in das Boot-Image einbinden. Dadurch entfällt die Notwendigkeit, dass Android Skripte unterstützt, die das DTB-Image an image.gz im Kernel anhängen, und ermöglicht die Verwendung des Vendor Test Suite (VTS) -Tests zur Überprüfung (und Standardisierung) der DTB-Platzierung.

Darüber hinaus ist es bei Nicht-A/B-Geräten sicherer, das DTB als Teil des Wiederherstellungsimages zu haben und nicht in einer separaten Partition, um Probleme durch unterbrochene OTAs zu vermeiden. Wenn während eines OTA ein Problem auftritt, nachdem die DTB-Partition aktualisiert wurde (jedoch vor Abschluss der vollständigen Aktualisierung), versucht das Gerät, im Wiederherstellungsmodus zu starten, um den OTA abzuschließen. Da die DTB-Partition jedoch bereits aktualisiert wurde, könnte es zu einer Nichtübereinstimmung mit dem Wiederherstellungsimage (das noch nicht aktualisiert wurde) kommen. Das DTB-Image als Teil des Boot-Image-Formats verhindert solche Probleme, indem es das Wiederherstellungs-Image autark macht (d. h. es ist nicht von einer anderen Partition abhängig).

Boot-Image-Struktur

Geräte mit Android 10 können mithilfe der folgenden Boot-Image-Struktur ein DTB-Image einschließen.

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 Stufe (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-Bildpfad

Für Geräte mit Android 10 können Sie das Tool mkbootimg.py und die folgenden Argumente verwenden, um den Pfad zum DTB-Image anzugeben.

Streit Beschreibung
dtb Pfad zum DTB-Image, das in die Boot-/Wiederherstellungsimages einbezogen werden soll.
dtb_offset Stellt beim Hinzufügen zum base die physische Ladeadresse für den endgültigen Gerätebaum bereit. Wenn das base beispielsweise 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 mehr als eine Datei mit der Erweiterung *.dtb im Verzeichnis BOARD_PREBUILT_DTBIMAGE_DIR vorhanden ist, verkettet das Android-Build-System die Dateien, um das endgültige DTB-Image zu erstellen, das bei der Boot-Image-Erstellung verwendet wird.

Um das Argument dtb mit dem DTB-Image aus dem durch BOARD_PREBUILT_DTBIMAGE_DIR angegebenen Verzeichnis an mkbootimg.py zu übergeben, muss die Board-Konfigurationsvariable BOARD_INCLUDE_DTB_IN_BOOTIMG auf true gesetzt werden. Zum 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. Zum 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 erfolgreich 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 (DT) anzugeben. Sie können nur einen (1) Index angeben. Beispielsweise gibt der Parameter androidboot.dtb_idx=N N als nullbasierten Index des Gerätebaums an, der vom Bootloader aus dem Satz der im Boot-Image vorhandenen DTBs ausgewählt wurde.