Device Tree erstellen

Ursprünglich beinhaltete das Kernelimage auch die Beschreibung der vorhandenen Hardware. Das ist unflexibel und deshalb wurde diese Beschreibung in eine externe Datei gepackt. Das hat zudem den grossen Vorteil, dass auch U-Boot die gleiche Information über die Hardware nutzen kann. Das Vorgehen ist wie folgt:

  1. Die Hardware wird in Device Tree Source Dateien beschrieben (dts-Files).
  2. Diese Source-Files können weitere Source-Files includieren (dtsi-Files). Solche Dateien beschreiben z.B. Eigenschaften, die für mehrere Boards gültig sind.
  3. Der Device Tree Compiler (dtc) übersetzt die Source-Files in den Device Tree Blob (dtb-File).
  4. Beim Aufstarten erhält der Kernel eine Referenz auf diesen Blob und parst ihn. Einzelne Kernel Treiber holen sich so ihre Konfiguration, z.B. Adressbereiche oder Interrupteinstellungen.

Die Terminologie ist etwas verwirrend. Man spricht vom Device Tree. Der Device Tree Blob heisst auch Flat Device Tree. Das Ganze kommt aus der IBM Open Firmware Spezifikation, und deshalb spricht man oft auch vom OF-Tree.

Installation

Installieren mit:

# apt-get install device-tree-compiler

Übersetzung

Quellenfile übersetzen, wobei das Quellen- und das Zielformat angegeben wird:

# dtc -I dts -O dtb -S 0x10000 -o myDest.dtb mySource.dts

Die Option -S erweitert den Blob mit Padding auf die angegebene Grösse.

Testen

Wenn der Kernel nach dem Booten den Device Tree erfolgreich geparst hat, ist der Inhalt unter /proc/device-tree vollständig abrufbar. Achtung: Zahlen sind binär abgelegt.