設備樹源 (DTS) 格式是設備樹的文字表示形式。設備樹編譯器 (DTC) 將此格式處理為二進位設備樹,這是 Linux 核心所期望的形式。
使用參考文獻
DTC (裝置樹編譯器+覆蓋補丁)專案在dtc-format.txt和manual.txt中描述了 DTS 格式。 DTO 格式和規則在dt-object-internal.txt中描述。這些文件描述如何使用節點fragment@x
和overlay DT中的語法__overlay__
來更新主DT。例如:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
但是,Google 強烈建議您不要使用fragment@x
和語法__overlay__
,而應使用引用語法。例如:
&some_node { some_prop = "okay"; ... };
dtc
使用語法__overlay__
將引用語法編譯成與上面相同的物件。此語法不會強制您對片段進行編號,使您能夠輕鬆讀取和寫入覆蓋 DTS。如果您的dtc
不支援此語法糖,請使用AOSP 中的 dtc 。
使用標籤
若要允許對編譯時不存在的節點進行未定義引用,覆寫 DT .dts
檔的標頭中必須有一個標記/plugin/
。例如:
/dts-v1/; /plugin/;
從這裡,您可以使用引用來定位要覆蓋的節點,該引用是一個以與號 (&) 為前綴的絕對節點路徑。例如,對於主設備識別碼中的node@0
:
在主設備識別碼中定義標籤... | ....然後使用標籤。 |
---|---|
[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>; }; |
壓倒一切
如果引用目標屬性存在於主DT中,則在DTO之後被覆寫;否則,將附加它。例如:
主文件 | 覆蓋.dts | 合併結果 |
---|---|---|
[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"; }; }; |
追加
如果主DT中不存在引用目標屬性,則將其附加在DTO之後。例如:
主文件 | 覆蓋.dts | 合併結果 |
---|---|---|
[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"; }; }; |
子節點
子節點語法範例:
主文件 | 覆蓋.dts | 合併結果 |
---|---|---|
[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"; }; }; }; |