ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 11.1 Information Library (日本語) |
パート I Oracle Solaris プラットフォーム用デバイスドライバの設計
2. Oracle Solaris カーネルとデバイスツリー
USB デバイスと Oracle Solaris デバイスツリー
デバイス、インタフェース、エンドポイントの各ステータスの取得
22. ドライバのコンパイル、ロード、パッケージ化、およびテスト
23. デバイスドライバのデバッグ、テスト、およびチューニング
Oracle Solaris USB アーキテクチャーには USBA 2.0 フレームワーク と USB クライアントドライバが含まれています。
USBA 2.0 フレームワーク は、USBA 準拠のクライアントドライバに対して USB デバイスの抽象ビューを提供するサービス層です。このフレームワークは、USBA 準拠のクライアントドライバが自身の USB デバイスを管理できるようにします。USBA 2.0 フレームワーク は、高速アイソクロナスパイプ以外の USB 2.0 仕様をサポートします。USB 2.0 仕様については、http://www.usb.org/home を参照してください。
USBA 2.0 フレームワーク はプラットフォームに依存しません。次の図に Oracle Solaris USB アーキテクチャーを示します。図の USBA 層が USBA 2.0 フレームワーク です。この層は、ハードウェア固有のホストコントローラドライバとのやり取りを、ハードウェアに依存しないホストコントローラドライバインタフェース経由で行います。ホストコントローラドライバは、管理対象のホストコントローラ経由で USB 物理デバイスにアクセスします。
図 20-1 Oracle Solaris USB アーキテクチャー
USBA 2.0 フレームワーク はデバイスドライバそのものではありません。この章では、図 20-1 と図 20-2 に示されているクライアントドライバについて説明します。クライアントドライバは、外部ストレージデバイスやプリンタ、ヒューマンインタフェースデバイスなど、さまざまな種類の USB デバイスと対話します。ハブドライバとは、ネクサスドライバでもあるクライアントドライバのことです。ハブドライバは、自身のポート上のデバイスを列挙し、それらのデバイスの devinfo ノードを作成したあと、クライアントドライバを接続します。この章では、ハブドライバの記述方法については説明しません。
USB ドライバは、その他のすべての Oracle Solaris ドライバと同じ構造を持っています。USB ドライバは、ブロックドライバ、文字ドライバ、STREAMS ドライバのいずれかになります。USB ドライバは、呼び出し規則に従うほか、Oracle Solaris OS セクション 9 のマニュアルページで説明されているデータ構造体とルーチンを使用します。Intro(9E)、Intro(9F)、および Intro(9S) を参照してください。
USB ドライバとほかの Oracle Solaris ドライバとの違いは、USB ドライバでは、デバイスに直接アクセスする代わりに USBA 2.0 フレームワーク 関数を呼び出してデバイスにアクセスする点にあります。USBA 2.0 フレームワーク は標準の Oracle Solaris DDI ルーチンを補足します。次の図を参照してください。
図 20-2 ドライバとコントローラのインタフェース
図 20-2 は、インタフェースを図 20-1 よりも詳しく示したものです。図 20-2 は、クライアントドライバから DDI 関数を呼び出せるのとまったく同様に、USBA がクライアントドライバから呼び出し可能なカーネルサブシステムであることを示しています。
必ずしもすべてのシステムが、図 20-2 に示されたすべてのホストコントローラインタフェースを持つわけではありません。OHCI (オープンホストコントローラインタフェース) ハードウェアがもっとも普及しているのは、SPARC システムと他社製 USB PCI カードです。UHCI (ユニバーサルホストコントローラインタフェース) ハードウェアがもっとも普及しているのは、x86 システムです。ただし、OHCI、UHCI のどちらのハードウェアも任意のシステム上で使用できます。EHCI (拡張ホストコントローラインタフェース) ハードウェアが存在する場合、その EHCI ハードウェアは OHCI または UHCI と同じカード上に存在し、同じポートを共有します。
ホストコントローラ、ホストコントローラドライバ、および HCDI がトランスポート層を形成し、そのトランスポート層が USBA によって制御されます。OHCI、EHCI、または UHCI への呼び出しを直接行うことはできません。これらのインタフェースへの呼び出しは、プラットフォームに依存しない USBA インタフェース経由で間接的に行います。