Android-Implementierungen können ein DTB-Image (Device Tree Blob) zur Verwendung durch den Bootloader enthalten. Der Speicherort des DTB-Images und die Optionen zum Angeben der DTB-Bildparameter unterscheiden sich bei den Android-Releases.
In Android 11 müssen Geräte, die das Generic Kernel Image (GKI) verwenden, die Anbieter-Bootpartition unterstützen, die alle anbieterspezifischen Informationen enthält, die aus der Bootpartition 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 Anbieter-Boot-Header.
In Android 10 können Geräte das DTB-Image in die Bootpartition aufnehmen. Informationen zum Festlegen 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 das DTB-Image zu erstellen. Dieses wird dann anmkbootimg
übergeben, umboot.img
zu erstellen.
DTB-Bildformat
Ab Android 10 muss das DTB-Image eines der folgenden Formate haben:
DT-Blobs, die nacheinander 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 bietet eine effiziente Möglichkeit, das richtige DT-Blob auszuwählen. Dazu wird die Struktur
dt_table_entry
(enthält die Felderid
,rev
undcustom
) untersucht, die Informationen zur Identifizierung der Hardware 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 entfällt die Notwendigkeit, dass Android Skripts unterstützt, die das DTB-Image im Kernel an image.gz
anhängen, und die Verwendung von Tests der Vendor Test Suite (VTS) ermöglicht, um die DTB-Platzierung zu verifizieren (und zu standardisieren).
Außerdem ist es bei Nicht-A/B-Geräten sicherer, die DTB als Teil des Wiederherstellungs-Images statt in einer separaten Partition zu platzieren, um Probleme zu vermeiden, die durch unterbrochene OTAs verursacht werden. Wenn während eines OTA-Updates nach der Aktualisierung der DTB-Partition (aber vor dem Abschluss des vollständigen Updates) ein Problem auftritt, versucht das Gerät, in den Wiederherstellungsmodus zu starten, um das OTA-Update abzuschließen. Da die DTB-Partition jedoch bereits aktualisiert wurde, könnte eine Diskrepanz mit dem Wiederherstellungsimage auftreten, das noch nicht aktualisiert wurde. Da das DTB-Image Teil des Boot-Image-Formats ist, können solche Probleme vermieden werden, da das Wiederherstellungs-Image selbstausreichend 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.
Bereich für Boot-Image | Anzahl der Seiten |
---|---|
Bootheader (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 |
Wiederherstellung DTBO (o Seiten) | o = (recovery_dtbo_size + page_size - 1) ÷ page_size |
DTB (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.
Argumentation | Beschreibung |
---|---|
dtb |
Pfad zum DTB-Image, das in die Boot-/Wiederherstellungs-Images enthalten sein soll. |
dtb_offset |
Wenn es dem Argument base hinzugefügt wird, wird die physische Ladeadresse für die endgültige Gerätestruktur angegeben. Wenn das Argument base beispielsweise 0x10000000 und das Argument dtb_offset 0x01000000 ist, wird dtb_addr_field im Boot-Image-Header mit 0x11000000 ausgefü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 beim Erstellen des Boot-Images 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
festgelegt werden. Beispiel:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
Sie können das Argument dtb_offset
mit den anderen Offsets und der Headerversion 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 erfolgreich 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 der ausgewählten Gerätestruktur (DT) anzugeben. Sie können nur einen (1) Index angeben. Der Parameter androidboot.dtb_idx=N
meldet beispielsweise N
als nullbasierten Index der Gerätestruktur, die vom Bootloader aus dem Satz von DTBs im Boot-Image ausgewählt wurde.