開発ボードでLinuxを起動します。ハードウェア全体を説明するdtsファイル(デバイスツリーファイル)が必要です。しかし、ボード上でLinuxを適切に実行するにはこのファイルの構文では不十分です。
私が今知っているのは、ユニットの割り込み番号、周波数、アドレス、親ユニット、およびその互換性のあるドライバータイプ(以下で説明)を記述する方法だけです。
ps7_scuwdt_0: ps7-scuwdt@f8f00620 {
compatible = "xlnx,ps7-scuwdt-1.00.a";
device_type = "watchdog";
interrupt-parent = <&ps7_scugic_0>;
interrupts = < 1 14 769 >;
reg = < 0xf8f00620 0xe0 >;
} ;
他の高度な用法や文法は私には不慣れです。
あなたの開発ボードに最もよく似ているボードのdtsを見てください。これをリファレンスとして使用し、リファレンスボードと開発ボードの違いに応じてdtsを変更します。
以下もチェックしてください:
- Device-tree Documentation project eLinuxで(読むためのリンクの膨大なコレクションがあります)。
- シリーズ記事 デバイスツリーの基本について。
- ウォークスルー デバイスツリーへの移行の.
QEMU仮想デバイスでの最小reg
+ interrupt
の例
この例では、-M versatilepb
のためにQEMUが使用するversatilepb
デバイスツリーに次のデバイスツリーノードを追加します。
lkmc_platform_device@101e9000 {
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機能をテストします。
これらは、例の主なコンポーネントです。
.dts
Linuxフォークのパッチreg
およびinterrupt
は、QEMU多目的マシン(SoCを表す)にハードコードされた一致番号compatible
はカーネルモジュールのplatform_driver.name
に一致し、このデバイスを処理するモジュールをカーネルに通知しますlkmc-asdf = <0x12345678>;
をドライバーに渡します。これはof_property_read_u32
で読み取られます-dtb
引数を使用してQEMUのファームウェアに渡されます。-M versatilepb
に挿入デバイスツリーには、これまで取り上げていない多くの機能がありますが、この例を使用すると、すぐに新しい機能を試してみることができます。
その他のリソース:
dtc
をいじってください。たとえば、ノードがパスによって単純にマージされる方法を示しています: https://unix.stackexchange.com/a/375923/32558例を挙げましょう。それぞれを以下のように説明します
auart0: serial@8006a000 {
compatible = "fsl,imx28-auart", "fsl,imx23-auart";
reg = <0x8006a000 0x2000>;
interrupts = <112>;
dmas = <&dma_apbx 8>, <&dma_apbx 9>;
dma-names = "rx", "tx";
};
必要なプロパティ:
-compatible: "fsl、-auart"である必要があります。サポートされるSoCには、imx23およびimx28が含まれます。
-reg:デバイスに設定されたレジスタのアドレスと長さ
-割り込み:auart割り込み番号を含める必要があります
-dmas:DMA指定子、DMAコントローラノードとAUARTから構成される指定子DMAチャネルID。
-dma-names:RXチャネルの「rx」、TXチャネルの「tx」.
注:各auartポートには、「aliases」ノードで正しく番号が付けられたエイリアスが必要です。
より高度なプロパティについては、このリンクにアクセスしてください。非常に便利です
デバイスツリーの説明
それが役に立てば幸い!
他の回答を補完する:
公式カーネルソースのroot/Documentation/devicetree
( https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/)の下には、デバイスツリーのセクションもあります。 linux.git/tree/Documentation/devicetree?h = v5.2-rc5 )。