Ich werde ein Linux auf meinem Entwicklungsboard starten, und ich brauche eine dts-Datei (Gerätebaumdatei), um die gesamte Hardware zu beschreiben. Aber ich weiß nur sehr wenig über die Syntax dieser Datei, die nicht ausreicht, um Linux auf der Platine richtig zu betreiben.
Was ich jetzt weiß, ist nur, wie man die Interrupt-Nummer, die Frequenz, die Adresse, die Eltern-Einheit und den kompatiblen Treiber-Typ (wie unten beschrieben) einer Einheit beschreibt:
%Vor%Andere fortgeschrittene Verwendung oder Grammatik ist mir nicht vertraut.
Sieh dir die Punkte des Boards an, die deinem Dev-Board am ähnlichsten sind. Verwenden Sie diese als Referenz und nehmen Sie Änderungen an den dts gemäß den Unterschieden zwischen der Referenzplatine und Ihrem Dev-Board vor.
Überprüfen Sie auch Folgendes:
- Device-Baum Dokumentationsprojekt bei eLinux (hat eine umfangreiche Sammlung von Links zum Lesen). < br>
- Artikelserie zu den Grundlagen des Gerätebaums.
- Walkthrough der Migration in den Gerätebaum.
Nehmen wir ein Beispiel und ich erkläre jeden von ihnen wie folgt
%Vor% Erforderliche Eigenschaften:
- kompatibel: Sollte "fsl, -auart" sein. Die unterstützten SoCs beinhalten
imx23 und imx28.
- reg: Adresse und Länge des für das Gerät eingestellten Registers
- Interrupts: Sollte die Auart Interrupt-Nummern enthalten
- dmas: DMA-Spezifizierer, bestehend aus einem Pha- dle-zu-DMA-Controller-Knoten
und AUART DMA-Kanal-ID.
- dma-names: "rx" für den RX-Kanal, "tx" für den TX-Kanal.
Hinweis: Jeder Auart Port sollte einen Alias haben, der korrekt in "Aliase" nummeriert ist
Knoten.
Für weitere Eigenschaften, gehen Sie bitte zu diesem Link, es ist sehr nützlich, Erklärung des Gerätebaums
Ich hoffe, es hilft!
Minimales reg
+ interrupt
Beispiel mit einem virtuellen QEMU-Gerät
In unserem Beispiel wird der Gerätebaum versatilepb
, den QEMU aufgrund von -M versatilepb
verwenden wird, folgender Gerätebaumknoten hinzugefügt:
Dann testen wir die folgenden DTS-Funktionen, indem wir ein Linux-Kernel-Modul verwenden, um mit dem Gerät zu interagieren:
Dies sind die Hauptkomponenten des Beispiels:
.dts
Patch auf Linux fork
reg
und interrupt
stimmen mit Zahlen überein, die in der vielseitigen QEMU-Maschine (die das SoC darstellt) fest codiert sind. compatible
stimmt mit dem platform_driver.name
im Kernel-Modul überein und informiert den Kernel, welches Modul dieses Gerät behandelt lkmc-asdf = <0x12345678>;
, die mit of_property_read_u32
gelesen wird
-dtb
-Argument -M versatilepb
Gerätebäume haben viele weitere Funktionen, die wir nicht behandelt haben, aber dieses Beispiel sollte Ihnen den Einstieg erleichtern und es Ihnen leicht machen, mit neuen Funktionen, die auftauchen, herumzuspielen.
Weitere Ressourcen:
Tags und Links linux linux-kernel device-tree