Das Device Tree Source-Format (DTS) ist eine textuelle Darstellung eines Gerätebaums (Device Tree, DT). Der Gerätebaum-Compiler (DTC) verarbeitet dieses Format in einen binären Gerätebaum, der vom Linux-Kernel erwartet wird.
Verweise verwenden
Im DTC-Projekt (Device Tree Compiler + Overlay-Patches) wird das DTS-Format in den Dateien dtc-format.txt und manual.txt beschrieben.
Format und Regeln für DTOs werden in dt-object-internal.txt beschrieben.
In diesen Dokumenten wird beschrieben, wie Sie den Haupt-DT mit dem Knoten fragment@x
und der Syntax __overlay__
im Overlay-DT aktualisieren. Beispiel:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Google empfiehlt jedoch dringend, fragment@x
und die Syntax __overlay__
nicht zu verwenden, sondern stattdessen die Referenzsyntax. Beispiel:
&some_node { some_prop = "okay"; ... };
Die Referenzsyntax wird von dtc
in dasselbe Objekt wie oben mit der Syntax __overlay__
kompiliert. Bei dieser Syntax musst du die Fragmente nicht nummerieren, sodass du Overlay-DTS ganz einfach lesen und schreiben kannst. Wenn Ihre dtc
diese Syntaxkürzel nicht unterstützt, verwenden Sie den dtc in AOSP.
Labels verwenden
Damit nicht definierte Verweise auf Knoten zulässig sind, die zum Zeitpunkt der Kompilierung nicht vorhanden sind, muss die DT-.dts
-Datei des Overlays im Header das Tag /plugin/
enthalten. Beispiel:
/dts-v1/; /plugin/;
Hier können Sie die zu überlagernden Knoten mit einer Referenz ansteuern. Das ist ein absoluter Knotenpfad, der mit einem „&“ (Und-Zeichen) beginnt. Beispiel für node@0
im Haupt-Gerätebaum:
Labels im Haupt-Gerätebaum definieren | ... verwenden Sie dann die Labels. |
---|---|
[my_main_dt.dts] /dts-v1/; / { my_node: node@0 { status = "disabled"; my_child: child@0 { value = <0xffffffff>; }; }; }; |
[my_overlay_dt.dts] /dts-v1/; /plugin/; &my_node { status = "okay"; }; &my_child { value = <0x1>; }; |
Überschreiben
Wenn die Referenzzieleigenschaft in der Hauptdatentabelle vorhanden ist, wird sie nach dem DTO überschrieben. Andernfalls wird sie angehängt. Beispiel:
main.dts | overlay.dts | Zusammengeführtes Ergebnis |
---|---|---|
[my_main_dt.dts] /dts-v1/; / { compatible = "corp,foo"; my_node: node@0 { status = "disabled"; }; }; |
[my_overlay_dt.dts] /dts-v1/; /plugin/; &my_node { status = "okay"; }; |
/dts-v1/; / { compatible = "corp,foo"; ... node@0 { linux,phandle = <0x1>; phandle = <0x1>; status = "okay"; }; }; |
Anhängen
Wenn die Referenzzieleigenschaft in der Hauptdatentabelle nicht vorhanden ist, wird sie nach DTO angehängt. Beispiel:
main.dts | overlay.dts | Zusammengeführtes Ergebnis |
---|---|---|
[my_main_dt.dts] /dts-v1/; / { compatible = "corp,foo"; my_node: node@0 { status = "okay"; }; }; |
[my_overlay_dt.dts] /dts-v1/; /plugin/; &my_node { new_prop = "bar"; }; |
/dts-v1/; / { compatible = "corp,foo"; ... node@0 { linux,phandle = <0x1>; phandle = <0x1>; status = "okay"; new_prop = "bar"; }; }; |
Untergeordnete Knoten
Beispiele für die Syntax von untergeordneten Knoten:
main.dts | overlay.dts | Zusammengeführtes Ergebnis |
---|---|---|
[my_main_dt.dts] /dts-v1/; / { compatible = "corp,foo"; my_nodes: nodes { compatible = "corp,bar"; node@0 { status = "disabled"; }; }; }; |
[my_overlay_dt.dts] /dts-v1/; /plugin/; &my_nodes { new_prop1 = "abc"; node@0 { status = "okay"; new_prop2 = "xyz"; }; }; |
/dts-v1/; / { compatible = "corp,foo"; ... nodes { linux,phandle = <0x1>; phandle = <0x1>; compatible = "corp,bar"; new_prop1 = "abc"; node@0 { linux,phandle = <0x2>; phandle = <0x2>; status = "okay"; new_prop2 = "xyz"; }; }; }; |