6. デバイスツリーソース (DTS) フォーマット (バージョン 1)¶
デバイスツリーソース(DTS)形式は、カーネルが期待する形式のバイナリデバイスツリーにdtcで処理できる形式のデバイスツリーのテキスト表現です。 次の説明は、DTSの正式な構文定義ではありませんが、デバイスツリーを表すために使用される基本的な構成について説明しています。
DTSファイルの名前は「.dts」で終わる必要があります。
6.1. コンパイラ指令¶
他のソースファイルは、DTSファイルから含めることができます。 インクルードファイルの名前は「.dtsi」で終わる必要があります。 含まれるファイルには、追加のファイルを含めることができます。
/include/ "FILE"
6.2. ラベル¶
ソース形式を使用すると、デバイスツリー内の任意のノードまたはプロパティ値にラベルを付けることができます。 phandle値またはノードへのフルパスを明示的に指定する代わりに、ラベルを参照することにより、phandleおよびpath参照を自動的に生成できます。 ラベルはデバイスツリーソース形式でのみ使用され、DTBバイナリにエンコードされません。
ラベルの長さは1〜31文字で、セット 表 6.1 の文字のみで構成され、数字で始めることはできません。
ラベルは、ラベル名にコロン(':')を追加することによって作成されます。 参照は、ラベル名の前にアンパサンド('&')を付けることによって作成されます。
文字 |
説明 |
---|---|
|
数字 |
|
小文字 |
|
大文字 |
|
アンダースコア |
6.3. ノードとプロパティの定義¶
デバイスツリーノードは、ノード名とユニットアドレスで定義され、中括弧はノード定義の開始と終了を示します。 それらの前にラベルを付けることができます。
[label:] node-name[@unit-address] {
[properties definitions]
[child nodes]
};
ノードには、プロパティ定義や子ノード定義が含まれる場合があります。 両方が存在する場合、プロパティは子ノードの前に来る必要があります。
以前に定義されたノードは削除される可能性があります。
/delete-node/ node-name;
/delete-node/ &label;
プロパティ定義は、次の形式の名前と値のペアです。
[label:] property-name = value;
次の形式の空(長さがゼロ)の値を持つプロパティを除きます。
[label:] property-name;
以前に定義されたプロパティは削除される場合があります。
/delete-property/ property-name;
プロパティ値は、32ビット整数セルの配列、null終端文字列、バイト文字列、またはこれらの組み合わせとして定義できます。
セルの配列は、スペースで区切られたCスタイルの整数のリストを囲む山かっこで表されます。 例:
interrupts = <17 0xc>;
値は、括弧内に算術式、ビット式、または論理式として表すことができます。
算術演算子
+ 加算
- 減算
* 乗算
/ 除算
% 剰余演算
ビット演算子
& and
| or
^ exclusive or
~ not
<< 左シフト
>> 右シフト
論理演算子
&& 論理積
|| 論理和
! 否定
関係演算子
< less than
> greater than
<= less than or equal
>= greater than or equal
== equal
!= not equal
三項演算子
?: (条件 ? value_if_true : value_if_false)
64ビット値は、2つの32ビットセルで表されます。例:
clock-frequency = <0x00000001 0x00000000>;
null終端文字列値は、二重引用符を使用して表されます(プロパティ値には、NULL終端文字が含まれていると見做されます)。例:
compatible = "simple-bus";
バイト文字列は角かっこ [ ] で囲まれ、各バイトは2桁の16進数で表されます。 各バイト間のスペースはオプションです。例:
local-mac-address = [00 00 12 34 56 78];
または次も同等:
local-mac-address = [000012345678];
値には、連結された複数のコンマ区切りのコンポーネントが含まれる場合があります。例:
compatible = "ns16550", "ns8250";
example = <0xf00f0000 19>, "a strange property format";
セル配列では、別のノードへの参照がそのノードのハンドルに展開されます。 参照は & 後にはノードのラベルが続く場合があります。 例:
interrupt-parent = < &mpic >;
または、中かっこで囲まれたノードのフルパスが & の後に続く場合があります。例:
interrupt-parent = < &{/soc/interrupt-controller@40000} >;
セル配列の外側では、別のノードへの参照がそのノードのフルパスに展開されます。例:
ethernet0 = &EMAC0;
ラベルは、プロパティ値のコンポーネントの前後、セル配列のセル間、またはバイト文字列のバイト間に表示される場合もあります。例:
reg = reglabel: <0 sizelabel: 0x1000000>;
prop = [ab cd ef byte4: 00 ff fe];
str = start: "string value" end: ;
6.4. ファイルレイアウト¶
バージョン1のDTSファイルの全体的なレイアウトは次のとおりです。
/dts-v1/;
[memory reservations]
/ {
[property definitions]
[child nodes]
};
/dts-v1/;
はファイルをバージョン1 DTSとして識別するために存在する必要があります
(このタグのないdtsファイルは、dtcによって、他の小さいが互換性のない変更に加えて、
整数に異なる形式を使用する廃止されたバージョン0にあるものとして扱われます)。
メモリ予約(5.3 章 を参照)は、次の形式の行で表されます。
/memreserve/ <address> <length>;
ここで、 <address>
と <length>
は64ビットのCスタイルの整数です。例:
/* Reserve memory region 0x10000000..0x10003fff */
/memreserve/ 0x10000000 0x4000;
/ { ... };
セクションはデバイスツリーのルートノードを定義し、すべてのデバイスツリーデータがその中に含まれます。
Cスタイル (/* ... \*/
) およびC++スタイル (//
) のコメントがサポートされています。