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.txtbeschrieben.
Das DTO-Format und die Regeln werden in
dt-object-internal.txt beschrieben.
In diesen Dokumenten wird beschrieben, wie Sie den Haupt-Gerätebaum mit dem 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, 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 müssen Sie die Fragmente nicht nummerieren, sodass Sie Overlay-DTS einfach lesen und schreiben können. Wenn Ihr
dtc diese syntaktische Vereinfachung nicht unterstützt, verwenden Sie den
DTC
in AOSP.
Labels verwenden
Damit undefinierte Verweise auf Knoten möglich sind, die zur Kompilierungszeit nicht vorhanden sind, muss die Overlay-DT-Datei .dts im Header ein Tag /plugin/ haben. Beispiel:
/dts-v1/; /plugin/;
Hier können Sie die Knoten, die überlagert werden sollen, mit einem Verweis ansprechen. Ein Verweis ist ein absoluter Knotenpfad mit einem kaufmännischen Und (&) als Präfix. Beispiel für node@0 im Haupt-Gerätebaum:
| Labels im Haupt-Gerätebaum definieren… | … und dann die Labels verwenden. |
|---|---|
[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 Referenzziel-Property im Haupt-Gerätebaum 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 Referenzziel-Property im Haupt-DT nicht vorhanden ist, wird sie nach dem 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 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"; }; }; }; |