Das DTS-Format (Device Tree Source) ist eine Textdarstellung einer Gerätestruktur. Der Device Tree Compiler (DTC) verarbeitet dieses Format in einen binären DT, Dies ist die vom Linux-Kernel erwartete Form.
Verweise verwenden
DTC
(device Tree Compiler + Overlay-Patches) beschreibt das DTS-Format in
dtc-format.txt
und
manual.txt festlegen.
Das Format und die Regeln für DTOs werden unter
dt-object-internal.txt.
In diesen Dokumenten wird beschrieben, wie der Haupt-DT mithilfe des Knotens aktualisiert wird.
fragment@x
und Syntax __overlay__
in Overlay-DT. Für
Beispiel:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Google empfiehlt jedoch dringend, die Verwendung nicht
fragment@x
und der Syntax __overlay__
. Verwenden Sie stattdessen die Methode
Referenzsyntax. Beispiel:
&some_node { some_prop = "okay"; ... };
Die Referenzsyntax wird von dtc
in dasselbe Objekt kompiliert wie die
und verwenden Sie dabei die Syntax __overlay__
. Diese Syntax zwingt Sie nicht dazu,
nummerieren, sodass Sie Overlay-DTS einfach lesen und schreiben können. Wenn Ihr
dtc
unterstützt diesen syntaktischen Zucker nicht. Verwende den
DTC
in AOSP.
Labels verwenden
Um undefinierte Verweise auf Knoten zuzulassen, die zum Zeitpunkt der Kompilierung nicht vorhanden sind,
Die Overlay-DT-Datei .dts
muss das Tag /plugin/
in ihrer
Header. Beispiel:
/dts-v1/; /plugin/;
Von hier aus können Sie die zu überlagernden Knoten mithilfe einer Referenz ausrichten,
Ein absoluter Knotenpfad mit dem Präfix eines kaufmännischen Und (&). Beispiel:
node@0
im Haupt-DT:
Labels in Haupt-DT definieren ... | ... und 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 im Haupt-DT vorhanden ist, wird sie überschrieben. nach DTO; andernfalls wird er 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 im Haupt-DT nicht vorhanden ist, angehängt wird. 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"; }; }; }; |