Android-Implementierungen können ein DTB-Bild (Device Tree Blob) zur Verwendung durch dem Bootloader. Der Speicherort des DTB-Bilds (und die Optionen zur Angabe DTB-Bildparameter) unterscheiden sich bei den einzelnen Android-Versionen.
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 Festlegen von DTB-Bildparametern finden Sie unter Anbieter-Boot Kopfzeile.
In Android 10 können Geräte das DTB-Image die Bootpartition. Informationen zur Angabe von DTB-Bildparametern finden Sie unter Einschließlich der DTB-Bildparameter Image im Boot-Image platzieren.
In Android 9 und niedriger kann das DTB-Image ihre eigene Partition erstellen oder an den Kernel
image.gz
angehängt werden, um den Kernel zu erstellen + DTB-Image (das dann anmkbootimg
übergeben wird, umboot.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 Parameter korrektes DT-Blob, indem Sie die Struktur
dt_table_entry
untersuchen (enthältid
,rev
undcustom
), die Informationen zur Identifizierung der Hardware für den Eintrag. Weitere Informationen: DTB/DTBO Partitionen.
DTB-Image in das Boot-Image aufnehmen
Geräte mit Android 10 können das DTB-Image in
das Boot-Image. 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 Nicht-A/B-Geräten sicherer, die DTB als Teil des und nicht in einer separaten Partition, um Probleme zu vermeiden, OTAs unterbrochen. Wenn während eines OTA-Updates ein Problem auftritt, nachdem die DTB-Partition (aber bevor das vollständige Update abgeschlossen wird), versucht das Gerät, Wiederherstellungsmodus, um das OTA-Update abzuschließen; Da die DTB-Partition allerdings bereits aktualisiert wurde, könnte eine Diskrepanz mit dem Wiederherstellungsabbild (das wurde noch nicht aktualisiert). Das DTB-Image als Teil des Boot-Image-Formats verhindern Sie solche Probleme, indem Sie das Wiederherstellungsabbild selbstausreichend machen, nicht von einer anderen Partition abhängig ist).
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 | 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
Für Geräte mit Android 10 können Sie die
mkbootimg.py
-Tool und die folgenden Argumente, um den Pfad zum DTB anzugeben
Bild.
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 Last angegeben.
und die Adresse für die endgültige Gerätestruktur. Wenn beispielsweise base
Argument ist 0x10000000 und das Argument dtb_offset
ist 0x01000000 , die dtb_addr_field im Boot-Image
wird als 0x11000000 ausgefüllt. |
Die Board-Konfigurationsvariable BOARD_PREBUILT_DTBIMAGE_DIR
muss verwendet werden, um anzugeben
Pfad zum DTB-Image. Wenn mehrere Dateien mit der Endung *.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-Bild 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 ausgeführt werden kann
10, muss der Bootloader das aktualisierte Boot-Image unterstützen
Außerdem muss der Kernel-Befehlszeilenparameter androidboot.dtb_idx
hinzugefügt werden,
Index der ausgewählten Gerätestruktur (DT) Sie können nur eine Option angeben (1)
Index. Beispielsweise gibt der Parameter androidboot.dtb_idx=N
N
als
nullbasierter Index der Gerätestruktur, die vom Bootloader aus der Gruppe von
Im Boot-Image vorhandene DTBs.