web-dev-qa-db-ja.com

Linuxの.dtsデバイスツリーファイルをプログラムする方法

開発ボードで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 >;
                } ;

他の高度な用法や文法は私には不慣れです。

17
Ezio

あなたの開発ボードに最もよく似ているボードのdtsを見てください。これをリファレンスとして使用し、リファレンスボードと開発ボードの違いに応じてdtsを変更します。

以下もチェックしてください:
- Device-tree Documentation project eLinuxで(読むためのリンクの膨大なコレクションがあります)。
- シリーズ記事 デバイスツリーの基本について。
- ウォークスルー デバイスツリーへの移行の.

19
TheCodeArtist

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機能をテストします。

  • アドレスを登録する
  • IRQ
  • ドライバーからカスタムプロパティを読み取る

これらは、例の主なコンポーネントです。

  • Linux多目的.dts Linuxフォークのパッチ
    • regおよびinterruptは、QEMU多目的マシン(SoCを表す)にハードコードされた一致番号
    • compatibleはカーネルモジュールのplatform_driver.nameに一致し、このデバイスを処理するモジュールをカーネルに通知します
    • また、カスタムプロパティlkmc-asdf = <0x12345678>;をドライバーに渡します。これはof_property_read_u32で読み取られます
    • デバイスツリーは、-dtb引数を使用してQEMUのファームウェアに渡されます。
  • QEMUフォーク:
  • カーネルモジュール 物事をテストするためにプローブのメモリに書き込み、IRQも生成します。

デバイスツリーには、これまで取り上げていない多くの機能がありますが、この例を使用すると、すぐに新しい機能を試してみることができます。

その他のリソース:

例を挙げましょう。それぞれを以下のように説明します

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」ノードで正しく番号が付けられたエイリアスが必要です。
より高度なプロパティについては、このリンクにアクセスしてください。非常に便利です
デバイスツリーの説明

それが役に立てば幸い!

3
PAL
0
h0ch5tr4355