Format źródła drzewa urządzeń (DTS) to tekstowa reprezentacja drzewa urządzeń (DT). Kompilator drzewa urządzeń (DTC) przetwarza ten format na binarny plik przenoszenia danych, w formacie oczekiwanym przez jądro Linuksa.
Korzystaj z plików referencyjnych
DTC
Projekt (kompilator drzewa + łatki nakładek) opisuje format DTS w
dtc-format.txt
oraz
manual.txt.
Format i reguły organizacji DTO opisano w
dt-object-internal.txt.
Te dokumenty opisują, jak zaktualizować główny plik przenoszenia danych za pomocą węzła
fragment@x
i składnia __overlay__
w nakładce przenoszenia danych. Dla:
przykład:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Jednak zdecydowanie zalecamy, aby nie używać
fragment@x
i składni __overlay__
, a zamiast tego użyj
składni odwołania. Na przykład:
&some_node { some_prop = "okay"; ... };
Składnia odwołania jest skompilowana przez funkcję dtc
do tego samego obiektu co
powyżej, używając składni __overlay__
. Ta składnia nie wymusza na Tobie
ponumerować fragmenty, co ułatwia ich odczytywanie i zapisywanie. Jeśli
dtc
nie obsługuje tego cukru składniowego, użyj makra
dtc
w AOSP.
Używanie etykiet
Aby umożliwić niezdefiniowane odwołania do węzłów, których nie było w czasie kompilacji, funkcja
plik .dts
przenoszenia danych nakładki musi zawierać tag /plugin/
nagłówek. Na przykład:
/dts-v1/; /plugin/;
Tutaj możesz ustawić kierowanie na węzły, które mają być nakładane, za pomocą odwołania, czyli
bezwzględna ścieżka węzła poprzedzona znakiem &. Na przykład w przypadku funkcji
node@0
w głównym interfejsie przenoszenia danych:
Zdefiniuj etykiety w głównym pliku przenoszenia danych ... | ... a potem użyj 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 referencyjna właściwość docelowa znajduje się w głównym pliku przenoszenia danych, zostanie zastąpiona po organizacji obsługi klienta; w przeciwnym razie zostanie dołączone. Na przykład:
main.dts. | nakładek.dts | Wynik scalony |
---|---|---|
[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 referencyjnej właściwości docelowej nie ma w głównym pliku przenoszenia danych, jest ona dołączany po DTO. Na przykład:
main.dts. | nakładek.dts | Wynik scalony |
---|---|---|
[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łów podrzędnych:
main.dts. | nakładek.dts | Wynik scalony |
---|---|---|
[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"; }; }; }; |