Gerätebaum-Overlays implementieren

Zur Implementierung von Gerätebaum-Overlays (Device Tree Overlays, DTOs) gehören die Unterteilung, Erstellung, Partitionierung und Ausführung des Gerätebaums. Wenn Ihre Implementierung funktioniert, müssen Sie außerdem für Kompatibilität zwischen den beiden Gerätebäumen sorgen und eine Strategie zur Gewährleistung der Sicherheit der einzelnen Partitionen der Gerätebäume entwickeln.

Gerätebaum unterteilen

Unterteile den Gerätebaum zuerst in zwei Teile:

  • Haupt-Gerätebaum: der reine SoC-Teil und die Standardkonfigurationen, die vom SoC-Anbieter bereitgestellt werden
  • Overlay-Gerätebaum: die gerätespezifischen Konfigurationen, die vom ODM/OEM bereitgestellt werden

Danach müssen Sie für Kompatibilität zwischen beiden Gerätebäumen sorgen, damit durch die Zusammenführung der beiden Teile ein vollständiger Gerätebaum für das jeweilige Gerät entsteht. Weitere Informationen zum DTO-Format und den Regeln finden Sie unter DTO-Syntax. Informationen zur Nutzung mehrerer Gerätebäume sind unter Mehrere Gerätebäume verwenden zu finden.

Haupt- und Overlay-Gerätebaum erstellen

So wird der Haupt-Gerätebaum erstellt:

  1. Kompilieren Sie die .dts-Datei des Haupt-Gerätebaums in eine .dtb-Datei.
  2. Flashen Sie die .dtb-Datei in eine Partition, die für den Bootloader während der Laufzeit erreichbar ist (siehe [Gerätebäume partitionieren](#partition)).

So wird der Overlay-Gerätebaum erstellt:

  1. Kompilieren Sie die .dts-Datei des Overlay-Gerätebaums in eine .dtbo-Datei. Diese Datei hat zwar dasselbe Format wie die .dtb-Datei des zusammengefassten Gerätebaums, aber durch die andere Dateiendung lässt sie sich vom Haupt-Gerätebaum unterscheiden.
  2. Flashen Sie die .dtbo-Datei in eine Partition, die für den Bootloader während der Laufzeit erreichbar ist (siehe [Gerätebäume partitionieren](#partition)).

Informationen zum Kompilieren mit DTC und Überprüfen der DTO-Ergebnisse auf dem Host finden Sie unter Kompilieren und überprüfen.

Gerätebäume partitionieren

Legen Sie für .dtb und .dtbo in einem Flash-Speicher einen Speicherort fest, der für den Bootloader während der Laufzeit erreichbar ist und der vertrauenswürdig ist.

Beispiele für Speicherorte für den Haupt-Gerätebaum:

  • Teil einer Boot-Partition, die an den Kernel (image.gz) angehängt wird
  • Separate Gerätebaum-Blobs (.dtb) in einer eigenen Partition (dtb)

Beispiele für Speicherorte für den Overlay-Gerätebaum:

Abbildung 1: Legen Sie die DTBO-Datei in einer speziellen Partition ab, zum Beispiel einer DTBO-Partition.

Abbildung 2: Legen Sie die DTBO-Datei in einer ODM-Partition ab, sofern der Bootloader Daten aus dem Dateisystem einer ODM-Partition laden kann.

Hinweis: Die Größe der Partition für den Overlay-Gerätebaum hängt vom Gerät und der Anzahl der Änderungen ab, die an dem Blob des Haupt-Gerätebaums vorgenommen werden müssen. In der Regel reichen 8 MB aus und bieten genügend Spielraum für zukünftige Updates.

Für Geräte, die nahtlose A/B-Updates unterstützen, unterteilen Sie die Partitionen der Haupt- und Overlay-Gerätebäume entsprechend:

Abbildung 3: DTBO-Partition für A/B-Updates, Beispiel 1

Abbildung 4: DTBO-Partition für A/B-Updates, Beispiel 2

Im Bootloader ausführen

Gehen Sie zum Ausführen so vor:

Abbildung 5: Typische Laufzeitimplementierung des Gerätebaum-Overlays im Bootloader

  1. Laden Sie .dtb vom Speicherort in den Arbeitsspeicher.
  2. Laden Sie .dtbo vom Speicherort in den Arbeitsspeicher.
  3. Erstellen Sie für .dtb ein .dtbo-Overlay, um diese in einem Gerätebaum zusammenzuführen.
  4. Starten Sie den Kernel mit der Adresse des Arbeitsspeichers, in dem sich der zusammengeführte Gerätebaum befindet.

Für Kompatibilität sorgen

Der Haupt-Gerätebaum-Blob (vom SoC-Anbieter) wird als API-Oberfläche für DTBOs verwendet. Nachdem der Gerätebaum in einen reinen SoC- und einen gerätespezifischen Teil unterteilt wurde, müssen Sie dafür sorgen, dass diese beiden Teile auch in Zukunft in beispielsweise den folgenden Punkten kompatibel sind:

  • Gerätebaumdefinition im Haupt-Gerätebaum: zum Beispiel Knoten, Eigenschaften und Labels. Jede Änderung an der Definition des Haupt-Gerätebaums könnte auch Änderungen des Overlay-Gerätebaums zur Folge haben. Wenn Sie beispielsweise den Namen eines Knoten im Haupt-Gerätebaum korrigieren möchten, erstellen Sie ein „Alias“-Label, das dem ursprünglichen Knotennamen zugewiesen wird (um eine Änderung des Overlay-Gerätebaums zu vermeiden).
  • Speicherort des Overlay-Gerätebaums: zum Beispiel Name der Partition und Speicherformat

Sicherheitsstrategie entwickeln

Der Bootloader muss dafür sorgen, dass der Gerätebaum-Blob (Device Tree Blob, DTB) oder das Overlay des Gerätebaum-Blobs (Device Tree Blob Overlay, DTBO) sicher ist und weder verändert noch manipuliert wurde. Sie können dafür eine beliebige Sicherheitsmethode verwenden, zum Beispiel eine Boot-Image-Signatur in VBoot 1.0 oder den AVB-Hash-Footer in VBoot 2.0.

  • Wenn sich der DTB oder das DTBO in einer separaten Partition befindet, können Sie diese Partition der AVB-Vertrauenskette hinzufügen. Die Vertrauenskette beginnt am hardwaregeschützten Root of Trust und endet am Bootloader, der die Integrität und Authentizität der DTB- oder DTBO-Partition verifiziert.
  • Wenn sich der DTB oder das DTBO in einer bestehenden Partition (zum Beispiel der odm-Partition) befindet, sollte diese in der AVB-Vertrauenskette enthalten sein. Die DTBO-Partition kann denselben öffentlichen Schlüssel wie die odm-Partition verwenden.

Weitere Informationen dazu finden Sie unter Bootmodus mit Verifikation.