Go to main content
Oracle® Solaris 11.3 デバイスドライバの記述

印刷ビューの終了

更新: 2016 年 11 月
 
 

Oracle Solaris 環境での USB

Oracle Solaris USB アーキテクチャーには USBA 2.0 フレームワーク と USB クライアントドライバが含まれています。

USBA 2.0 フレームワーク

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 物理デバイスにアクセスします。

図 21  Oracle Solaris USB アーキテクチャー

image:図は、クライアントドライバとハブドライバから USB アーキテクチャーインタフェースを経由してコントローラとデバイスに至る制御フローを示しています。

USB クライアントドライバ

USBA 2.0 フレームワーク はデバイスドライバそのものではありません。この章では、図 21図 22 に示されているクライアントドライバについて説明します。クライアントドライバは、外部ストレージデバイスやプリンタ、ヒューマンインタフェースデバイスなど、さまざまな種類の 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 ルーチンを補足します。次の図を参照してください。

図 22  ドライバとコントローラのインタフェース

image:図は、DDI 関数と USBAI 関数、さまざまなバージョンの USBA フレームワーク、およびさまざまなタイプのホストコントローラを示しています。

図 22 は、インタフェースを図 21 よりも詳しく示したものです。図 22 は、クライアントドライバから DDI 関数を呼び出せるのとまったく同様に、USBA がクライアントドライバから呼び出し可能なカーネルサブシステムであることを示しています。

必ずしもすべてのシステムが、図 22 に示されたすべてのホストコントローラインタフェースを持つわけではありません。OHCI (オープンホストコントローラインタフェース) ハードウェアがもっとも普及しているのは、SPARC システムと他社製 USB PCI カードです。UHCI (ユニバーサルホストコントローラインタフェース) ハードウェアがもっとも普及しているのは、x86 システムです。ただし、OHCI、UHCI のどちらのハードウェアも任意のシステム上で使用できます。EHCI (拡張ホストコントローラインタフェース) ハードウェアが存在する場合、その EHCI ハードウェアは OHCI または UHCI と同じカード上に存在し、同じポートを共有します。

ホストコントローラ、ホストコントローラドライバ、および HCDI がトランスポート層を形成し、そのトランスポート層が USBA によって制御されます。OHCI、EHCI、または UHCI への呼び出しを直接行うことはできません。これらのインタフェースへの呼び出しは、プラットフォームに依存しない USBA インタフェース経由で間接的に行います。