web-dev-qa-db-ja.com

デバイスツリーとデバイスツリーブロブとは何ですか?

デバイスツリーとデバイスツリーblobとは正確には何ですか?特定のLinuxバージョンのソースコードはどこで入手できますか?ザイリンクスチップ上でLinuxを実行しているときにこのような名前を見つけました(ARM 9)です)。例: here

5
gpuguy

ザイリンクスのwikiを調べてみましたか?

このハウツーには、必要なものを入手するために必要なものがすべて揃っているように見えます。コードのあるgitリポジトリへのリンクと、ビルド方法の説明があります。デバイスツリーソースをダウンロードするコマンドは次のとおりです。

$ git clone git://github.com/Xilinx/device-tree.git

ザイリンクスのWebサイトには、ツールチェーンワークフローを初めて使用する場合に、優れた はじめに リソースも用意されています。これは、デバイスツリーが収まる場所を示す図です。

ss of xilinx workflow

これらの詳細はザイリンクスプラットフォーム用のLinuxのバリエーションに非常に固有であるため、そのwikiはそのバージョンをサポートするハードウェアベンダーであるザイリンクスによって管理されているため、上記以外の詳細はU&Lに含めません。使用するハードウェア製品のカーネル。

6
slm

GoogleWikipedia を参照し、これは www.devicetree.org を参照し、「デバイスツリー」を次のように説明します。

デバイスツリーは、ハードウェアを記述するためのデータ構造です。デバイスのすべての詳細をオペレーティングシステムにハードコーディングするのではなく、ハードウェアの多くの側面を、起動時にオペレーティングシステムに渡されるデータ構造で記述することができます。デバイスツリーは、Open Firmwareと、スタンドアロンのFlattened Device Tree(FDT)フォームの両方で使用されます。

これは、/dev/の下の「デバイスツリー」とは完全に異なる「デバイスツリー」のようです。

2
michas

QEMU仮想デバイスを使用した最小限のreg + interruptの例

他の人が言ったように、デバイスツリーはハードウェアベンダーによって提供され、Linuxカーネルにデバイスとの通信方法を指示します。

Linuxカーネルが必要とする2つの最も注目すべき情報は次のとおりです。

  • レジスタアドレス。 ARMランドでは、メモリの代わりにデバイスに行く魔法の物理メモリ位置に書き込むことによって、デバイスと通信します。これは、デバイスに動作を開始するように指示する方法です。
  • 割り込み行番号。これは、デバイスがカーネルに何かを終了したことを通知する方法です。

この例では、QEMUが-M versatilepbのために使用する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フォークのパッチ
    • reginterruptは、QEMU汎用マシン(SoCを表す)にハードコードされた番号と一致します
    • compatibleはカーネルモジュールのplatform_driver.nameと一致し、どのモジュールがこのデバイスを処理するかをカーネルに通知します
    • また、カスタムプロパティをドライバーに渡します:lkmc-asdf = <0x12345678>;、これはof_property_read_u32で読み取られます
    • デバイスツリーは、-dtb引数を使用してQEMUのファームウェアに渡されます
  • QEMUフォーク:
  • カーネルモジュール プローブのメモリに書き込み、テストを行います。これにより、IRQも生成されます。

デバイスツリーには、まだ説明していない機能が他にもたくさんありますが、この例を参考にして、新しい機能を簡単に試してみることができます。

その他のリソース: