2017-09-11 55 views
0

一般的にドライバの仕組みが不思議です。私は基本的なコンセプトを理解していますし、単一のドライバーがどのように動作しているかもわかります私が混乱しているところは、複数のドライバーが関わっているときにどのように動作するかです。ドライバの仕組み(PCIe、USBなど)

は私が例を通じて私の質問を説明してみましょう:

は、私はHWでPCIeおよびUSBインターフェースを持っていると仮定します。ホスト(ドライバ、OS、アプリケーションが常駐する)への主要インタフェースはPCIeです。 USBインターフェースは、PCIeを介してホストからアクセス可能です。

この場合、私はUSB用のPCIe用ドライバも用意しています。 アプリケーションがUSB経由でデータを転送する必要がある場合、アプリケーションはシステム/ OSコールを呼び出します。これは最終的にはUSBドライバにつながります。 これが正しいですか?

USBドライバが処理を完了すると、PCIeコールを呼び出す必要があります。それは誰ですか? OSやUSBドライバ自体ですか? 私はそれがそうでなければ基本的なモジュラー哲学を破るだろうと思うでしょう。しかしOSを呼び出すドライバは直感的ではないように思えます。なぜなら、アプリケーションからOS、ドライバ、ハードウェアへのフローを常に想定していたからです。

誰もがこのトピックについて軽視してください。

+0

Googleの割り込み ' –

+1

残念ながら、これはシステム固有のものです。 – user3344003

答えて

1

ユーザスペースコードの場合と同様に、カーネルランドのさまざまな種類のハードウェアにアクセスするための標準化されたAPIが存在します(正確な使用法はOSによって異なります)。その結果、1つのデバイスドライバがこれらの標準化されたAPIを介して別のデバイスのドライバにアクセスすることはそれほど魅力的ではありません。 (警告:USBは非常に複雑なプロトコルであり、長いポストを短く保つために多くの詳細が書かれています)

元の質問は、PCIeからUSBカードに焦点を当てました。この例では、ドライバーの3つの「レイヤー」があると考えるのが有益だと思います。第1層は、PCIeバスコントローラドライバであり、PCIeデバイスのMMIOをマッピングし、それらのPCIeデバイスからの割り込みをサポートするなど、PCIeバス固有の機能を制御します。第2の層は、USBホストコントローラ層であり、標準化されたUSBトランザクションを発行する機能を提供する。最後に、(USBドライバキーボードのような)USBデバイスドライバは、標準化されたUSBトランザクションを使用してスタックの上に載って、特定のUSB周辺デバイスの機能を実装する。キーボードドライバからの呼び出しは、USBホストコントローラドライバ内の関数を呼び出して、PCIeドライバを呼び出すことさえできる。多くの独立したドライバが採用されているにもかかわらず、これはすべてカーネル空間で行われます。

ほとんどのPCIeデバイスは、MMIOアクセスを介してCPUと大量の通信を行います。これらは、プロセッサに対するメモリの読み書きとして表示されます。一般に、PCIeからCPUへのデータのMMIO転送を実行するために、特定のドライバ機能は必要ありません(ただし、エンディアンの訂正またはキャッシュ問題への対処には単純なアクセス機能があります)。

USBホストコントローラドライバは、標準のデバイスメモリマップと動作を規定する標準(XHCI、この例で使用するUSB​​ 3.0規格など)に準拠している点で興味深いです。したがって、通常、チップ固有のドライバがUSBホストコントローラデバイスへの非標準初期化を実行することがあります。さらに、これらのチップ固有のドライバは、XHCI標準化されたMMIO領域の位置を検索し、XHCIコントローラ(この例ではPCIe割り込みから)の割り込みを受信する方法を提供します。

この標準化されたメモリ領域と割り込みメカニズムは、汎用のXHCIホストコントローラドライバに渡されます。一般的なXHCIコードは、デバイスがPCIeであるかどうか気にしません.XHCI規格に準拠したメモリ領域を通過し、正しい割り込みを受け取ることができます。XHCIドライバは汎用USB転送機能を提供し、デバイスはUSBトランザクションを開始するために使用できます。

ほとんどの場合、XHCIドライバは、渡されたMMIO領域への読み書きを行うだけです。これにより、同じ共通XHCIコードがワイドアレイUSBホストコントローラにサービスを提供します。その多くは、 PCIeデバイス。したがって、XHCIドライバは、USBコントローラを実装する基盤となるハードウェアを抽象化することができます。このように、元の疑問が提起された例では、USBホストコントローラの標準は、よりモジュラーなUSBドライバシステムを作るための基礎となるハードウェアメカニズムを隠すように設計されています。