裝置樹狀架構來源 (DTS) 格式是裝置樹狀架構 (DT) 的文字表示法。裝置樹狀結構編譯器 (DTC) 會將這個格式轉換為二進位 DT,這是 Linux 核心預期的格式。
使用參照
DTC (裝置樹狀結構編譯器 + 重疊修補程式) 專案會在 dtc-format.txt 和 manual.txt 中說明 DTS 格式。如需瞭解 DTO 格式和規則,請參閱 dt-object-internal.txt。這些文件說明如何在疊加式資料表中,使用節點 fragment@x
和語法 __overlay__
更新主資料表。例如:
/ { 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/;
從這裡,您可以使用參照指定要重疊的節點,參照是前面帶有 & 符號的絕對節點路徑。舉例來說,針對主 DT 中的 node@0
:
在主要 DT 中定義標籤 ... | ... 然後使用標籤。 |
---|---|
[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 之後覆寫;否則會附加。例如:
main.dts | overlay.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 後方。例如:
main.dts | overlay.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"; }; }; |
子節點
子節點語法的範例:
main.dts | overlay.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"; }; }; }; |