Das Device Tree Source (DTS)-Format ist eine Textdarstellung eines Gerätebaums. Der Device Tree Compiler (DTC) verarbeitet dieses Format zu einem binären Gerätebaum, der vom Linux-Kernel erwartet wird.
Referenzen verwenden
Das Projekt DTC (Device Tree Compiler + Overlay Patches) beschreibt das DTS-Format in dtc-format.txt und manual.txt . DTO-Format und -Regeln werden in dt-object-internal.txt beschrieben. Diese Dokumente beschreiben, wie das Haupt-DT mithilfe von Knotenfragment fragment@x
und der Syntax __overlay__
in Overlay-DT aktualisiert wird. Zum Beispiel:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Google empfiehlt jedoch dringend, fragment@x
und die Syntax __overlay__
nicht zu verwenden und stattdessen die Referenzsyntax zu verwenden. Zum Beispiel:
&some_node { some_prop = "okay"; ... };
Die Referenzsyntax wird von dtc mithilfe der Syntax dtc
in dasselbe Objekt wie oben __overlay__
. Diese Syntax zwingt Sie nicht, die Fragmente zu nummerieren, sodass Sie Overlay-DTS problemlos lesen und schreiben können. Wenn Ihr dtc
diesen syntaktischen Zucker nicht unterstützt, verwenden Sie den dtc in AOSP .
Etiketten verwenden
Um undefinierte Verweise auf Knoten zuzulassen, die zum Zeitpunkt der Kompilierung nicht vorhanden sind, muss die Überlagerungs-DT .dts
-Datei ein Tag /plugin/
in ihrem Header haben. Zum Beispiel:
/dts-v1/; /plugin/;
Von hier aus können Sie die zu überlagernden Knoten mithilfe einer Referenz ansteuern, bei der es sich um einen absoluten Knotenpfad mit vorangestelltem kaufmännischem Und (&) handelt. Zum Beispiel für node@0
im Haupt-BMK:
Labels im Haupt-BMK definieren ... | ... dann verwenden Sie die Etiketten. |
---|---|
[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-DT vorhanden ist, wird sie nach DTO überschrieben; andernfalls wird es angehängt. Zum 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 nicht im Haupt-DT vorhanden ist, wird sie nach DTO angehängt. Zum 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 untergeordneter 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"; }; }; }; |