開発ボードに最もよく似ているボードの dts を見てください。これを参考にして、リファレンス ボードと開発ボードの違いに応じて dts を変更してください。
また、以下もチェックしてください。
- eLinux の Device-tree Documentation プロジェクト (読み始めるためのリンクの膨大なコレクションがあります)。
- デバイス ツリーの基本に関する一連の記事。
- デバイス ツリーへの移行のウォークスルー。
最小限の reg
+ interrupt
QEMU 仮想デバイスの例
この例では、次のデバイス ツリー ノードを versatilepb
に追加します。 -M versatilepb
により QEMU が使用するデバイス ツリー :
[email protected] {
compatible = "lkmc_platform_device";
reg = <0x101e9000 0x1000>;
interrupts = <18>;
interrupt-controller;
#interrupt-cells = <2>;
clocks = <&pclk>;
clock-names = "apb_pclk";
lkmc-asdf = <0x12345678>;
};
次に、Linux カーネル モジュールを使用してデバイスと対話し、次の DTS 機能をテストします:
- 住所を登録する
- IRQ
- ドライバからカスタム プロパティを読み取る
この例の主なコンポーネントは次のとおりです:
- 多用途の Linux
.dts
Linux フォークのパッチreg
とinterrupt
QEMU 汎用マシン (SoC を表す) にハードコードされた一致番号compatible
platform_driver.name
に一致 カーネルモジュールで、どのモジュールがこのデバイスを処理するかをカーネルに通知します- カスタム プロパティもドライバに渡します:
lkmc-asdf = <0x12345678>;
、of_property_read_u32
で読み取られます - デバイス ツリーは、
-dtb
で QEMU のファームウェアに渡されます。 引数
- QEMU フォーク:
- レジスタを読み取り、割り込みを生成するデバイス
- デバイスを
-M versatilepb
に挿入
- カーネル モジュール プローブでメモリに書き込み、テストを行います。これにより、IRQ も生成されます。
デバイス ツリーには、ここで取り上げていない機能が他にもたくさんありますが、この例から始めることができ、登場する新機能を簡単に試してみることができます。
その他のリソース:
- 必須の elinux チュートリアル:http://elinux.org/Device_Tree_Usage
dtc
で遊んでみる 純粋に構文的な質問の場合。たとえば、ノードがパスによって単純にマージされる方法を示しています:https://unix.stackexchange.com/a/375923/32558- https://unix.stackexchange.com/questions/118683/what-is-a-device-tree-and-a-device-tree-blob
例を挙げてみましょう。以下にそれぞれについて説明します
auart0: [email protected] {
compatible = "fsl,imx28-auart", "fsl,imx23-auart";
reg = <0x8006a000 0x2000>;
interrupts = <112>;
dmas = <&dma_apbx 8>, <&dma_apbx 9>;
dma-names = "rx", "tx";
};
必要なプロパティ:
- 互換性 :"fsl,-auart" である必要があります。サポートされている SoC には、imx23 と imx28 が含まれます。
- reg :デバイスに設定されたレジスタのアドレスと長さ
- interrupts :auart 割り込み番号を含める必要があります
- dmas:phandle to DMA controller ノードと AUART DMA チャネル ID で構成される DMA 指定子。
- dma-names:RX チャネルの場合は「rx」、TX チャネルの場合は「tx」。
注:各 auart ポートには、「エイリアス」ノードで正しく番号が付けられたエイリアスが必要です。
より高度なプロパティについては、このリンクにアクセスしてください。非常に便利です
デバイスツリーの説明
役に立てば幸いです!