デバイスツリー ソース(DTS)形式は、デバイスツリー(DT)のテキスト表現です。デバイスツリー コンパイラ(DTC)は、この形式を処理して Linux カーネルが想定する形式のバイナリ DT に変換します。
データや資料を参照する
DTC(デバイスツリー コンパイラ + オーバーレイ パッチ)プロジェクトでは、dtc-format.txt と manual.txt で DTS 形式について説明しています。DTO の形式とルールは、dt-object-internal.txt で説明されています。これらのドキュメントでは、オーバーレイ DT のノード fragment@x
と構文 __overlay__
を使用してメイン DT を更新する方法を説明しています。次に例を示します。
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
しかしながら、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 の後にオーバーライドされます。存在しない場合、そのプロパティは 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"; }; }; }; |