Das DTS-Format (Device Tree Source) ist eine Textdarstellung eines Gerätebaums. Der Device Tree Compiler (DTC) verarbeitet dieses Format in einen binären Gerätebaum, der der vom Linux-Kernel erwarteten Form entspricht.
Referenzen verwenden
Das DTC- Projekt (Device Tree Compiler + Overlay Patches) beschreibt das DTS-Format in dtc-format.txt und manual.txt . Das DTO-Format und die Regeln werden in dt-object-internal.txt beschrieben. In diesen Dokumenten wird beschrieben, wie das Haupt-DT mithilfe des Knotens fragment@x
und der Syntax __overlay__
im Overlay-DT aktualisiert wird. Zum Beispiel:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Google empfiehlt jedoch dringend, nicht fragment@x
und die Syntax __overlay__
zu verwenden und stattdessen die Referenzsyntax zu verwenden. Zum Beispiel:
&some_node { some_prop = "okay"; ... };
Die Referenzsyntax wird von dtc
mithilfe der Syntax __overlay__
in dasselbe Objekt wie oben kompiliert. Diese Syntax zwingt Sie nicht dazu, 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 .
Verwendung von Etiketten
Um undefinierte Verweise auf Knoten zu ermöglichen, die zur Kompilierungszeit nicht vorhanden sind, muss die Overlay-DT .dts
Datei im Header das Tag /plugin/
enthalten. Zum Beispiel:
/dts-v1/; /plugin/;
Von hier aus können Sie mithilfe einer Referenz, einem absoluten Knotenpfad, dem ein kaufmännisches Und-Zeichen (&) vorangestellt ist, auf die zu überlagernden Knoten abzielen. Zum Beispiel für node@0
im Haupt-DT:
Definieren Sie Beschriftungen im Haupt-DT ... | ... dann nutzen 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 im Haupt-DT nicht 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"; }; }; }; |