Gerätebaum-Overlays

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

  1. 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).

  2. 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).

  3. 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.

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.