Das DTS-Format (Device Tree Source) ist eine Textdarstellung eines Gerätebaums (Device Tree, DT). Der Gerätebaum-Compiler (Device Tree 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 dtc-format.txt und manual.txt beschrieben.
Das DTO-Format und die Regeln werden in dt-object-internal.txt beschrieben.
In diesen Dokumenten wird beschrieben, wie Sie den Haupt-Gerätebaum mithilfe von Knoten fragment@x
und der Syntax __overlay__
im Overlay-Gerätebaum aktualisieren. Beispiel:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Google empfiehlt jedoch dringend, nicht fragment@x
und die Syntax __overlay__
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 müssen Sie die Fragmente nicht nummerieren, sodass Sie Overlay-DTS einfach lesen und schreiben können. Wenn Ihr dtc
diese Kurzschreibweise nicht unterstützt, verwenden Sie dtc in AOSP.
Labels verwenden
Damit undefinierte Verweise auf Knoten, die zum Zeitpunkt der Kompilierung nicht vorhanden sind, zulässig sind, muss die Overlay-Gerätebaumdatei .dts
im Header das Tag /plugin/
enthalten. Beispiel:
/dts-v1/; /plugin/;
Von hier aus können Sie die zu überlagernden Knoten mithilfe einer Referenz ansprechen. Dabei handelt es sich um einen absoluten Knotenpfad mit einem vorangestellten Et-Zeichen (&). Beispiel: für node@0
im Haupt-Gerätebaum:
Labels im Haupt-Gerätebaum definieren: | … dann verwenden Sie 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 im Haupt-Gerätebaum vorhanden ist, wird sie nach dem Gerätebaum-Overlay ü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 Referenzziel-Property nicht im Haupt-Gerätebaum vorhanden ist, wird sie nach dem Gerätebaum-Overlay 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"; }; }; }; |