デバイスツリーリファレンス
内容
1 はじめに
2 デバイスツリーの使い方
3 デバイスツリーとは
4 ドキュメント提案の要請
5 歴史
6 未来
7 デバイスツリー関連の通信 7.1 デバイスツリーのIRC
7.2 デバイスツリーメーリングリスト
7.3 コアデバイスバインディング/デバイスツリー仕様メーリングリスト
7.4 デバイスツリーコンパイラとツールメーリングリスト
8 プレゼンテーション、論文、および記事
9 デバイスツリーの謎
10 Linux特有のもの
11 規格
12 デバイスツリーのソース形式
13 バインディング
Linuxカーネルソースツリーの 14 バインディングドキュメント
15 Linuxカーネルソースツリーの他のドキュメント
16 サブシステム固有
17 オーバーレイ 17.1 メインラインのLinuxサポート
17.2 ブートローダのサポート
17.3 オーバーレイソースフォーマット
18 デバイスツリーソースの検証
19 ソースを.dtbにコンパイルする(FDTバイナリBLOB) 19.1 Linuxカーネルメークシステム経由 19.1.1 すべての設定済み.dtb
19.1.2 特定の.dtb
19.2 ビルドディレクトリに生成されたスクリプトを介して
20 FDTフォーマット
21 インストール
22 ブートローダ
23 起動中
24 デバッグ
25 デバッグ - ランダムなヒント
26 Linuxカーネルソースツリーのツール 26.1 dtc(カーネル内)
26.2 dtx_diff
26.3 dt_to_config
27 Linuxカーネルソースツリー外部のツール 27.1 dtc(上流プロジェクト)
27.2 dtsモード
27.3 EDK
27.4 fdtdump
28 テスト 28.1 Linuxカーネルフレームワーク
28.2 dtc
29 デバイスツリーを使用したその他のプロジェクト 29.1 BSD
29.2 Uブート
29.3 ゼファー
30 用語集 30.1 定義
前書き
デバイスツリーの使用法
デバイスツリーが初めての場合は、[ デバイスツリーの使用方法]ページから始めます 。 そのページは、デバイスツリーのソースがどのように見えるかを説明しています。 それは新しいマシンのためのソースを構築することを通して歩きます。 基本的な概念を説明し、具体的な例を示し、そしていくつかの高度な機能について説明します。
デバイスツリーの使用状況ページは、以前devicetree.orgにありました。
デバイスツリーとは
Linuxにおけるデバイスツリーの主な目的は、発見不可能なハードウェアを記述する方法を提供することです。 この情報は、以前はソースコードでハードコードされていました。
デバイスツリーとは何か、その利点、そして競合するソリューションについてのもう少しの背景は、 このページを見てください。 このページのコンテンツの大部分は、以前はDevice_Treeにありましたが、現在はDevice_Tree_Referenceにリダイレクトされています。
ドキュメントの提案を求める
elinux.orgのデバイスツリーに関するドキュメントについてのコメントや提案がある場合は、frowand(dot)list(at)に送信してください。gmail(dot)com
私は現在、情報をより体系的に、より包括的に、そしてより完全な情報の索引を他の場所で利用できるようにしようとしています。 不正確、不完全、または欠落しているものについてのコメントを探しています。 私がリンクすることができるよいドキュメンテーション、チュートリアルなどへのポインターに感謝します。
歴史
デバイスツリーがどのようにLinuxに組み込まれ、どのように進化したか
未来
デバイスツリーの変化とその方向 Linux配管工会議、カーネルサミットなど
基本的なオーバーレイサポートを完成するために何が必要かについてのFrankの考え
デバイスツリー関連の通信
デバイスツリーIRC
デバイスツリーのircチャンネルはfreenode.netの#devicetreeです。
あなたはチャネルに接続している多くの人々を見つける可能性がありますが、彼らの多くは積極的にトラフィックを監視していません。 質問またはコメントが承認されるまでに数日または数週間の遅れがあるかもしれません。
18/28/18現在: "スパムが続いているため、すべての新しい接続が
- R(未確認ユーザーからのメッセージをブロック)を設定しています... "
これは、 "/ join"コマンドはあなたが成功するまで成功しないことを意味します。
freenodeであなたのニックネームを登録してください。 方法についての説明
登録するには、 https://freenode.net/kb/answer/registrationを参照してください。
デバイスツリーメーリングリスト
このリストには、2014年2月までのすべてのdevicetree関連のディスカッションが含まれていました。当時、devicetree.specおよびdevicetree.compilerリストは、それらの特定のトピック分野のためのより少ない量のリストを提供するために作成されました。
2013年7月以降:
http://vger.kernel.org/vger-lists.html#devicetree
アーカイブ: http : //www.spinics.net/lists/devicetree/
アーカイブ: http : //dir.gmane.org/gmane.linux.drivers.devicetree
2013年7月まで:
https://lists.ozlabs.org/listinfo/devicetree-discuss
アーカイブ: https : //lists.ozlabs.org/pipermail/devicetree-discuss/
アーカイブ: http : //news.gmane.org/gmane.linux.drivers.devicetree
コアデバイスバインディング/デバイスツリー仕様メーリングリスト
2014年2月に作成されました。
devicetree.specリストは「コア」バインディングディスカッション用です。 サブシステム全体に影響を与えるもの、またはePAPRデバイスツリー仕様に追加することが意味をなすものの種類。
個々のデバイスバインディングは引き続きdevicetree@vger.kernel.orgに投稿されますが、サブシステムまたは一般的なパターンに影響を与えるものはすべてこのリストに投稿する必要があります。
2016年4月28日以降:
Devicetree Specificationの作成と更新もこのリストで説明されています。
http://vger.kernel.org/vger-lists.html#devicetree-spec
アーカイブ: http : //dir.gmane.org/gmane.comp.devicetree.spec
アーカイブ: https : //www.spinics.net/lists/devicetree-spec/
デバイスツリーコンパイラとツールメーリングリスト
2014年2月に作成されました。
devicetree.compilerリストは、dtcや他のツールに関する議論のためのものです。
これは、dtツールのトピック(構文解析、スキーマ検証、データ形式など)を説明するためのものです。
http://vger.kernel.org/vger-lists.html#devicetree-compiler
アーカイブ: https : //www.spinics.net/lists/devicetree-compiler/
プレゼンテーション、論文、記事
[ デバイスツリー]のプレゼンテーション、論文、および記事のページは、トピック領域および日付ごとにまとめられています。
デバイスツリーの謎
他の場所に特定の情報が見つからない場合は、 Device_Tree_Mysteriesページにある可能性があります。
Linux固有
デバイスツリーLinux
規格
devicetree.org WebサイトにあるDevicetree Specification Release 0.2 は、LinuxカーネルのePAPRに取って代わりました 。 この仕様はOSに依存しないように意図されています。 Linuxカーネルデバイスツリーメンテナは、仕様策定プロセスに積極的に参加しています。
Devicetree Specification は今後も更新されます。
Open Power Foundation Linux on Powerアーキテクチャプラットフォームリファレンス(LoPAPR)、v1.1、2016年3月24日
ソース: https : //members.openpowerfoundation.org/document/dl/469
組み込み電源アーキテクチャプラットフォーム要件(ePAPR)v1.1に関するPower.org標準
ソース: https : //www.power.org/documentation/power-org-standard-for-embedded-power-architecture-platform-requirements-epapr-v1-1-2/
デバイスツリーのソース形式
Devicetree Specification Release 0.2 第2章「The Devicetree」
第6章「Devicetreeのソース形式(バージョン1)」
組み込み電源アーキテクチャプラットフォーム要件(ePAPR)v1.1に関するPower.org標準 Devicetree Specificationに置き換えられました
第2章「デバイスツリー」
付録A「デバイスツリーのソース形式(バージョン1)」
dtcコンパイラリポジトリのドキュメント Documentation / dts-format.txtデバイスツリーのソース形式
ePAPRとLinuxのdtcコンパイラの違い
プレゼンテーション 「ダミーのためのデバイスツリー」、ELC 2014 by Thomas Petazzoni PDF
YouTubeビデオ
文書化されていない Device_Tree_Source_Undocumentedには、他に記載されていない情報がいくつか含まれています。
バインディング
バインディングはに文書化されています
規格書
Linuxカーネルのソースツリー
Linuxカーネルソースツリーのバインディングドキュメント
デバイスツリーに関するドキュメントファイルは、LinuxカーネルソースのDocumentation / devicetreeにあります。
特定のバインディング仕様は、LinuxカーネルソースのDocumentation / devicetree / bindingsにあります。
特に便利なファイル(アルファベット順)は次のとおりです。
ABI / testing / sysfs-firmware-ofw ターゲットシステム上の/ sys / firmware / devicetree / *の説明
デバイスツリー/バインディング bindingsディレクトリには、dtsで表現でき、カーネルフレームワークやドライバで使用される各デバイスタイプの構文と予想される要素に関する詳細が記載されています。
devicetree / bindings / ABI.txt 安定束縛と一般束縛の規則についてのコメント
devicetree / bindings / property-units.txt 測定単位を持つプロパティに名前を付ける方法
devicetree / bindings / resource-names 別のプロパティに対応する名前の順序付きリストを含む* -nameプロパティ
devicetree / bindings / submitting-patches.txt パッチの提出者とカーネル管理者のための重要な詳細
devicetree / bindings / vendor-prefixes.txt ベンダープレフィックスレジストリ
一部のサブシステムでは、devicetree / bindings /の下に概要バインディングの説明があります。
バス/ mvebu.bus
バス/ simple-pm-bus.txt
clock / clock-bindings.txt
display / mipi-dsi-bus.txt
dma / dma.txt
gpio / gpio.txt
hwlock / hwlock.txt
iio / iio.txt
割り込みコントローラ/ interrupts.txt
iommu / iommu.txt
lpddr2 / lpddr2.txt
mailbox / mailbox.txt
memory-controllers / mvebu-devbus.txt
mfd / mfd.txt
ミップス/ cavium / bootbus.txt
mmc / mmc.txt
pci / pci.txt
phy / phy-bindings.txt
pinctrl / pinctrl-bindings.txt
power_supply / power_supply.txt
pwm / pwm.txt
regmap / regmap.txt
レギュレータ/レギュレータ.txt
reserved-memory / reserved-memory.txt
reset / reset.txt
spi / spi-bus.txt
spmi / spmi.txt
Thermal / thermal.txt
xillybus / xillybus.txt
Linuxカーネルソースツリーの他のドキュメント
devicetree / booting-without-of.txt Open Firmwareなしで起動する際のオリジナルのpowerpcドキュメント
devicetree / changesets.txt チェンジセットの説明。 一連の変更が正常に適用されるか、適用されないように変更を適用します。
devicetree / dynamic-resolution-notes.txt オーバーレイを適用するときに使用されるリゾルバの実装。
devicetree / of_unittest.txt デバイスツリーの単体テストのデータをカーネルに追加する方法
devicetree / overlay-notes.txt オーバーレイに関するカーネル内部の実装上の注意
devicetree / usage-model.txt 概要:Linuxとデバイスツリー
サブシステム固有
gpio / pinctrl
割り込み
タイマー
等
オーバーレイ
メインラインのLinuxサポート
ランタイムオーバーレイの適用およびランタイムオーバーレイのユーザースペースからの削除は、メインラインカーネルではサポートされていません。 オーバーレイマネージャを介してこの機能を実装するためのツリー外パッチがあります。 オーバーレイマネージャは、特定の環境とユースケースを持つ特定のボード上の特定のオーバーレイのために多くのユーザーによってうまく使用されています。 しかし、不完全で不正確なコードのために、Linuxカーネルオーバーレイ実装には多くの問題があります。 これらの問題のため、オーバーレイマネージャはメインラインに受け入れられませんでした。 これらの問題が解決したら、Linuxカーネルでランタイムオーバーレイの適用およびユーザースペースからのオーバーレイの削除のいくつかの方法がサポートされることが予想されます。
特定の問題が解決されるため、オーバーレイの適用とオーバーレイの削除のサポートが段階的に段階的に段階的に導入される可能性があります。
基本的なオーバーレイサポートを完成するために何が必要かについてのFrankの考え
ブートローダのサポート
Linuxカーネルランタイムオーバーレイアプライに代わるものは、ブートローダーオーバーレイアプライです。 たとえば、U-Bootはオーバーレイ適用をサポートしています。 このオーバーレイ適用方法は、実行時のLinuxカーネルオーバーレイ適用の複雑さと問題を回避します。 この方法は、実行時にLinuxカーネルのオーバーレイを適用するよりも堅牢で問題が少ないと思われるため、推奨される手法です。
オーバーレイソースフォーマット
初期のオーバーレイの頃は、オーバーレイメタデータの多くはオーバーレイソースファイルに手作業でコーディングされていました。 Linuxカーネルソースツリーの現在のdtcコンパイラでは、この手作業によるコーディングは不要です。 Linuxカーネルのオーバーレイ適用コードは、将来的には手書きのメタデータでソースからコンパイルされたオーバーレイの適用を拒否することが予想されます。 メタデータには、フラグメントノード、および__overlay__、fixup、__ local_fixup__、および__symbols__などの、アンダースコアで始まる名前のノードが含まれます。
手書きのメタデータ形式からオーバーレイソースを変換する例については、 ELCE 2018 Devicetree BoF [PDF]のスライド29〜34を参照してください。
デバイスツリーソースの検証
デバイスツリーの将来の検証作業を参照してください。
最も基本的な検証はdtcコンパイラからの警告です。 ノイズチェックはデフォルトで無効になっています。 makeコマンドラインで 'W = 1'を指定して、ノイズチェックを有効にします。
ソースを.dtbにコンパイルする(FDTバイナリBLOB)
Documentation / manual.txtデバイスツリーコンパイラマニュアル
Linuxカーネル経由でシステムを作る
設定済みのすべての.dtb
dtbsを作る
特定の.dtb
これはarch / arm / boot / dts / qcom-msm8960-cdp.dtsをコンパイルする例です。
makeターゲットは.dtsファイルの名前で、 ".dts"は ".dtb"に変更されています。
dtbを有効にする設定オプションが設定されていることを確認します。次に例を示します。
arch / arm / boot / dts / Makefile:
dtb - $(CONFIG_ARCH_QCOM)+ =
...
qcom-msm8960-cdp.dtb
...
$ grep CONFIG_ARCH_QCOM .config
CONFIG_ARCH_QCOM = y
makeコマンドで正しいアーキテクチャを指定する(またはARCHをエクスポートする)
ARCH = "arm"をエクスポート
qcom-msm8960-cdp.dtbを作成します。
ARCH = "arm" make qcom-msm8960-cdp.dtb
ビルドディレクトリに生成されたスクリプト経由
Linuxカーネルのmakeシステムによって.dtbがビルドされた後、正確なビルドコマンドを含むファイルはビルドディレクトリに残ります。
arch / arm / boot / dts /.。dtb.cmd
arch / $ {ARCH} / boot / dts /.。dtb.cmd
FDTフォーマット
Flattened Device Tree(FDT)の他の名前は "binary blob"と ".dtb"です。
FDTのバージョン17のフォーマットは、 Devicetree Specification Release 0.2の第5章「Flat Devicetree Physical Structure」で説明されています。
FDTのバージョン17のフォーマットは、 ePAPR v1.1の第8章「フラットデバイスツリーの物理構造」( Devicetree仕様に置き換えられています )に記載されています。
booting-without-of.txtのセクション "II - DTブロックフォーマット"はFDTのフォーマットのより広範な記述です。
インストール
dtbs_installを作成します。 / boot / dtbs / にインストールします。
インストールする他の多くの方法....
ブートローダー
起動中
デバッグ
( Device_Tree_presentations_papers_articles#debugも参照してください。)
チュートリアル 「デバイスツリーの問題の解決」(更新)、ELCE 2015年10月by Frank Rowand PDFスライド
補助リソース(パッチなど)
差分.dts、.dtb、/ proc / devicetree / scripts / dtc / dtx_diff 4.6-rc1以降のLinuxカーネルソースツリー内
ユースケース、利点、および知っておくべきことは、Frank RowandによるELCE 2015年10月の「デバイスツリーの問題の解決」 (更新)に記載されています(PDF)。 このプレゼンテーションでは、dtx_diffを「dtdiff」と呼びます。
プロパティのソースの場所を特定する
起動時メッセージ デバイス作成
ドライバー登録
ドライバをデバイスにバインドする
遅延バインディング
デバッグ - ランダムなヒント
起動後に/ proc内のデバイスツリー情報を表示できるようにCONFIG_PROC_DEVICETREEを設定できます。 このオプションを 'Y'に設定してカーネルを構築し、カーネルを起動してから 'cd / proc / device-tree'
/ proc / device-treeはまだ存在しません。 それで???
CONFIG_PROC_FSは有効になっていますか?
CONFIG_OFは有効になっていますか?
/ sys / firmware / devicetree / baseは存在しますか? (このパスはABIではありませんが、現在は
/ proc / devicetreeはこの場所へのソフトリンクです。)
ブートローダはデバイスツリーをロードしましたか? (ブートコンソールを確認するか、dmesgを使ってブートメッセージを表示してください。)
CONFIG_PROC_DEVICETREEオプションが存在しない新しいカーネルでは、CONFIG_PROC_FSが 'Y'に設定されていると/ proc / device-treeが作成されます。
CONFIG_DEBUG_DRIVER = Yを試すこともできます。
また、多くの場合、 "#define DEBUG 1"という行を個々のCファイルに設定して、そのファイル内のルーチンにdebugステートメントを追加することもできます。 これにより、そのファイルのソース内のpr_debug()行がアクティブになります。
あるいは、以下をdrivers / of / Makefileに追加することができます。
CFLAGS_base.o:= -DDEBUG
CFLAGS_device.o:= -DDEBUG
CFLAGS_platform.o:= -DDEBUG
CFLAGS_fdt.o:= -DDEBUG
Linuxカーネルソースツリーのツール
dtc(カーネル内)
dtc(Device Tree Compiler) - 人間が編集可能なデバイスツリーソースの "dts"フォーマットと、カーネルまたはアセンブラのソースが使用できるコンパクトなデバイスツリーBLOBの "dtb"表現との間の変換を行います。 dtcはdtbデコンパイラです。
Linux版のdtcは、カーネルソースディレクトリのscripts / dtc /にあります。 新しいバージョンは定期的に上流プロジェクトから引き出されます。 dtcは、必要に応じてLinuxカーネルのビルドプロセスによって依存関係としてビルドされます。 Linuxカーネルのソースツリーで明示的にビルドしたい場合は、次のコマンドを使用してください。make scripts
上流プロジェクトに関する情報は近くのセクションにあります。 Documentation / manual.txtデバイスツリーコンパイラマニュアル
Documentation / dts-format.txtデバイスツリーのソース形式
メンテナはREADMEファイルにリストされています
dtx_diff
dtx_diffには2つの動作モードがあります。
2つのdtXファイルを比較する
単一のdtXファイルをコンパイルし(通常のLinuxインクルードと.configを使用)、それをデバイスツリーのソースファイルに逆コンパイルします。
dtXファイルは、デバイスツリーソースファイル、デバイスツリーコンパイルファイル(別名.dtb、FDT、またはデバイスツリーBLOB)、またはファイルシステムベースのサブツリー(ターゲットシステム上の/ proc / device-tree、または/)です。 proc / device-treeは、ターゲットシステムで起動し、dtx_diffを含むシステムで起動解除することができます。
dtx_diffの使用方法の例は、ELCE 2015年10月、Frank Rowandの「デバイスツリーの問題の解決」(更新)に記載されています。 このプレゼンテーションでは、dtx_diffは 'dtdiff'という名前であることに注意してください。
dtx_diffは4.6-rc1にマージされました。
dt_to_config
dt_to_configは、特定のデバイスツリーに必要なLinuxカーネル設定オプションに関する情報を提供するためのツールです。
dt_to_configは、カーネル設定オプションが正しく設定されているかどうかも報告できます。
dt_to_configの使用方法と注意すべきいくつかの制限の例は、LinuxCon Japan、2016年7月、Frank Rowandによる「デバイスツリー問題の解決 - パート2」にあります。
dt_to_configは4.8-rc1にマージされました。
Linuxカーネルソースツリー外部のツール
dtc(上流プロジェクト)
dtc(Device Tree Compiler)上流プロジェクトは定期的にLinuxカーネルソースツリーに取り込まれます。 上流プロジェクトは
https://git.kernel.org/cgit/utils/dtc/dtc.git
git clone git://git.kernel.org/pub/scm/utils/dtc/dtc.git
パッチの提出に関する情報はDocumentation / manual.txtのセクション1.1にあります。
上流プロジェクトでのdtc、fdtdump、その他のツールの構築
作る
dtsモード
githubのREADME.mkdから:emacsのデバイスツリー構文の基本的な強調表示を手に入れるための簡単な試み。
発表から:今日、私はemacsのための初歩的なdevicetreeメジャーモードをまとめました。 現時点では、かなり基本的な構文の強調表示に限定されていますが、考慮されていることはすべてうまく機能します。 Github [1]にあります。 パッチはもちろん大歓迎です。
[ github ]上のプロジェクトの場所
私はemacsユーザーではありませんので、このツールの有用性や、この説明に追加される可能性のある追加情報(またはこのツールからこのツールを削除する必要がある場合)についてのフィードバックをお寄せください。 frowand(dot)リスト(at)gmail(dot)comで私にEメールで知らせる
EDK
ザイリンクスEDKデバイスツリージェネレーター - ザイリンクスFPGAデザインファイルからFDTを生成します。 http://xilinx.wikidot.com/device-tree-generator
「デバイスツリージェネレータはザイリンクスのEDKツールです。
ツールの自動BSP生成機能、XPS」
fdtdump
fdtdumpはFDT(フラット化されたデバイスツリー、別名デバイスツリーBLOB)をソースに変換するためのツールです。
dtcコンパイラは、FDTをソースに変換するオプション(-O dts)もある代替ツールです。
fdtdumpは、 "dtc -O dts"といくつかの点で異なります。
fdtdumpはFDTヘッダをソースコメントとして表示します。
データの形式は外観(印刷される16進数の数)が異なりますが、どちらの形式でもコンパイル時に同じFDTになります。
fdtdumpの--scanオプションは、FDTを埋め込むファイルを検索し、FDTを見つけようとします。 埋め込まれたFDTはdtsに変換されます。
メンテナンスされていないバージョンのfdtdumpのソースがLinuxカーネルソースツリーに存在します。 Linuxカーネルのソースツリーにfdtdumpを構築するためのmakefileエントリはありません。 fdtdumpは将来的にLinuxカーネルのソースツリーから削除されるかもしれません。
fdtdumpはdtcプロジェクトにあり、そこに簡単に構築できます。
テスト
Linuxカーネルフレームワーク
設定オプションCONFIG_OF_UNITTESTでユニットテストを有効にする
デバイスドライバ--->デバイスツリーとOpen Firmwareのサポート--->デバイスツリーのランタイムユニットテスト
単体テストは起動シーケンスの終わり近くに実行されます。 テストの開始は次のように示されます。
dt-test ### unittestの開始 - エラーメッセージが表示されます
テスト結果の要約の例は次のとおりです。
dt-test ### unittestの終わり - 148合格、0失敗
ユニットテストは次の場所にあります。
drivers / of / unittest.c
ドライバー/の/ unittest-data /
DTC
dtcテストは上流のdtcプロジェクトにあります(dtc(上流プロジェクト)を参照)。
dtcをビルドします。
DTCを作る
テストをビルドします。
テストをする
テストを実行します。
確認する
valgrind --tool = memcheckでテストを実行します。
チェックをする
冗長モードでテストを実行します。
checkvをする
各テストは合格または不合格を報告します。
テスト結果の要約の例は次のとおりです。
**********テスト概要
*合計テストケース:1565
*パス:1565
- FAIL:0
*悪い設定:0
*奇妙なテスト結果:0