Format źródła drzewa urządzeń (DTS) to tekstowa reprezentacja drzewa urządzeń (DT). Kompilator drzewa urządzenia (DTC) przetwarza ten format w binarny DT, który jest formatem oczekiwanym przez jądro Linuxa.
Używanie odwołań
Projekt DTC (kompilator drzewa urządzenia + poprawki nakładki) opisuje format DTS w plikach dtc-format.txt i manual.txt.
Format i reguły dotyczące DTO zostały opisane w pliku dt-object-internal.txt.
Te dokumenty opisują, jak zaktualizować główny DT za pomocą węzła fragment@x
i składni __overlay__
w DT nakładki. Przykład:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Zdecydowanie zalecamy jednak, aby nie używać fragment@x
ani składni __overlay__
, a zamiast tego używać składni referencyjnej. Przykład:
&some_node { some_prop = "okay"; ... };
Składnia referencyjna jest kompilowana przez dtc
do tego samego obiektu co powyżej za pomocą składni __overlay__
. Ten składnia nie wymaga numerowania fragmentów, co umożliwia łatwe odczytywanie i zapisywanie DTS nakładki. Jeśli dtc
nie obsługuje tego skrótu składniowego, użyj dtc w AOSP.
Używanie etykiet
Aby umożliwić zdefiniowanie odwołań do węzłów, które nie są obecne w momencie kompilacji, plik DT .dts
zasłony musi zawierać w nagłówku tag /plugin/
. Przykład:
/dts-v1/; /plugin/;
Tutaj możesz kierować na węzły, które mają być nałożone, za pomocą odwołania, czyli bezwzględnej ścieżki węzła z preiksem ampersand (&). Na przykład w przypadku węzła node@0
w głównym DT:
Definiowanie etykiet w głównym pliku DT ... | ... a potem używać 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>; }; |
Zastąp
Jeśli właściwość docelowa odniesienia istnieje w głównym DT, jest ona zastępowana po DTO; w przeciwnym razie jest dodawana. Przykład:
main.dts | overlay.dts | Wynik po scaleniu |
---|---|---|
[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łącz
Jeśli w głównym pliku DT nie ma docelowej usługi docelowej, jest ona dodawana po pliku DTO. Przykład:
main.dts | overlay.dts | Wynik po scaleniu |
---|---|---|
[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:
main.dts | overlay.dts | Wynik po scaleniu |
---|---|---|
[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"; }; }; }; |