USB 仕様は、ライセンス料を払わずに入手できます。USB 仕様は、バスとコネクタの電気的および機械的なインタフェースを定義します。
USB が採用するトポロジでは、ハブが USB デバイスに接続点を提供します。ホストコントローラには、システム内のすべての USB ポートの起点となるルートハブが含まれます。ハブの詳細は、「USB ホストコントローラとハブ」を参照してください。
図 7–1 は、有効な USB ポートが 3 つ搭載されたシステムを示しています。1 番目の USB ポートは USB メモリースティックに接続されています。2 番目の USB ポートは外部ハブに接続されており、このハブには CD-RW デバイスと、キーボードとマウスの複合デバイスが接続されています。このキーボードは「複合デバイス」であるため USB コントローラが組み込まれており、このコントローラによって、キーボードとキーボードに接続されたマウスの両方が制御されます。キーボードとマウスは、同じ USB コントローラによって制御されるため、同一の USB バスアドレスを共有します。
図 7–1 は、ハブとプリンタの「合成デバイス」の例も示しています。このハブは外部ハブで、プリンタと同じケースに入っています。プリンタはこのハブに固定接続されます。このハブとプリンタは、それぞれ異なる USB バスアドレスを持ちます。
次の表に、図 7–1 に示したデバイスの一部について、デバイスツリーパス名を一覧表示します。
/pci@1f,4000/usb@5/storage@1
/pci@1f,4000/usb@5/hub@2/device@1/keyboard@0
/pci@1f,4000/usb@5/hub@2/device@1/mouse@1
/pci@1f,4000/usb@5/hub@2/storage@3
/pci@1f,4000/usb@5/hub@3/printer@1
属性とサービスが似ている USB デバイスは、いくつかのデバイスクラスに分類されます。各デバイスクラスには対応するドライバが 1 つずつ存在しています。クラス内のデバイスは、同じ組み合わせのデバイスドライバによって管理されます。ただし、USB 仕様では、特定のクラスに属さないベンダー固有のデバイスも許可しています。
Human Interface Device (HID) クラスには、ユーザーが制御する次のようなデバイスが含まれます。
キーボード
マウスデバイス
ジョイスティック
Communication Device クラスには、次のデバイスが含まれます。
モデム
Ethernet アダプタ
その他にも、次のようなデバイスクラスがあります。
Audio Device
モニター
プリンタ
Storage Device
各 USB デバイスはデバイスのクラスを表す記述子を持っています。デバイスクラスは、そのメンバーが構成とデータ転送についてどのように動作するかを指定します。クラス情報の詳細は、次の Web サイトを参照してください。
Solaris リリースでサポートされる USB デバイスの詳細は、usb(7D) のマニュアルページを参照してください。
次の USB ドライバ拡張が含まれています。
USB CDC ACM デバイスのサポート – acm ドライバは、USB Communication Device Class 仕様の Abstract Control Model に準拠するデバイスと、モデム機能を持ついくつかの PCMCIA カードで動作します。
pppd デーモンは、/dev/term/[0~9]* エントリを通してこれらのデバイスにアクセスできます。詳細は、pppd(1M) のマニュアルページを参照してください。
詳細は、usbsacm(7D) のマニュアルページを参照してください。
汎用 USB ドライバ – 特別なカーネルドライバを記述する必要なく、UNIX 標準の read(2) および write(2) システムコールを使って、アプリケーションから USB デバイスのアクセスおよび操作を実行できるようになりました。次の機能が追加されています。
アプリケーションから raw デバイスのデータおよびステータスにアクセスできます。
制御転送、バルク転送、および割り込み (入力と出力) 転送がサポートされます。
Solaris 10 6/06 リリースから、デバイスへの明示的なバインドに ugen ドライバは不要になりました。デフォルトでは、usb_mid により、クラスドライバの存在しないデバイスへのバインド、および libusb で動作する ugen インタフェースのエクスポートが実行されます。たとえば、大容量ストレージデバイスではない USB カメラを接続し、libusb アプリケーションを使ってアクセスできます。また、scsa2usb ドライバと usbprn ドライバの両方が ugen インタフェースをエクスポートするため、これらのデバイスクラス上で libusb アプリケーションを直接使用できます。
詳細は、ugen(7D) のマニュアルページを参照してください。
USB シリアルドライバのサポート
Digi Edgeport USB サポート – Edgeport USB ドライバは、Edgeport デバイスでのみ機能し、ほかの USB シリアルデバイスでは機能しません。
新しいデバイスには、/dev/term/[0-9]* または /dev/cua/[0-9]* としてアクセスできます。
USB シリアルポートをその他のシリアルポートと同じように使用できます。ただし、ローカルシリアルコンソールの機能はありません。ユーザーから見て、USB ポート経由でデータが実行されていることはわかりません。
詳細は、usbser_edge(7D) のマニュアルページを参照するか、次の Web サイトにアクセスしてください。
Keyspan – Keyspan USB シリアルドライバは Keyspan デバイスでのみ動作します。現在サポートしているのは USA-19HS モデルと USA-49WLC モデルです。
詳細は、usbsksp(7D) のマニュアルページを参照してください。
Prolific – Prolific USB シリアルドライバは、PL2303 チップセットをベースとするデバイスだけで動作します。
詳細は、usbsprl(7D) のマニュアルページを参照してください。
USB to serial デバイスのサポートについては、次のサイトを参照してください。
ユーザーが記述したカーネルおよびユーザー独自のドライバの文書サポートおよびバイナリサポート – USB ドライバの開発に関する最新の情報については、次の Web サイトを参照してください。
EHCI ドライバには、次の特徴があります。
USB 2.0 をサポートする拡張ホストコントローラインタフェースに準拠しています。
高速の制御転送、バルク転送、割り込み転送、およびアイソクロナス転送をサポートします。
USB 2.0 チップには、1 つの EHCI コントローラと 1 つ以上の OHCI または UHCI コントローラが組み込まれています。
USB 1.1 デバイスを接続すると、OHCI または UHCI コントローラに動的に割り当てられます。USB 2.0 デバイスを接続すると、EHCI コントローラに動的に割り当てられます。
prtconf コマンドの出力を使用して、システムが USB 1.1 デバイスまたは USB 2.0 デバイスをサポートしているかどうかを確認します。次に例を示します。
# prtconf -D | egrep "ehci|ohci|uhci" |
prtconf の出力で EHCI コントローラが確認される場合、システムは USB 2.0 デバイスをサポートしています。
prtconf の出力で OHCI または UHCI コントローラが確認される場合、システムは USB 1.1 デバイスをサポートしています。
USB デバイスは、2 つのレベルのデバイスツリーノードとして表現できます。デバイスノードは、USB デバイス全体を表します。1 つまたは複数の子インタフェースノードはデバイス上にある個々のUSB インタフェースを表します。
ドライバのバインドは互換性のある名前属性の使用によって実現されます。詳細については、『IEEE 1275 USB binding (英語版)』の 3.2.2.1 項と『Writing Device Drivers 』を参照してください。ドライバは、デバイス全体にバインドしてすべてのインタフェースを制御することも、1 つのインタフェースだけにバインドすることも可能です。デバイス全体にバインドするドライバがベンダーにもクラスにも存在しない場合、汎用 USB マルチインタフェースドライバがデバイスレベルのノードにバインドされます。IEEE 1275 バインド仕様の 3.2.2.1 項で定義されているように、このドライバは互換名プロパティーを使用して、各インタフェースに対してドライバのバインドを試みます。
Solaris USB アーキテクチャー (USBA) は、USB 1.1 および USB 2.0 の仕様に準拠しており、Solaris デバイスドライバインタフェース (DDI) の一部です。USBA モデルは Sun Common SCSI Architecture (SCSA) に似ています。次の図が示すように、USBA は、汎用 USB トランスポート層という概念をクライアントドライバに提供する薄い層で、汎用 USB の主要な機能を実装するサービスをクライアントドライバに提供します。