この機能は、Solaris 8 10/00 ソフトウェアリリースで更新されました。
Universal Serial Bus (USB) は PC 業界で開発された、周辺機器 (キーボード、マウス、プリンタなど) をシステムに接続するための低コストのソリューションです。
USB コネクタは 1 方向 1 種類のケーブルだけに適合するように設計されています。デバイスはハブデバイスに接続できます。ハブデバイスとは、複数のデバイス (他のハブデバイスも含む) を接続するためのものです。USB が設計された主な目的は、デバイスごとに異なる何種類ものコネクタを減らすことです。つまり、システムの背面パネルの混雑を軽減することです。他にも、USB デバイスを使用すると、次のような利点があります。
USB デバイスはホットプラグ可能。詳細は、「USB デバイスのホットプラグ」を参照してください。
最大 126 台のデバイスを Solaris 環境でサポート
最大 12M ビット/秒のデータ転送速度をサポート
ロースピードデバイス (1.5M ビット/秒) からフルスピードデバイス (12M ビット/秒) までをサポート
低コストの外部ハブを追加するだけで簡単にバスを拡張可能。また、ハブとハブを接続して、ツリートポロジを構築できます。
Sun Microsystems は次のようなシステムで USB デバイスをサポートします。
Solaris 8 10/00 リリースが動作している Sun BladeTM 100 と Sun Blade 1000 システムは USB デバイスをサポートします。
Sun RayTM システムも USB デバイスをサポートします。
Solaris 8 (Intel 版) が動作している IA システムは、キーボード、マウス、一部の大容量ストレージデバイス (Zip ドライブなど) について USB サポートを提供します。詳細は、scsa2usb(7D) のマニュアルページを参照してください。
次の表に、Solaris 環境でサポートされる USB デバイスを示します。
USB デバイス |
サポートされるシステム |
---|---|
キーボードとマウス |
Sun USB サポート付きの SPARC システム uhci(7D) コントローラに基づいた、USB バスを持つ IA システム (オンボードの USB コントローラだけがサポートされます。プラグイン式のホストコントローラ PCI カードはサポートされません。) |
大容量ストレージ |
SPARC と IA |
プリンタ |
SPARC |
ハブ |
SPARC と IA |
次の表に、Solaris 環境で使用される USB の略語について説明します。USB の構成要素と略語についての詳細は、http://www.usb.org を参照してください。
略語 |
説明 |
---|---|
USB |
Universal Serial Bus |
USBA |
Universal Serial Bus Architecture (Solaris) |
USBAI |
USBA Client Driver Interface (Solaris) |
HCD |
USB ホストコントローラドライバ |
USB 仕様は、ライセンス料無しで誰でも入手できます。USB 仕様は、バスとコネクタの電気的および機械的なインタフェースを定義します。
USB が採用するトポロジでは、ハブが USB デバイスに接続点を提供します。ホストコントローラには、システム内のすべての USB ポートの原点となるルートハブが含まれます。ハブについての詳細は、「USB ホストコントローラとルートハブ」を参照してください。
上記の例では、1 つのシステムが 3 つのアクティブな USB ポートを持っています。1 番目の USB ポートは Zip ドライブに接続されています。この Zip ドライブにはハブが埋め込まれていないため、他のデバイスは接続できません。2 番目の USB ポートはハブに接続されており、このハブには Jaz ドライブと合成デバイス (キーボードとマウス) が接続されています。このキーボードにはハブが埋め込まれており、そのハブにマウスが接続されています。
次の表に、上記の例におけるデバイスのデバイスツリーパス名を示します。
Zip ドライブ |
/pci@1f,4000/usb@5/storage@1 |
キーボード |
/pci@1f,4000/usb@5/hub@2/keyboard@1 |
マウス |
/pci@1f,4000/usb@5/hub@2/mouse@2 |
Jaz ドライブ |
/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 クラスには、電話に接続するデバイス (モデムや ISDN インタフェースなど) が含まれます。その他にも、Audio、Monitor、Printer、Storage Device などのデバイスクラスがあります。各 USB デバイスはデバイスのクラスを表す記述子を持っています。デバイスクラスは、そのメンバーが構成とデータ転送に関してどのように動作するべきかを指定します。クラス情報についての詳細は、www.usb.org サイトを参照してください。
USB デバイスは 2 つのレベルのデバイスツリーノードとして表現されます。1 つのデバイスノードが USB デバイス全体を表し、1 つまたは複数の子インタフェースノードがデバイス上にある個々の USB インタフェースを表します。特殊なケースとして、デバイスノードとインタフェースノードが 1 つのノードに結合される場合もあります。
ドライバのバインドは互換性のある名前属性で実現されます。詳細は、『IEEE 1275 USB binding』の 3.2.2.1 項と『Writing Device Drivers』を参照してください。ドライバは、デバイス全体にバインドしてすべてのインタフェースを制御することも、1 つのインタフェース (キーボードやマウスなど) だけにバインドすることも可能です。デバイス全体にバインドするドライバがベンダーにもクラスにも存在しない場合、汎用 USB マルチインタフェースドライバがデバイスレベルのノードにバインドされます。このドライバは、互換性のある名前属性 (『IEEE 1275 USB binding』の 3.2.2.1 項で定義されている) を使用して、各インタフェースにドライバをバインドしようとします。
図 2-1 には、複合デバイス (ハブとプリンタ) の例が示されています。ハブとプリンタは両方とも同じプラスチック製のケースに入っていますが、異なる USB バスアドレスを持ちます。また、図 2-1 には、合成デバイスの例も示されています。キーボードとコントローラは同じプラスチック製のケースに入っていますが、同じ USB バスアドレスを持ちます。この例では、1 本のケーブルが USB マウスを合成デバイス (キーボードとコントローラ) に接続しています。
Solaris USB Architecture (USBA) は、USB 1.0 および 1.1 の仕様に加え、Solaris ドライバ条件に準拠しています。USBA モデルは SCSA (Sun Common SCSI Architecture) に似ています。USBA とは、汎用 USB トランスポート層という概念をクライアントドライバに提供する薄い層のことです。
SCSA と USBA の違いは、SCSA がバスを検査するときに .conf ファイルを使用するのに対して、USB ハブドライバは自己検査 nexus ドライバであることです。
次の節では、Solaris 環境における USB について知っておくべきことを説明します。
Solaris 環境では複数の USB キーボードとマウスをサポートしていないため、USB キーボードとマウスは常に 1 つだけシステムに接続するようにしてください。次の項目の説明も参照してください。
コンソールキーボードとマウスは複数のハブ経由で接続してはなりません。複数のハブを経由すると、キーボードとマウスが適時に正しく認識されず、コンソールキーボードとマウスとして構成されません。
コンソールキーボードとマウスは、システムのリブート後は、いつでも取り外してルートハブの別のポートや外部ハブに移動できます。しかし、リブート中や ok プロンプトが出ている間は移動できません。キーボードをプラグインした後は、キーボードとマウスは再び完全に機能します。
SPARC のみ - USB キーボードの電源キーと Sun タイプ 5 キーボードの電源キーの動作は異なります。USB キーボードでは、電源キーでシステムを中断またはシャットダウンすることができますが、システムの電源を入れることはできません。
Sun 社製以外の USB キーボードでは、キーパッドの左側にある機能は使用できません。
複数のキーボードはサポートされません。
キーボードは認識され、使用できますが、コンソールキーボードとしては認識されません。
ブート時に最初に認識されたキーボードがコンソールキーボードとなります。このため、ブート時に複数のキーボードがプラグインされていると混乱の原因となります。
コンソールキーボードを取り外した場合、次に利用可能な USB キーボードがコンソールキーボードにはなりません。次にホットプラグされるキーボードがコンソールキーボードになります。
複数のマウスはサポートされません。
マウスは認識され、使用できますが、コンソールマウスとしては認識されません。
ブート時に最初に認識されたマウスがコンソールマウスとなります。このため、ブート時に複数のマウスがプラグインされていると混乱の原因となります。
コンソールマウスを取り外した場合、次に利用可能な USB マウスがコンソールマウスにはなりません。次にホットプラグされるマウスがコンソールマウスになります。
Sun 社製以外の合成キーボードを PS/2 マウスと使用する場合、このキーボードがブート時に最初に認識されると、PS/2 マウスがプラグインされていなくても、このキーボードとマウスがコンソールキーボードとマウスになります。つまり、別の USB マウスがシステムにプラグインされていても、コンソールマウスとして構成されないので機能しません。
2 ボタンと 3 ボタンのマウスだけがサポートされます。ホイール付きマウスは 1 ボタンのマウスのように動作します。3 ボタンよりも多いマウスは 3 ボタンのマウスのように動作します。
USB ハブは次のことを行います。
ポートにおけるデバイスの取り付けと取り外しのモニタ
ポートにおける個々のデバイスの電源管理
ポートへの電源の制御
USB ホストコントローラはルートハブという埋め込みハブを持っています。背面パネルに見えるポートはルートハブのポートです。USB ホストコントローラは次のことを行います。
USB バスの指示。個々のデバイスはバスの調整はできません。
デバイスによって決定されるポーリング間隔による、デバイスのポーリング。デバイスはポーリング間隔 (時間) の考慮に十分なバッファを持っていると想定されます。
USB ホストコントローラとそれに接続されているデバイス間でのデータの送信。ピアツーピア通信はサポートされません。
SPARC と IA のどちらのシステムにおいても、ハブを 4 段を超えて多段接続してはなりません。SPARC システムでは、Open Boot PROM (OBP) は 4 段を超えるデバイスを正確に認識できません。
バス電源供給方式のハブは多段接続してはなりません。つまり、バス電源供給方式のハブを別のバス電源供給方式のハブに接続してはなりません。バス電源供給方式のハブは独自の電源を持っていません。USB フロッピーディスクデバイスはすべての電源をバスから取り入れるため、バス電源供給方式のハブ上では機能しません。
Solaris 8 10/00 リリースでは、USB の Zip、Jaz、Clik、SmartMedia、CompactFlash、および ORB のリムーバブル大容量ストレージデバイスをサポートします。Solaris 環境でサポートされるデバイスの完全なリストについては、scsa2usb(7D) のマニュアルページを参照してください。
これらのデバイスは、ボリューム管理を使用しても使用しなくても管理することができます。ボリューム管理を実行している状態でのデバイス管理についての情報は、vold(1M) のマニュアルページを参照してください。
Solaris 共通デスクトップ環境 (CDE) が実行されている場合は、USB リムーバブル大容量ストレージデバイスは、CDE ファイルマネージャのコンポーネントであるリムーバブルメディア・マネージャによって管理されます。CDE ファイルマネージャについての詳細は、dtfile(1) のマニュアルページを参照してください。
この節に記載されているマニュアルページを表示するには、MANPATH 変数に /usr/dt/man を含める必要があります。これらのコマンドを使用するには、パスに /usr/dt/bin を含め、さらに CDE を実行している必要があります。また、これらのコマンドをリモートで使用する場合は、DISPLAY 変数を設定する必要があります。
次の表に、リムーバブルメディア・マネージャが CDE 環境からストレージデバイスを管理する際に使用するコマンドを示します。
リムーバブルメディア・マネージャが使用するコマンド |
実行内容 |
---|---|
sdtmedia_format(1) |
USB デバイスのフォーマットおよびラベル付けを行う |
sdtmedia_prop(1) |
デバイスのプロパティを表示する |
sdtmedia_prot(1) |
デバイスのアクセス権を変更する |
sdtmedia_slice(1) |
デバイス上のスライスを作成または変更する |
USB デバイスのフォーマットが終了すると、通常は /rmdisk/label ディレクトリの下にマウントされます。リムーバブルストレージデバイスの構成についての詳細は、rmmount.conf(4) または vold.conf(4) のマニュアルページを参照してください。
以下の手順は、ボリューム管理を実行している状態で USB 大容量ストレージデバイスを管理する方法を示しています。デバイスノードは /vol/dev ディレクトリの下に作成されます。詳細は、scsa2usb(7D) のマニュアルページを参照してください。以下の手順では、ホットプラグ可能な USB 大容量ストレージデバイスを追加および取り外す方法についても記載しています。デバイスのホットプラグとは、オペレーティングシステムをシャットダウンすることなくあるいはシステムの電源を切ることなく、デバイスを追加したり取り外したりすることを指します。
すべてのリムーバブル大容量ストレージデバイス (USB 大容量ストレージデバイスを含む) について、デバイスの別名を表示します。
$ eject -n . . . rmdisk0 -> /vol/dev/rdsk/c4t0d0/clik40 (Generic USB storage) cdrom0 -> /vol/dev/rdsk/c0t6d0/audio_cd (Generic CD device) zip1 -> /vol/dev/rdsk/c2t0d0/fat32 (USB Zip device) zip0 -> /vol/dev/rdsk/c1t0d0/zip100 (USB Zip device) jaz0 -> /vol/dev/rdsk/c3t0d0/jaz1gb (USB Jaz device) |
上記のようにリストされたデバイス別名を使用して、USB 大容量ストレージデバイスをマウントします。
$ volrmmount -i device-alias |
次の例では、USB Jaz ドライブを /rmdisk/jaz0 の下にマウントします。
$ volrmmount -i jaz0 |
USB ストレージデバイスをマウント解除します。
$ volrmmount -e device-alias |
次の例では、USB Zip ドライブを /rmdisk/zip0 からマウント解除します。
$ volrmmount -e zip0 |
USB デバイスを、汎用の USB ドライブから取り出します。
$ eject device-alias |
次に例を示します。
$ eject rmdisk0 |
eject コマンドは、デバイスがまだマウント解除されていない場合は、そのデバイスのマウント解除も行います。また、eject コマンドは、そのデバイスにアクセスしているアクティブなアプリケーションがある場合は、それらを終了させます。
以下の手順では、vold の実行中にホットプラグ可能な USB デバイスを取り外す例として、Zip ドライブを使用しています。
デバイスをマウント解除します。
$ volrmmount -e zip0 |
そのデバイスを使用しているアクティブなアプリケーションがある場合は、それらを終了させます。
デバイスを取り出します。
$ eject zip0 |
スーパーユーザーになり、vold を停止します。
# /etc/init.d/volmgt stop |
USB 大容量ストレージデバイスを取り外します。
vold を開始します。
# /etc/init.d/volmgt start |
以下の手順は、vold の実行中にホットプラグ可能な USB デバイスを追加する方法を示します。
vold を停止します。
# /etc/init.d/volmgt stop |
USB 大容量ストレージデバイスを追加します。
vold を開始します。
# /etc/init.d/volmgt start |
デバイスが追加されたことを確認します。
$ ls device-alias |
USB 大容量ストレージデバイスは、ボリュームマネージャ (vold) を使用せずに管理することもできます。ボリュームマネージャを使用しないようにする方法は、次の 2 とおりあります。
次のコマンド実行して、vold を停止させます。
# /etc/init.d/volmgt stop |
vold は実行した状態にしておきますが、USB 大容量ストレージデバイスを vold に登録しないようにします。/etc/vold.conf ファイル内の次の行でテキストの初めに # マークを挿入し、コメント扱いにします。
# use rmdisk drive /dev/rdsk/c*s2 dev_rmdisk.so rmdisk%d |
上記のようにコメント扱いにした後、vold(1M) を再度開始します。
# pkill -HUP vold_pid |
詳細は、vold.conf(4) のマニュアルページを参照してください。
以下の手順は、vold(1M) を使用せずに USB 大容量ストレージデバイスを管理する方法を示しています。デバイスノードは、文字型デバイスについては /dev/rdsk ディレクトリ、ブロック型デバイスについては /dev/dsk ディレクトリの下に作成されます。詳細は、scsa2usb(7D) のマニュアルページを参照してください。
スーパーユーザーになります。
USB 大容量ストレージデバイスをマウントします。
# mount -F fs-type /dev/rdsk/cntndnsn /mount-point |
USB 大容量ストレージデバイスをマウント解除します。
# umount /mount-point |
デバイスを取り出します。
# eject /dev/[r]dsk/cntndnsn |
以下の手順は、vold を使用せずにホットプラグ可能な USB デバイスを取り外す方法を示しています。
以下の手順は、vold を使用せずにホットプラグ可能な USB デバイスを追加する方法を示しています。
システムが電源管理を有効にしている場合、USB のフレームワークはすべてのデバイスを電源管理しようと最大限に努力します。USB デバイスの電源管理には、デバイスが接続されているポートのハブドライバによる中断も含まれます。リモートウェイクアップ (呼び起こし) をサポートするかしないかは、デバイスによって異なります。デバイスがリモートウェイクアップをサポートしている場合は、イベントの発生時 (たとえば、マウスが移動したときなど) に、接続されているハブをウェイクアップします。アプリケーションが入出力を送信した場合も、ホストシステムはデバイスをウェイクアップできます。
リモートウェイクアップ機能がサポートされている場合、すべての HID (キーボードやマウスなど)、ハブ、およびストレージデバイスは、デフォルトで電源管理されます。USB プリンタが電源管理されるのは、2 つの印刷ジョブ間だけです。
電源管理で電源消費を抑えるときは、まず、USB リーフデバイスの電源が切断され、しばらくしてから、親ハブの電源が切断されます。当該ハブのポートに接続されているすべてのデバイスの電源が切断されると、しばらくしてから、ハブの電源が切断されます。最も効率的な電源管理は、あまり多くのハブを多段接続しないことです。
USB デバイスは、プラグインするとすぐにシステムのデバイス階層に表示されます(prtconf(1M) コマンドで確認)。また、デバイスが使用中でない限り、USB デバイスを取り外すとシステムのデバイス階層から消えます。
使用中の USB デバイスを取り外した場合、ホットプラグの動作は少しだけ異なります。使用中の USB デバイスを取り外した場合、デバイスノードは残り、このデバイスを制御しているドライバはデバイス上のすべての動作を停止します。それ以降、このデバイスに発行される新しい入出力動作はエラーで戻されます。
このような場合、システムは元のデバイスを接続するようにユーザーにプロンプトを表示します。間違って使用中の USB デバイスを取り外してしまった場合は、次のようにして回復します。
元のデバイスを同じポートに接続します。
そのデバイスを使用しているアプリケーションを停止します。
デバイスを取り外します。
元のデバイスが再びプラグインされるまで、USB ポートは使用できません。デバイスが使用できない場合は、USB ポートは次にリブートするまで使用できません。
アクティブな、つまり開いているデバイスを削除すると、データの整合性が損なわれる可能性があります。デバイスを取り外す前には、必ず、デバイスを閉じるようにしてください。ただし、コンソールキーボードとマウスは例外で、アクティブなときでも移動することができます。
市販されている USB ケーブルエクステンダは絶対に使用しないでください。デバイスを接続するときは、必ず、ハブと充分な長さのあるケーブルを使用してください。USB デバイスを接続するときは、必ず、フルレイト (12M ビット/秒) の 20/28 AWG ケーブルを使用してください。