Format źródła drzewa urządzeń (DTS) to tekstowa reprezentacja drzewa urządzeń. Kompilator drzewa urządzeń (DTC) przetwarza ten format w binarne drzewo urządzeń, które jest formą oczekiwaną przez jądro Linuksa.
Korzystanie z referencji
Projekt DTC (kompilator drzewa urządzeń + łaty nakładki) opisuje format DTS w plikach dtc-format.txt i manual.txt . Format i zasady DTO są opisane w dt-object-internal.txt . Dokumenty te opisują sposób aktualizacji głównego ID przy użyciu węzła fragment@x
i składni __overlay__
w nakładkowym ID. Na przykład:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Jednak Google zdecydowanie zaleca, aby nie używać fragment@x
i składni __overlay__
, a zamiast tego używać składni referencyjnej. Na przykład:
&some_node { some_prop = "okay"; ... };
Składnia odniesienia jest kompilowana przez dtc
do tego samego obiektu, co powyższy, przy użyciu składni __overlay__
. Ta składnia nie wymusza numerowania fragmentów, umożliwiając łatwy odczyt i zapis nakładki DTS. Jeśli twój dtc
nie obsługuje tego cukru składniowego, użyj dtc w AOSP .
Korzystanie z etykiet
Aby umożliwić niezdefiniowane odniesienia do węzłów, które nie są obecne w czasie kompilacji, plik nakładki DT .dts
musi mieć w nagłówku znacznik /plugin/
. Na przykład:
/dts-v1/; /plugin/;
Stąd możesz wskazać węzły, które mają zostać nałożone, za pomocą odniesienia, czyli bezwzględnej ścieżki węzła poprzedzonej znakiem ampersand (&). Na przykład dla node@0
w głównym ID:
Zdefiniuj etykiety w głównym ID... | ... następnie skorzystaj z etykiet. |
---|---|
[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>; }; |
Nadrzędny
Jeśli właściwość celu referencyjnego istnieje w głównym ID, zostanie ona nadpisana po DTO; w przeciwnym razie jest on dołączony. Na przykład:
główne.dts | nakładka.dts | Połączony wynik |
---|---|---|
[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"; }; }; |
Dołączanie
Jeśli właściwość celu referencyjnego nie istnieje w głównym ID, jest ona dodawana po DTO. Na przykład:
główne.dts | nakładka.dts | Połączony wynik |
---|---|---|
[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"; }; }; |
Węzły podrzędne
Przykłady składni węzła podrzędnego:
główne.dts | nakładka.dts | Połączony wynik |
---|---|---|
[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"; }; }; }; |