この章では、Solaris 環境で USB デバイスを使用する手順について説明します。
USB デバイスの使用手順については、次の節を参照してください。
USB デバイスの使用に関する概要については、第7章「USB デバイスの使用 (概要)」を参照してください。
Solaris 環境でのすべての USB デバイス管理作業を次のマップに一覧表示します。作業ごとにいくつかの詳細タスク (USB デバイスの使用、USB デバイスのホットプラグ、USB オーディオデバイスの追加など) を説明しています。
作業 |
説明 |
参照先 |
---|---|---|
USB デバイスを使用する |
ファイルシステムを作成およびマウントする前に、USB デバイスをフォーマットする必要がある | |
USB デバイスをホットプラグする |
USB デバイスをシステムに動的に追加し、システムから動的に取り外す |
|
|
USB デバイスを物理的にシステムに追加し、物理的にシステムから取り外すことができる | |
|
cfgadm コマンドを使用して、USB デバイスをシステムに物理的または論理的に追加し、システムから物理的または論理的に取り外す | |
USB オーディオデバイスを追加する |
この作業マップを使用して、USB オーディオデバイスの追加に関連する作業を特定する |
作業 |
説明 |
参照先 |
---|---|---|
USB 大容量ストレージデバイスを使用できるように準備する |
vold を使用して USB 大容量ストレージデバイスを使用できるように準備する | |
|
vold を使用しないで USB 大容量ストレージデバイスを使用できるように準備する | |
USB デバイス情報を表示する |
prtconf コマンドを使用して USB デバイス情報を表示する | |
USB 大容量ストレージデバイスをフォーマットする |
USB 大容量ストレージデバイスをフォーマットして、データを格納できるようにする | |
USB 大容量ストレージデバイスをマウントする |
vold を使用して USB 大容量ストレージデバイスをマウントする | |
|
vold を使用しないで USB 大容量ストレージデバイスをマウントする | |
(省略可能) USB デバイスドライバを無効にする |
システムで USB サポートを必要としない場合は、USB デバイスドライバを無効にする |
|
(省略可能) 未使用の USB デバイスのリンクを削除する |
devfsadm コマンドを使って、未使用の USB デバイスのリンクを削除する |
この Solaris リリースで USB 大容量ストレージデバイスを使用する場合の最新情報については、「USB 大容量ストレージデバイス」を参照してください。
Solaris 9 4/04 から、USB の CD-RW、ハードディスク、DVD、デジタルカメラ、Zip、Peerless、SmartMedia、CompactFlash、ORB、および USB フロッピーディスクデバイスなどのリムーバブル大容量ストレージデバイスがサポートされるようになりました。
Solaris 環境でサポートされるすべての USB デバイスを確認するには、http://www.sun.com/io_technologies/USB.html を参照してください。
これらのデバイスは、ボリューム管理を実行している場合でも実行していない場合でも管理することができます。ボリューム管理を実行している場合のデバイス管理については、vold(1M) のマニュアルページを参照してください。
USB フロッピーディスクデバイスは、ほかの USB デバイスと同様に、リムーバブルメディアデバイスとして表示されます。USB フロッピーディスクデバイスは、fd (フロッピー) ドライバでは管理されません。アプリケーションから fd (ネイティブフロッピー) ドライバに対する ioctl(2) 呼び出しを実行すると、そのアプリケーションは失敗します。read(2) および write(2) 呼び出しのみを実行するアプリケーションは成功します。SunPCI や rmformat などのアプリケーションも成功します。
現時点では、CDE のファイルマネージャは USB フロッピーディスクを完全にはサポートしていません。ただし、UFS ファイルシステムを含むフロッピーディスクは、ファイルマネージャのリムーバブルメディアマネージャから開いたり、名前を変更したり、フォーマットしたりすることはできます。PCFS ファイルシステムを含むフロッピーディスクを開くには、リムーバブルメディアマネージャを使用する必要があります。フロッピーディスクがいずれかの種類のファイルシステムを含む場合には、フロッピーディスクとファイルマネージャ間でファイルをドラッグ&ドロップできます。
ボリューム管理 (vold) では、USB フロッピーディスクデバイスは SCSI リムーバブルメディアデバイスとして認識されます。ボリューム管理を使用して、/rmdisk ディレクトリのUSB フロッピーディスクデバイスにアクセスできます。
USB フロッピーディスクデバイスの使用方法の詳細については、第1章「リムーバブルメディアの管理 (概要)」を参照してください。
デバイスの識別が間違っていたり、USB 大容量ストレージクラスと互換性がないとされているドライバでも、USB 大容量ストレージドライバをサポートする場合があります。scsa2usb.conf ファイルには、大容量デバイスに対応するかどうかを示す、ベンダー ID、製品 ID、およびバージョンを一覧表示した属性オーバーライドリストが含まれています。またデフォルトのデバイス属性をオーバーライドするフィールドも含まれています。このリストのエントリにはデフォルトでコメントが表示されています。特定のデバイスのサポートを有効にするために、コメントをコピーしたり削除したりすることもできます。
この Solaris リリースで動作するシステムに USB 大容量ストレージデバイスを接続したが、システムでそのデバイスを使用できない場合、/kernel/drv/scsa2usb.conf ファイルでこのデバイスに一致するコメントエントリがあるかどうか確認できます。scsa2usb.conf ファイルの指示に従って、オーバーライド情報を使用して、特定のデバイスをサポートできるかどうか確認してください。推奨される USB 大容量ストレージデバイスについては、http://www.sun.com/io_technologies/USB.html を参照してください。
詳細については、scsa2usb(7D) のマニュアルページを参照してください。
Solaris 共通デスクトップ環境 (CDE) が実行されている場合は、USB リムーバブル大容量ストレージデバイスは、CDE ファイルマネージャのコンポーネントであるリムーバブルメディア・マネージャによって管理されます。CDE ファイルマネージャの詳細については、dtfile(1) のマニュアルページを参照してください。
この節に記載されているマニュアルページを表示するには、MANPATH 変数に /usr/dt/man ディレクトリを含める必要があります。これらのコマンドを使用するには、パスに /usr/dt/bin ディレクトリを含め、さらに CDE を実行している必要があります。また、これらのコマンドをリモートで使用する場合は、DISPLAY 変数を設定する必要があります。
次の表に、リムーバブルメディア・マネージャが CDE 環境からストレージデバイスを管理する際に使用するコマンドを示します。
コマンド |
マニュアルページ |
作業 |
---|---|---|
sdtmedia_format |
sdtmedia_format(1) |
デバイスのフォーマットおよびラベル付けを行う |
sdtmedia_prop |
sdtmedia_prop(1) |
デバイスのプロパティを表示する |
sdtmedia_prot |
sdtmedia_prot(1) |
デバイスのアクセス権を変更する |
sdtmedia_slice |
sdtmedia_slice(1) |
デバイス上のスライスを作成または変更する |
USB デバイスのフォーマットが終了すると、通常は /rmdisk/label ディレクトリの下にマウントされます。リムーバブルストレージデバイスの構成方法については、rmmount.conf(4) または vold.conf(4) のマニュアルページを参照してください。
デバイスノードは /vol/dev ディレクトリの下に作成されます。詳細については、scsa2usb(7D) のマニュアルページを参照してください。
次の手順は、vold を使用しないで USB 大容量ストレージデバイスを管理する方法を示しています。デバイスノードは、文字型デバイスについては /dev/rdsk ディレクトリ、ブロック型デバイスについては /dev/dsk ディレクトリの下に作成されます。デバイスリンクは、デバイスをホットプラグしたときに作成されます。詳細については、scsa2usb(7D) のマニュアルページを参照してください。
USB 大容量ストレージデバイスは、ボリューム管理 (vold) を使用しないで準備することもできます。次のコマンドを実行して vold を停止します。
# /etc/init.d/volmgt stop |
または、次の手順を実行して、vold を実行します。この場合、USB 大容量ストレージデバイスは vold には登録されません。
スーパーユーザーになります。
以下に示すように /etc/vold.conf ファイル内の次の行で # マークを挿入してコメント扱いにし、USB 大容量ストレージデバイスのボリュームマネージャの登録を削除します。
# use rmdisk drive /dev/rdsk/c*s2 dev_rmdisk.so rmdisk%d |
上記のようにコメントアウトした後、vold を再起動します。
# /etc/init.d/volmgt start |
この行をコメントにすると、そのシステム内に他の SCSI、ATAPI Zip、Peerless などのリムーバブルデバイスがある場合、それらのデバイスの vold の登録も無効になります。
詳細については、vold.conf(4) のマニュアルページを参照してください。
prtconf コマンドを使用して USB デバイス情報を表示します。
$ prtconf usb, instance #0 hub, instance #2 device, instance #8 interface (driver not attached) printer (driver not attached) mouse, instance #14 device, instance #9 keyboard, instance #15 mouse, instance #16 storage, instance #7 disk (driver not attached) communications, instance #10 modem (driver not attached) data (driver not attached) storage, instance #0 disk (driver not attached) storage, instance #1 disk (driver not attached) |
prtconf コマンドの -D オプションを使用すれば、追加ドライバ情報を表示できます。この情報を使用して、SPARC システム上の USBA 1.0 フレームワークが使用しているポートおよびデバイスを確認できます。たとえば、次のように表示されます。
$ prtconf -D . . . SUNW,Sun-Blade-1500 . . . 1 pci, instance #0 (driver name: pcisch) isa, instance #0 (driver name: ebus) . . . 2 usb, instance #0 (driver name: ohci) usb, instance #1 (driver name: ohci) . . . 3 pci, instance #0 (driver name: pci_pci) 4 usb, instance #0 (driver name: usba10_ohci) usb, instance #1 (driver name: usba10_ohci) usb, instance #0 (driver name: usba10_ehci) storage, instance #9 (driver name: usba10_scsa2usb) disk, instance #9 (driver name: usb_sd) firewire, instance #0 (driver name: hci1394) . . . |
上の出力から、次の構成の特徴を確認できます。
PCI カードポートは、usb ノードの上に出力されている一連の pci ノード番号からわかります。
PCI カードポート (4) は、pci ノード 1 およびノード 3 という 2 つの階層になっています。これらのポートは、マザーボードと PCI カードの両方が使用するためです。オンボードポート (2) は、1 つの PCI ノード (1) として出力されています。これらのポートは、メインシステムバスに近い 1 つのハードウェアアーキテクチャ層であるためです。
デバイスノードに関連付けられたドライバの名前は、デバイスおよびそのデバイスが割り当てられているポートを使用しているフレームワークを示しています。(4) のうち、usba10 で始まるすべての USB インスタンスのドライバは、USBA 1.0 フレームワークがこれらのポートおよびポートに割り当てられているデバイスを管理していることを示しています。これらのポートだけが、ハイスピード USB 2.0 デバイスをサポートしています。
USB 大容量ストレージデバイスは、Solaris オペレーティングシステムが使用する他のすべてのデバイスと同様に、使用する前にフォーマットしてファイルシステムを作成する必要があります。USB 大容量ストレージデバイス (フロッピーディスクも含む) は、PCFS および UFS の両方のファイルシステムをサポートします。PCFS または UFS ファイルシステムを作成する前に、ディスクがフォーマットされていることを確認してください。
voldを無効にする方法については、「vold を使用しないで USB 大容量ストレージデバイスを使用できるように準備する方法」を参照してください。
(省略可能) USB フロッピーディスクデバイスをシステムに追加します。
USB デバイスをホットプラグする方法については、以下を参照してください。
(省略可能) フロッピーディスクデバイスを特定します。
たとえば、次のようになります。
# cd /dev/rdsk # devfsadm -C # ls -l c*0 | grep usb lrwxrwxrwx 1 root root 55 Mar 5 10:35 c2t0d0s0 -> ../../devices/pci@1f,0/usb@c,3/storage@3/disk@0,0:a,raw |
この例では、フロッピーディスクデバイスは c2t0d0s0 です。
フロッピーディスクをフロッピーディスクドライブに挿入します。
フロッピーディスクをフォーマットします。
% rmformat -Flong raw-device |
たとえば、次のようになります。
% rmformat -Flong /dev/rdsk/c2t0d0s0 |
ファイルシステムの種類を決定し、次のいずれかの作業を選択します。
PCFS ファイルシステムを作成します。
# mkfs -F pcfs -o nofdisk,size=size raw-device |
-size オプションを 512 バイトブロック単位で指定します。
次の例は、1.4M バイトのフロッピーディスクに PCFS ファイルシステムを作成する方法を示しています。
# mkfs -F pcfs -o nofdisk,size=2880 /dev/rdsk/c4t0d0s0 |
次の例は、100M バイトの Zip ドライブに UFS ファイルシステムを作成する方法を示しています。
# mkfs -F pcfs -o nofdisk,size=204800 /dev/rdsk/c5t0d0s0 |
このコマンドの実行には、数分かかることがあります。
UFS ファイルシステムを作成します。
# newfs raw-device |
たとえば、次のようになります。
# newfs /dev/rdsk/c4t0d0s0 |
フロッピーディスクの記憶容量は少ないので、UFS ファイルシステムのためにフロッピーディスクのかなりの容量が消費されます。
すべてのリムーバブル大容量ストレージデバイス (USB 大容量ストレージデバイスを含む) について、デバイスの別名を表示します。
$ eject -n . . . cdrom0 -> /vol/dev/rdsk/c0t6d0/audio_cd (Generic CD device) zip0 -> /vol/dev/rdsk/c1t0d0/zip100 (USB Zip device) zip1 -> /vol/dev/rdsk/c2t0d0/fat32 (USB Zip device) rmdisk0 -> /vol/dev/rdsk/c5t0d0/unnamed_rmdisk (Peerless, HD or floppy) rmdisk1 -> /vol/dev/rdsk/c4t0d0/clik40 (Generic USB storage) |
次のいずれかの方法を選択して、USB 大容量ストレージデバイスをマウントまたはマウント解除します。
USB デバイスを、汎用の USB ドライブから取り出します。
$ eject device-alias |
たとえば、次のようになります。
$ eject rmdisk0 |
デバイスのマウントが解除されていない場合、eject コマンドは、そのデバイスのマウント解除も行います。また、そのデバイスにアクセスするアプリケーションが実行されている場合は、そのアプリケーションを終了させます。
voldを無効にする方法については、「vold を使用しないで USB 大容量ストレージデバイスを使用できるように準備する方法」を参照してください。
スーパーユーザーになります。
(省略可能) フロッピーディスクデバイスを特定します。
たとえば、次のようになります。
# cd /dev/rdsk # devfsadm -C # ls -l c*0 | grep usb lrwxrwxrwx 1 root root 55 Mar 5 10:35 c2t0d0s0 -> ../../devices/pci@1f,0/usb@c,3/storage@3/disk@0,0:a,raw |
この例では、フロッピーディスクデバイスは c2t0d0s0 です。
次のいずれかの方法を選択して、USB 大容量ストレージデバイスをマウントまたはマウント解除します。
USB 大容量ストレージデバイスをマウントします。
# mount [ -F fstype ] block-device mount-point |
次の例は、UFS ファイルシステムを使用しているデバイスのマウント方法を示しています。
# mount /dev/dsk/c1t0d0s2 /mnt |
次の例は、PCFS ファイルシステムを使用していするデバイスのマウント方法を示しています。
# mount -F pcfs /dev/dsk/c1t0d0s0:c /mnt |
次の例は、読み取り専用の HSFS ファイルシステムを使用している CD のマウント方法を示しています。
# mount -F hsfs -o ro /dev/dsk/c1t0d0s2 /mnt |
USB 大容量ストレージデバイスをマウント解除します。
デバイス上のファイルシステムを使用しているユーザーがいないことを最初に確認してください。
たとえば、次のようになります。
# fuser -c -u /mnt # umount /mnt |
デバイスを取り出します。
# eject /dev/[r]dsk/cntndnsn |
たとえば、次のようになります。
# eject /dev/rdsk/c1t0d0s2 |
特定の種類の USB デバイスを無効にするには、対応するクライアントドライバを無効にします。たとえば、USB プリンタを無効にするには、そのプリンタを使用している usbprn ドライバを無効にします。usbprn を無効にしても、USB ストレージデバイスなどの他のデバイスには影響しません。
両方のフレームワークでデバイスタイプを無効にする必要があります。 一方のフレームワークだけでデバイスタイプを無効にすることはできません。 次の表に、USB デバイスタイプとそれに対応するドライバを示します。
デバイスの種類 |
無効にするドライバ |
---|---|
オーディオ |
usb_ac および usb_as |
HID (通常はキーボードとマウス) |
hid |
ストレージ |
scsa2usb |
プリンタ |
usbprn |
シリアル |
usbser_edge |
システムに接続されている USB デバイスのドライバを無効にすると、次のようなコンソールメッセージが表示されます。
usba10: WARNING: usba: no driver found for device name |
スーパーユーザーになります。
削除するドライバの別名を記録します。
# cp /etc/driver_aliases /etc/driver_aliases.orig |
無効にする USB ドライバの別名を特定します。
たとえば、次のようになります。
# grep usbprn /etc/driver_aliases usbprn "usbif,class7.1.1" usbprn "usbif,class7.1.2" |
ドライバの別名エントリを削除します。
たとえば、次のようになります。
# update_drv -d -i '"usbif,class7.1.1"' usbprn # update_drv -d -i '"usbif,class7.1.2"' usbprn |
システムをリブートします。
# init 6 |
システムの電源がオフのときに USB デバイスを取り外した場合には、次の手順を実行します。システムの電源が切断されているときに USB デバイスを取り外すと、存在しないデバイスへのリンクが残る場合があります。
スーパーユーザーになります。
そのデバイスにアクセスする可能性のあるアプリケーションをすべて閉じます。
特定の USB クラスの未使用のリンクを削除します。
たとえば、次のようになります。
# devfsadm -C -c audio |
または、関連するリンクをすべて削除します。
# devfsadm -C |
作業 |
説明 |
参照先 |
---|---|---|
USB 大容量ストレージデバイスを追加する |
vold を使用して USB 大容量ストレージデバイスを取り付ける | |
vold を使用しないで USB 大容量ストレージデバイスを取り付ける | ||
USB 大容量ストレージデバイスを取り外す |
vold を使用して USB 大容量ストレージデバイスを取り外す | |
vold を使用しないで USB 大容量ストレージデバイスを取り外す | ||
USB カメラを追加する |
USB カメラを追加して、デジタル画像にアクセスする |
デバイスのホットプラグとは、オペレーティングシステムをシャットダウンすることなくあるいはシステムの電源を切ることなく、デバイスを追加したり取り外したりすることを指します。USB デバイスはすべてホットプラグ可能です。
USB デバイスは、ホットプラグするとすぐにシステムのデバイス階層に表示されます (prtconf コマンドで確認可能)。また、デバイスが使用中でない限り、USB デバイスを取り外すとシステムのデバイス階層から消えます。
使用中の USB デバイスを取り外した場合、ホットプラグの動作は若干異なります。使用中の USB デバイスを取り外した場合、デバイスノードは残り、このデバイスを制御しているドライバはデバイス上のすべての動作を停止します。それ以降、このデバイスに発行される新しい入出力動作はエラーで戻されます。
このような場合、システムは元のデバイスを接続するようにユーザーにプロンプトを表示します。デバイスが使用できない場合は、アプリケーションを停止してください。数秒後に、ポートが再び使用できるようになります。
動作中の、つまり開いているデバイスを削除すると、データの整合性が損なわれる可能性があります。デバイスを取り外す前には、必ずデバイスを閉じるようにしてください。ただし、コンソールキーボードとマウスは例外で、動作中でも移動することができます。
次の手順は、vold を使用して USB デバイスを追加する方法を示します。
USB 大容量ストレージデバイスを接続します。
vold を使用して新しいデバイスがあるかどうか調べます。
# touch /etc/vold.conf |
vold を再起動します。
# pkill -HUP vold |
デバイスが取り付けられていることを確認します。
$ ls device-alias |
ボリューム管理デバイス名の詳細については、第1章「リムーバブルメディアの管理 (概要)」を参照してください。
次の手順は、vold を使用しないで USB デバイスを追加する方法を示します。
必要に応じて、vold を無効にする方法について、「vold を使用しないで USB 大容量ストレージデバイスを使用できるように準備する方法」を参照してください。
USB 大容量ストレージデバイスを接続します。
USB デバイスが追加されたことを確認します。
非 USB ストレージデバイスのデバイスリンクの間にあるかもしれない USB ディスクのデバイスリンクを、次のようにして確認します。
$ cd /dev/rdsk $ ls -l c*0 | grep usb lrwxrwxrwx 1 root root 67 Apr 30 15:12 c1t0d0s0 -> ../../devices/pci@1f,0/pci@5/pci@0/usb@8,2/storage@1/disk@0,0:a,raw |
次の手順では、vold を使用して USB デバイスを取り外す例として、Zip ドライブを使用しています。
そのデバイスを使用しているアプリケーションを実行中の場合は、そのアプリケーションを停止します。
デバイスをマウント解除します。
たとえば、次のようになります。
$ volrmmount -e zip0 |
デバイスを取り出します。
たとえば、次のようになります。
$ eject zip0 |
スーパーユーザーになり、vold を停止します。
# /etc/init.d/volmgt stop |
USB 大容量ストレージデバイスを取り外します。
vold を開始します。
# /etc/init.d/volmgt start |
次の手順は、vold を使用しないで USB デバイスを取り外す方法を示します。
必要に応じて、vold を無効にする方法について、「vold を使用しないで USB 大容量ストレージデバイスを使用できるように準備する方法」を参照してください。
スーパーユーザーになります。
そのデバイスを使用しているアプリケーションを実行中の場合は、そのアプリケーションを停止します。
USB デバイスを取り外します。
USB カメラを追加するには、次の手順を実行します。
スーパーユーザーになります。
USB カメラを差し込み、電源をオンにします。
システムによって、カメラ用の論理デバイスが作成されます。カメラが差し込まれると、/var/adm/messages ファイルにメッセージが出力され、デバイスの接続が確認されます。カメラは、システムのストレージデバイスとみなされます。
/var/adm/messages ファイルの出力を確認します。
出力表示を確認すると、どの論理デバイスが作成されたかを確認でき、そのデバイスを使用してイメージにアクセスできます。出力表示は次のようになります。
# more /var/adm/messages Jul 15 09:53:35 buffy usba: [ID 349649 kern.info] OLYMPUS, C-3040ZOOM, 000153719068 Jul 15 09:53:35 buffy genunix: [ID 936769 kern.info] scsa2usb1 is /pci@0,0/pci925,1234@7,2/storage@2 Jul 15 09:53:36 buffy scsi: [ID 193665 kern.info] sd3 at scsa2usb1: target 0 lun 0 |
次のコマンドを実行して、デバイスをマウント可能な /dev/dsk リンクエントリに関連付けます。
# ls -l /dev/dsk/c*0 | grep /pci@0,0/pci925,1234@7,2/storage@2 lrwxrwxrwx 1 root root 58 Jul 15 2002 c3t0d0p0 -> ../../devices/pci@0,0/pci925,1234@7,2/storage@2/disk@0,0:a |
USB カメラファイルシステムをマウントします。
ほとんどの場合、カメラのファイルシステムは PCFS ファイルシステムです。作成されたデバイス上にファイルシステムをマウントするために、ディスクを表すスライスを指定する必要があります。スライスは通常、SPARC システムでは s0、x86 システムでは p0 です。
たとえば、x86 システムにファイルシステムをマウントするには、次のコマンドを実行します。
# mount -F pcfs /dev/dsk/c3t0d0p0:c /mnt |
SPARC システムにファイルシステムをマウントするには、次のコマンドを実行します。
# mount -F pcfs /dev/dsk/c3t0d0s0:c /mnt |
ファイルシステムのマウントについては、第17章「ファイルシステムのマウントとマウント解除 (手順)」を参照してください。
異なる PCFS ファイルシステムのマウントの詳細については、mount_pcfs(1M) のマニュアルページを参照してください。
イメージファイルが使用可能であることを確認します。
たとえば、次のようになります。
# ls /mnt/DCIM/100OLYMP/ P7220001.JPG* P7220003.JPG* P7220005.JPG* P7220002.JPG* P7220004.JPG* P7220006.JPG* |
USB カメラが作成したイメージファイルを表示します。
# /usr/dt/bin/sdtimage P7220001.JPG |
カメラを切り離す前に、ファイルシステムをマウント解除します。
たとえば、次のようになります。
# umount /mnt |
カメラの電源をオフにし、切り離します。
作業 |
説明 |
参照先 |
---|---|---|
USB オーディオデバイスを追加する |
USB マイクおよびスピーカを追加する | |
システムの主オーディオデバイスを特定する |
システムの主オーディオデバイスを特定する | |
主 USB オーディオデバイスを変更する |
USB オーディオデバイスを取り外したり変更したりする場合、特定の 1 つのオーディオデバイスを主オーディオデバイスにすることがある | |
使用していない USB デバイスリンクを削除する |
システムの電源がオフのときに USB オーディオデバイスを取り外すと、 /dev/audio デバイスが、存在しない /dev/sound/* デバイスを指したままになることがある | |
USB オーディオに関する問題の障害追跡 |
USB スピーカからサウンドが出力されない場合は、この節を参照する |
このSolaris リリースでは、2 つの連携するドライバ、usb_ac および usb_as の実装によって、USB オーディオサポートを提供しています。オーディオコントロールドライバである usb_ac は USBA (Solaris USB Architecture) 準拠のクライアントドライバで、ユーザーアプリケーションのインタフェースを制御します。オーディオストリーミングドライバである usb_as は、再生中および録音中にオーディオデータメッセージを処理します。また、サンプル周波数と精度を設定し、usb_ac ドライバからの要求を符号化します。どちらのドライバも、USB オーディオクラス 1.0 仕様に準拠しています。
一部のオーディオデバイスでは、ソフトウェアが制御している音量を設定できます。この機能を管理するために、STREAMS モジュールの usb_ah が HID ドライバの先頭に置かれます。
Solaris では、再生専用、録音専用、録音および再生用の USB オーディオデバイスをサポートします。USB オーディオデバイスのホットプラグがサポートされます。
USB オーディオデバイスは、USB コネクタを備えた SPARC Ultra および x86 プラットフォームでサポートされます。
Solaris 8 10/01、Solaris 8 2/02、Solaris 9 のいずれかのリリース上で再生または録音するには、USB オーディオデバイスが 44100 Hz または 48000 Hz の固定サンプリングレートをサポートしている必要があります。
サポートされているオーディオデータ形式をすべて確認するには、usb_ac(7D) のマニュアルページを参照してください。
主オーディオデバイスは、/dev/audio です。次のコマンドを使用して、/dev/audio が USB オーディオを指しているかを確認できます。
% mixerctl Device /dev/audioctl: Name = USB Audio Version = 1.0 Config = external Audio mixer for /dev/audioctl is enabled |
USB オーディオデバイスを接続した後、audioplay コマンドおよび audiorecord コマンドを使用し、 /dev/sound/N デバイスリンクを介してデバイスにアクセスします。
/dev/audio および /dev/sound/N デバイスは、スピーカ、マイク、またはコンボデバイスを参照できます。不正なデバイスタイプを参照すると、そのコマンドは失敗します。たとえば、マイクに対して audioplay を使用しようとすると、そのコマンドは失敗します。
ほとんどの Sun オーディオアプリケーションでは、特定のデフォルトオーディオデバイスを選択できます。たとえば、audioplay や audiorecord の場合には、AUDIODEV シェル変数を設定するか、-d オプションを指定します。ただし、/dev/audio をオーディオファイルとしてハードコードしているサードパーティ製のアプリケーションでは AUDIODEV は動作しません。
USB オーディオデバイスを差し込むと、/dev/audio が使用中でない限り、自動的にそれが主オーディオデバイス /dev/audio になります。オンボードのオーディオから USB オーディオへ、および USB オーディオからオンボードのオーディオへ /dev/audio を変更する方法については、「主 USB オーディオデバイスを変更する方法」 および usb_ac(7D) のマニュアルページを参照してください。
USB オーディオデバイスがシステムに差し込まれると、それが主オーディオデバイス /dev/audio になります。そのデバイスは、システムをリブートした後でも、主オーディオデバイスのままです。USB オーディオデバイスが追加で差し込まれた場合、最後に差し込まれたデバイスが主オーディオデバイスになります。
USB オーディオデバイスに関する問題の障害追跡については、usb_ac(7D) のマニュアルページを参照してください。
USB オーディオデバイスを追加するには、次の手順を実行します。
USB スピーカを差し込みます。
主オーディオデバイス /dev/audio は、USB スピーカを指します。
% ls -l /dev/audio lrwxrwxrwx 1 root root 10 Feb 13 08:46 /dev/audio -> usb/audio0 |
(省略可能) スピーカを取り外します。その後、再度差し込みます。
スピーカを取り外すと、/dev/audio デバイスがオンボードのオーディオに戻ります。
% ls -l /dev/audio lrwxrwxrwx 1 root root 7 Feb 13 08:47 /dev/audio -> sound/0 |
USB マイクを追加します。
% ls -l /dev/audio lrwxrwxrwx 1 root root 10 Feb 13 08:54 /dev/audio -> usb/audio1 |
この手順は、すでに USB オーディオデバイスが接続されていることを前提としています。
システムの新しいオーディオリンクを調べます。
たとえば、次のようになります。
% ls -lt /dev/audio* lrwxrwxrwx 1 root root 7 Jul 23 15:46 /dev/audio -> usb/audio0 lrwxrwxrwx 1 root root 10 Jul 23 15:46 /dev/audioctl -> usb/audioctl0/ % ls -lt /dev/sound/* lrwxrwxrwx 1 root root 74 Jul 23 15:46 /dev/sound/1 -> ../../devices/pci@1f,4000/usb@5/hub@1/device@3/sound-control@0:sound,a... lrwxrwxrwx 1 root root 77 Jul 23 15:46 /dev/sound/1ctl -> ../../devices/pci@1f,4000/usb@5/hub@1/device@3/sound-control@0:sound,a... lrwxrwxrwx 1 root other 66 Jul 23 14:21 /dev/sound/0 -> ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audio lrwxrwxrwx 1 root other 69 Jul 23 14:21 /dev/sound/0ctl -> ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audioctl % |
主オーディオデバイス /dev/audio が、新しく差し込まれた USB オーディオデバイスの /dev/usb/audio0 を指していることがわかります。
prtconf コマンドを使用して USB デバイス情報を参照して、システム上の USB オーディオデバイスを調べることもできます。
% prtconf . . . usb, instance #0 hub, instance #0 mouse, instance #0 keyboard, instance #1 device, instance #0 sound-control, instance #0 sound, instance #0 input, instance #0 . . . |
オンボードのオーディオデバイスを主オーディオデバイスにするには、USB オーディオデバイスを取り外してください。すると、/dev/audio リンクは /dev/sound/0 エントリを指すはずです。/dev/sound/0 エントリが主オーディオデバイスでない場合は、システムをシャットダウンして boot -r コマンドを実行するか、devfsadm -i コマンドをスーパーユーザーとして実行してください。
USB オーディオデバイスを主オーディオデバイスにするには、USB オーディオデバイスを差し込んだあと、リンクを確認してください。
この節では、USB オーディオデバイス問題の障害追跡の方法を説明します。
ドライバを適用し、音量も上げているのに、USB スピーカから音が出ないことがあります。デバイスをホットプラグしてもこの動作が変化しないことがあります。
この問題を解決するには、USB スピーカの電源を再投入します。
オーディオデバイスを操作するときは、オーディオデバイスの所有権に関する、次に挙げる点に注意してください。
USB オーディオデバイスを差し込む時にコンソールからログインしていると、コンソールが /dev/* エントリの所有者になります。つまり、コンソールでログインしている限り、オーディオデバイスを使用できることになります。
USB オーディオデバイスを差し込む時にコンソールにログインしていない場合、root がそのデバイスの所有者になります。ただし、その後にコンソールにログインして USB オーディオデバイスにアクセスしようとすると、デバイスの所有権はコンソールに変更されます。詳細については、logindevperm(4) のマニュアルページを参照してください。
リモートから rlogin コマンドでログインして USB オーディオデバイスにアクセスしようとした場合は、所有権は変更されません。たとえば、権限のないユーザーが、他の人の所有するマイクを通して行われる会話を聞くことはできません。
作業 |
説明 |
参照先 |
---|---|---|
USB バス情報を表示する |
USB デバイスおよびバスについての情報を表示する | |
USB デバイスの構成を解除する |
システムに物理的に接続されている USB デバイスを論理的に構成解除する | |
USB デバイスを構成する |
以前に構成を解除した USB デバイスを構成する | |
論理的に USB デバイスの接続を解除する |
物理的にシステムの近くにいないときには、USB デバイスを論理的に切り離すことができる | |
論理的に USB デバイスに接続する |
以前に論理的に接続解除または構成解除した USB デバイスを論理的に接続する | |
USB デバイスのサブツリーの接続を解除する |
ハブの下位階層 (または下位のツリー) である USB デバイスサブツリーの接続を解除する | |
USB デバイスをリセットする |
USB デバイスをリセットして、デバイスを論理的に削除し、再作成する | |
複数の構成を持つ USB デバイスのデフォルト構成を変更する |
複数の構成を持つ USB デバイスのデフォルト構成を変更する |
cfgadm コマンドを使用せずに稼働中のシステムから USB デバイスを追加または削除することができます。ただし、USB デバイスは、デバイスを物理的に削除しなくても「論理的に」ホットプラグすることができます。 この方法は、リモートで作業中に機能していない USB デバイスを無効にしたりリセットしたりする必要がある場合に便利です。cfgadm コマンドを使うと、メーカーや製品情報を含む USB デバイスツリーを表示することもできます。
cfgadm コマンドは接続点についての情報を表示します。接続点とは、動的再構成を行うことができるシステム内の特定の場所のことです。接続点は、次の要素から構成されています。
占有装置 (occupant)。USB デバイスなどの、システムに構成可能なハードウェアリソースのことです。
受容体 (receptacle)。USB ポートなどの、占有装置を受け入れる場所のことです。
接続点は、論理と物理の両方の接続点 ID (Ap_Id) で表現されます。物理 Ap_Id は接続点の物理的なパス名です。論理 Ap_Id は物理 Ap_Id に代わるユーザーに理解しやすい ID です。Ap_Id の詳細については、cfgadm_usb(1M) のマニュアルページを参照してください。
cfgadm コマンドを使用すると、USB デバイスステータス情報を取得できます。
受容体の状態 |
説明 |
---|---|
empty/unconfigured |
デバイスが物理的に接続されていない |
disconnected/unconfigured |
デバイスは物理的に接続されているかもしれないが、論理的に接続解除されており利用不可 |
connected/unconfigured |
デバイスは論理的に接続されているが利用不可。このデバイスは、 prtconf の出力に表示される |
connected/configured |
デバイスは接続されており利用可能 |
次の節では、ソフトウェアから cfgadm コマンドを使用して USB デバイスにホットプラグする方法について説明します。次のすべてのサンプル USB デバイス情報は、関連した情報に焦点を合わせるために一部省略されています。
cfgadm コマンドを使用して USB バス情報を表示します。たとえば、次のようになります。
% cfgadm Ap_Id Type Receptacle Occupant Condition usb0/4.5 usb-hub connected configured ok usb0/4.5.1 usb-device connected configured ok usb0/4.5.2 usb-printer connected configured ok usb0/4.5.3 usb-mouse connected configured ok usb0/4.5.4 usb-device connected configured ok usb0/4.5.5 usb-storage connected configured ok usb0/4.5.6 usb-communi connected configured ok usb0/4.5.7 unknown empty unconfigured ok usb0/4.6 usb-storage connected configured ok usb0/4.7 usb-storage connected configured ok |
前の例で usb0/4.5.1 は、第 2 レベルの外部ハブのポート 1 に接続されているデバイスを識別します。この第 2 レベルハブは第 1 レベルの外部ハブのポート 5 に接続されており、また第 1 レベルのハブは最初の USB コントローラのルートハブであるポート 4 に接続されています。
次の cfgadm コマンドを使用して、特定の USB デバイス情報を表示します。たとえば、次のようになります。
% cfgadm -l -s "cols=ap_id:info" Ap_Id Information usb0/4.5.1 Mfg: Inside Out Networks Product: Edgeport/421 NConfigs: 1 Config: 0 : ... usb0/4.5.2 Mfg: undef> Product: undef> NConfigs: 1 Config: 0 ... usb0/4.5.3 Mfg: Mitsumi Product: Apple USB Mouse NConfigs: 1 Config: 0 ... usb0/4.5.4 Mfg: NMB Product: NMB USB KB/PS2 M NConfigs: 1 Config: 0 usb0/4.5.5 Mfg: Hagiwara Sys-Com Product: SmartMedia R/W NConfigs: 1 Config: 0 : ... usb0/4.5.6 Mfg: 3Com Inc. Product: U.S.Robotics 56000 Voice USB Modem NConfigs: 2 ... usb0/4.5.7 usb0/4.6 Mfg: Iomega Product: USB Zip 250 NConfigs: 1 Config: 0 : Default usb0/4.7 Mfg: Iomega Product: USB Zip 100 NConfigs: 1 Config: 0 : Default |
prtconf コマンドを使用して USB 構成情報を表示する例については、「USB デバイス情報を表示する方法 (prtconf)」を参照してください。
システムに物理的に接続されている USB デバイスの構成を解除することはできますが、ドライバを適用することはできません。USB デバイスの構成を解除しても、そのデバイスは prtconf 出力に表示されることに注意してください。
スーパーユーザーになります。
USB デバイスの構成を解除します。
# cfgadm -c unconfigure usb0/4.7 Unconfigure the device: /devices/pci@8,700000/usb@5,3/hub@4:4.7 This operation will suspend activity on the USB device Continue (yes/no)? y |
デバイスの構成が解除されていることを確認します。
# cfgadm Ap_Id Type Receptacle Occupant Condition usb0/4.5 usb-hub connected configured ok usb0/4.5.1 usb-device connected configured ok usb0/4.5.2 usb-printer connected configured ok usb0/4.5.3 usb-mouse connected configured ok usb0/4.5.4 usb-device connected configured ok usb0/4.5.5 usb-storage connected configured ok usb0/4.5.6 usb-communi connected configured ok usb0/4.5.7 unknown empty unconfigured ok usb0/4.6 usb-storage connected configured ok usb0/4.7 usb-storage connected unconfigured ok |
スーパーユーザーになります。
# cfgadm -c configure usb0/4.7 |
USB デバイスが構成されていることを確認します。
# cfgadm usb0/4.7 Ap_Id Type Receptacle Occupant Condition usb0/4.7 usb-storage connected configured ok |
システムから USB デバイスを取り外し、prtconf 出力を削除したいが、物理的にシステムの近くにいない場合、USB デバイスの接続を論理的に解除できます。デバイスが物理的に接続されているが、論理的に接続解除されている場合には、そのデバイスは使用できず、システムにも表示されません。
スーパーユーザーになります。
USB デバイスの接続を解除します。
# cfgadm -c disconnect -y usb0/4.7 |
デバイスが接続解除されていることを確認します。
# cfgadm usb0/4.7 Ap_Id Type Receptacle Occupant Condition usb0/4.7 unknown disconnected unconfigured ok |
次の手順を使用して、以前に論理的に接続解除または構成解除された USB デバイスを論理的に接続します。
スーパーユーザーになります。
# cfgadm -c configure usb0/4.7 |
デバイスが接続されていることを確認します。
# cfgadm usb0/4.7 Ap_Id Type Receptacle Occupant Condition usb0/4.7 usb-storage connected configured ok |
デバイスを利用できるようになり、システムにも表示されるようになります。
次の手順を使用して、USB デバイスのサブツリーを接続解除します。サブツリーは、ハブの下位デバイスの階層 (ツリー) です。
スーパーユーザーになります。
# cfgadm -c disconnect -y usb0/4 |
USB デバイスサブツリーの接続解除を確認します。
# cfgadm usb0/4 Ap_Id Type Receptacle Occupant Condition usb0/4 unknown disconnected unconfigured ok |
USB デバイスでエラーが発生した場合は、cfgadm コマンドを使ってデバイスをリセットします。このコマンドを使うと、デバイスを論理的に削除し、再作成することができます。
スーパーユーザーになります。
デバイスをリセットします。
# cfgadm -x usb_reset -y usb0/4.7 |
デバイスが接続されていることを確認します。
# cfgadm usb0/4.7 Ap_Id Type Receptacle Occupant Condition usb0/4.7 usb-storage connected configured ok |
複数の構成を持つ USB デバイスを操作するときには、次の点を考慮してください。
USB デバイスの構成には、デバイス自体がどのようにオペレーティングシステムに表示されるかを定義します。この構成方法は、前の節で cfgadm について説明したシステムデバイスの構成方法とは異なります。
一部の USB デバイスでは、複数の構成がサポートされますが、一度に有効にできる構成は 1 つだけです。
複数の構成を持つデバイスを特定するには、cfgadm -lv の出力を確認します。Nconfigs は、1 より大きい値になります。
デフォルトの USB 構成は、configuration 1 です。現在の構成は、cfgadm -lv 出力の Config に反映されます。
デフォルトの構成を変更しても、同じポートに再接続している間は、デバイスのリブート、ホットリムーブ、および再構成を行なっても、構成の変更は適用されません。
デバイスが使用中でないことを確認します。
デフォルトの USB 構成を変更します。
たとえば、次のようになります。
# cfgadm -x usb_config -o config=2 usb0/4 Setting the device: /devices/pci@1f,0/usb@c,3:4 to USB configuration 2 This operation will suspend activity on the USB device Continue (yes/no)? yes |
デバイスの変更を確認します。
たとえば、次のようになります。
# cfgadm -lv usb0/4 Ap_Id Receptacle Occupant Condition Information When Type Busy Phys_Id usb0/4 connected unconfigured ok Mfg: Sun 2000 Product: USB-B0B0 aka Robotech With 6 EPPS High Clk Mode NConfigs: 7 Config: 2 : EVAL Board Setup unavailable usb-device n /devices/pci@1f,0/usb@c,3:4 |
Config が「2」になります。