GNU/Linux >> Linux の 問題 >  >> Linux

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

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

役に立てば幸いです!


Linux
  1. Linuxで複数のファイルを圧縮する方法

  2. LKM を使用して C プログラムで Linux proc ファイルを作成する方法

  3. Linux でデバイスをマウントするには?

  1. Linuxにデバイスドライバーをインストールする方法

  2. Linuxでファイルの名前を変更する方法

  3. カーネル デバイス ツリーを一覧表示する方法

  1. Linuxのウィンドウ装飾をカスタマイズする方法

  2. Linuxでgocryptfsを使用してファイルを暗号化する方法

  3. Linuxでファイルを見つける方法