DTB-Bilder

Android-Implementierungen können ein DTB-Image (Device Tree Blob) für den Bootloader enthalten. Der Speicherort des DTB-Images (und die Optionen zum Angeben von DTB-Image-Parametern) unterscheiden sich zwischen den Android-Releases.

  • Geräte, die unter Android 11 den Generic Kernel verwenden Image (GKI) muss den Anbieter-Boot unterstützen Partition die alle anbieterspezifischen Informationen enthält, die vom Bootpartition. Da das DTB-Image anbieterspezifische Daten enthält, der Bootpartition des Anbieters. Informationen zum Angeben von DTB-Image-Parametern finden Sie unter Vendor-Boot-Header.

  • In Android 10 können Geräte das DTB-Image die Bootpartition. Weitere Informationen zur Angabe von DTB-Bildparametern finden Sie unter Einschließlich der DTB-Bildparameter Image im Boot-Image platzieren.

  • 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 DTB-Image zu erstellen, das dann an mkbootimg übergeben wird, um boot.img zu erstellen.

DTB-Bildformat

Ab Android 10 muss das DTB-Image eine der folgenden Formate verwenden:

  • DT-Blobs, die nacheinander verkettet sind. Der Bootloader verwendet den totalsize in jedem FDT-Header, um das entsprechende Blob zu lesen und zu parsen.

  • DTB/DTBO-Partitionen Der Bootloader kann den richtigen DT-Blob effizient auswählen, indem er die dt_table_entry-Struktur (enthält die Felder id, rev und custom) untersucht, die Informationen zur Hardwareidentifikation für den Eintrag enthalten können. Weitere Informationen: DTB/DTBO Partitionen.

DTB-Image in das Boot-Image aufnehmen

Auf Geräten mit Android 10 kann das DTB-Image im Boot-Image enthalten sein. Android muss nun keine Skripts mehr unterstützen, das DTB-Image auf image.gz im Kernel und ermöglicht die Verwendung von Vendor Test Suite-Test (VTS), um DTB zu verifizieren (und zu standardisieren) Placement.

Außerdem ist es bei Geräten ohne A/B-Partition sicherer, das DTB als Teil des Wiederherstellungs-Images anstelle einer separaten Partition zu speichern, um Probleme durch unterbrochene OTAs zu vermeiden. Wenn während eines Over-the-air-Updates ein Problem auftritt, nachdem die DTB-Partition aktualisiert wurde, aber vor Abschluss des vollständigen Updates, versucht das Gerät, im Wiederherstellungsmodus zu starten, um das OTA-Update abzuschließen. Da die DTB-Partition jedoch bereits aktualisiert wurde, kann es zu einer Abweichung vom Wiederherstellungs-Image kommen, das noch nicht aktualisiert wurde. Wenn das DTB-Image Teil des Boot-Image-Formats ist, werden solche Probleme verhindert, da das Wiederherstellungs-Image autark 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 enthalten und verwenden dabei die folgende Boot-Image-Struktur.

Bereich für Boot-Image Seitenzahl
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 Stufe (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.

Argument Beschreibung
dtb Pfad zum DTB-Image, das in den Boot-/Wiederherstellungs-Images enthalten sein soll.
dtb_offset Wenn dem Argument base hinzugefügt, gibt die physische Ladeadresse für den endgültigen Gerätebaum an. Wenn das base-Argument beispielsweise 0x10000000 und das dtb_offset-Argument 0x01000000 ist, wird dtb_addr_field im Boot-Image-Header als 0x11000000 ausgefüllt.

Mit der Variablen „board_config“ BOARD_PREBUILT_DTBIMAGE_DIR muss der Pfad zum DTB-Image angegeben werden. Wenn mehrere Dateien mit der Erweiterung *.dtb im Verzeichnis BOARD_PREBUILT_DTBIMAGE_DIR, dem Android-Build-System verkettet die Dateien, um das endgültige DTB-Image zu erstellen, das im Boot-Image verwendet wird. Erstellung.

Um das Argument dtb an mkbootimg.py mit dem DTB-Image aus dem Verzeichnis durch BOARD_PREBUILT_DTBIMAGE_DIR, die Board-Konfigurationsvariable BOARD_INCLUDE_DTB_IN_BOOTIMG muss auf true festgelegt sein. Beispiel:

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

Sie können das Argument dtb_offset an das Board BOARD_MKBOOTIMG_ARGS anhängen. Konfigurationsvariable mit den anderen Offsets und der Kopfzeilenversion. 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 (DT) anzugeben. Sie können nur eine Option angeben (1) Index. Der Parameter androidboot.dtb_idx=N meldet beispielsweise N als nullbasierten Index des Gerätebaums, der vom Bootloader aus den im Boot-Image vorhandenen DTBs ausgewählt wurde.