Ein Gerätebaum ist eine Datenstruktur mit benannten Knoten und Attributen, die nicht erkennbare Hardware beschreibt. Kernel wie der in Android verwendete Linux-Kernel verwenden Gerätebäume, um eine Vielzahl von Hardwarekonfigurationen zu unterstützen, die von Android-Geräten verwendet werden. Hardwareanbieter stellen eigene Gerätebaum-Quelldateien (Device Tree Source, DTS) bereit, die mit dem Gerätebaum-Compiler in die Gerätebaum-Blob-Datei (Device Tree Blob, DTB) kompiliert werden. Diese Dateien werden dann vom Bootloader verwendet. Die DTB-Datei enthält einen binär formatierten reduzierten Gerätebaum.
Mit einem Gerätebaum-Overlay (Device Tree Overlay, DTO) kann ein zentraler Gerätebaum-Blob (Device Tree Blob, DTB) auf den Gerätebaum (Device Tree, DT) gelegt werden (ein Gerätebaum-Blob für Overlay (Device Tree Blob Overlay, DTBO)). Ein Bootloader, der DTO verwendet, kann den Gerätebaum des System-on-Chip (SoC) beibehalten und dynamisch einen gerätespezifischen Gerätebaum überlagern. Dabei werden dem Baum Knoten hinzugefügt und Eigenschaften im vorhandenen Baum geändert.
Updates in Android 9
In Android 9 darf der Bootloader die in den Gerätebaum-Overlays definierten Eigenschaften nicht ändern, bevor das vereinheitlichte Gerätebaum-Blob an den Kernel übergeben wird.
Gerätebaum laden
Das Laden eines Gerätebaums im Bootloader umfasst die Erstellung, Partitionierung und Ausführung.
Abbildung 1: Typische Implementierung zum Laden des Gerätebaums im Bootloader
So erstellen und flashen Sie den Gerätebaum-Blob:
1a. Verwenden Sie den DTC (
dtc
), um DTS (.dts
) in einen DTB (.dtb
) zu kompilieren. Der DTB ist als abgeflachter Gerätebaum formatiert. 1b. Flashen Sie die.dtb
-Datei an einen Speicherort, der für den Bootloader während der Laufzeit erreichbar ist (siehe unten).Legen Sie für die Partitionierung einen Speicherort im Flash-Speicher fest, der für den Bootloader während der Laufzeit erreichbar ist und der vertrauenswürdig ist.
.dtb
Beispieladressen:Abbildung 2: Legen Sie die .dtb-Datei in einer Boot-Partition ab, indem Sie sie an „image.gz“ anhängen und als „kernel“ an „mkbootimg“ übergeben.
Abbildung 3: Legen Sie die DTB-Datei in einer speziellen Partition ab
(z. B. einer DTB-Partition).So laden Sie den Gerätebaum-Blob und starten den Kernel:
- Laden Sie
.dtb
vom Speicherort in den Arbeitsspeicher. - Starten Sie den Kernel mit der Adresse des Arbeitsspeichers, in dem sich der geladene Gerätebaum befindet.
- Laden Sie
Und jetzt?
Auf dieser Seite wird ein typischer Bootloader-Workflow zum Laden eines Gerätebaums beschrieben und eine Liste mit gängigen Gerätebaum-Begriffen bereitgestellt. Auf anderen Seiten in diesem Abschnitt wird beschrieben, wie Sie Bootloader-Unterstützung implementieren, Ihr DTO kompilieren, überprüfen und optimieren und wie Sie mehrere Gerätebäume verwenden. Weitere Informationen zur DTO-Syntax und zur erforderlichen Formatierung von DTO- und DTBO-Partitionen sind ebenfalls verfügbar.