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 anmkbootimg
übergeben wird, umboot.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ältid
,rev
undcustom
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.