セクションの魔法などでコールバックやその他のメカニズムを介して呼び出されるコードは、追跡が困難です。また、我々は歴史的なメカニズムとデバイスツリーの初期化注1を持っています。
init_irq
of the machine structureにコールバックがあります。これらは通常、ボードファイルで定義されます。たとえば、機械の説明からDT_MACHINE_START
マクロを経由してがmachine_desc in the .arch.info.init sectionです。このコードは起動時に非常に早く呼び出され、IRQハードウェアを動作させるために必要です。典型的にはクロッキング機構を含む。
Linuxはいくつかのコントローラをサポートしています。irqchipコントローラ。たとえば、いくつかのARMシステムでは、複数のGICチップがあります。これは〜1020個以上の割り込み要因がある場合に必要です。同様に、GPIOハードウェアは、しばしば、GPIO割り込みを有効/無効にする一種の2次IRQチップです。
マシンは、デバイスツリーでGICを宣言する必要があります。これはa table entry in irq-gic.cと一致し、gic_of_init()
が呼び出されます。このテーブルは、of_irq_init()
が、ハードウェアアドレスと割り込み番号でGICコントローラを初期化するために使用します。つまり、これはirq-gicドライバをとり、具体的なデバイスを与えます注2。
start_kernel()
にあるコードはinit_IRQ()となります。それは、次のようになります
start_kernel ->
init_IRQ ->
machine_desc->init_irq (machine version)
irqchip_init ->
of_irq_init -> via *device tree* for address data
gic_of_init -> actual controller initialization.
構造は、あらゆる場所にあるのLinuxは、あなたが(すべての割り込みを必要とする)ドライバーインフラストラクチャを持っているので、デバイスツリーは、(データを取得するために)、サブシステムとして構成されているので、初期化と割り込みコード(irqchip)。 DTまたはデバイスツリーの機能は、Linuxのボード固有コードの量を減らすことを目的としています。例imx6 solo-lite device tree includeは、データがのコードとどのようになっているかを示しています。このテキストは、がコンパイルされたを、ブートローダから渡される(またはイメージに添付された)フラット化されたデバイスツリーバイナリに変換します。
注1:デバイスツリーはいくつかの名前で呼ばれます。 OFオープンファームウェアオリジナルのPowerPC仕様に準拠しています。 'flattened device tree'の場合は、ほとんどがu-boot peopleです。FDTです。また、ちょうどDTとして。ですから、次の接頭辞OF、DT、FDTのいずれかを見ると、それはしばしば「デバイスツリー」です。
注2:デバイスは、具体的なハードウェアです。ドライバは、デバイスを処理するためのコードです。 Linuxはメモリを割り当て、これをドライバコードに提供します。このようにして、1つのコードで複数のデバイス(この場合は割り込みコントローラ)を処理できます。これはオブジェクト指向のコンセプトであり、ARMはのアドレス+オフセットのロード/ストアユニットの使用でそれをうまく処理します。
ありがとうございました。今、私はその流れを理解しました。 – user3693586