複合デバイスとは、複数のインタフェースをサポートするデバイスのことです。複合デバイスには、インタフェースごとの互換名リストがあります。この互換名リストにより、使用可能なドライバの中で最適なものがインタフェースにバインドされます。もっとも汎用的なマルチインタフェースエントリは、usb,device です。
USB オーディオ複合デバイスの場合、互換名は次のようになります。
1. 'usb471,101.100' Vendor 471, product 101, revision 100 2. 'usb471,101' Vendor 471, product 101 3. 'usb,device' Generic USB device
名前 usb,device は、任意の USB デバイス全体を表す互換名です。USB デバイス全体を要求したドライバがほかに存在しなければ、usb_mid(7D) ドライバ (USB マルチインタフェースドライバ) が usb,device デバイスノードにバインドします。usb_mid ドライバは、物理デバイスのインタフェースごとに子デバイスノードを 1 つずつ作成します。さらに、usb_mid ドライバは各インタフェースの一連の互換名も生成します。生成されたそれらの互換名はどれも usbif で始まります。システムはその後、生成されたそれらの互換名を使用して各インタフェースの最適なドライバを検索します。このようにして、1 つの物理デバイスの各インタフェースにそれぞれ異なるドライバをバインドすることが可能となります。
たとえば、usb_mid ドライバは、マルチインタフェースのオーディオデバイスにその usb,device ノード名を介してバインドします。続いて usb_mid ドライバは、インタフェース固有のデバイスノードを作成します。これらのインタフェース固有のデバイスノードはそれぞれ、独自の互換名リストを持ちます。オーディオ制御インタフェースノードの互換名リストは、次の例に示すようなリストになります。
使用例 20-3 USB オーディオ互換デバイス名1. 'usbif471,101.100.config1.0' Vend 471, prod 101, rev 100, cnfg 1, iface 0 2. 'usbif471,101.config1.0' Vend 471, product 101, config 1, interface 0 3. 'usbif471,class1.1.0' Vend 471, class 1, subclass 1, protocol 0 4. 'usbif471,class1.1' Vend 471, class 1, subclass 1 5. 'usbif471,class1' Vend 471, class 1 6. 'usbif,class1.1.0' Class 1, subclass 1, protocol 0 7. 'usbif,class1.1' Class 1, subclass 1 8. 'usbif,class1' Class 1
vendor_model_audio_usb という名前のベンダー固有、デバイス固有のクライアントドライバを、Example 20–3 に示したベンダー固有、デバイス固有で構成 1、インタフェース 0 のインタフェース互換名にバインドするには、次のコマンドを使用します。
add_drv -n -i '"usbif471,101.config1.0"' vendor_model_audio_usb
audio_class_usb_if_driver という名前のクライアントドライバを、Example 20–3 に示したより汎用的なクラス 1、サブクラス 1 のインタフェース互換名にバインドするには、次のコマンドを使用します。
add_drv -n -i '"usbif,class1.1"' audio_class_usb_if_driver
デバイスとそのドライバの一覧を表示するには、prtconf –D コマンドを使用します。次の prtconf –D コマンドの例から、usb_mid ドライバが audio デバイスを管理していることがわかります。usb_mid ドライバが audio デバイスをいくつかのインタフェースに分割しています。audio デバイス名の下で各インタフェースがインデントされています。prtconf –D コマンドのインデントされたリスト内のインタフェースごとに、そのインタフェースを管理するドライバが表示されています。
audio, instance #0 (driver name: usb_mid) sound-control, instance #2 (driver name: usb_ac) sound, instance #2 (driver name: usb_as) input, instance #8 (driver name: hid)