bash-2.05$ cat /proc/bus/usb/devices T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc=217/900 us (24%), #Int= 2, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB OHCI Root Hub S: SerialNumber=fe000000 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0d3d ProdID=0001 Rev= 0.01 S: Product=USBPS2 C:* #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=keyboard E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms I: If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=hid E: Ad=82(I) Atr=03(Int.) MxPS= 5 Ivl=10ms bash-2.05$
「T:」で始まる行から次の「T:」で始まる行の直前まで(無い場合は末尾まで)が1つのUSB機器の情報です。最初の1つはUSBルートハブと呼ばれる内部的に存在するものなので、接続したUSB機器の情報は2つ目の「T:」で始まる行からになります。上記の例から該当する部分のみを以下に示します。
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0d3d ProdID=0001 Rev= 0.01 S: Product=USBPS2 C:* #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=keyboard E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms I: If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=hid E: Ad=82(I) Atr=03(Int.) MxPS= 5 Ivl=10ms
「I:」で始まる行から次の「I:」で始まる行の直前まで(無い場合は末尾まで)がキーボードやマウスといった個別の機能の情報になります。
Clsがクラス、Subがサブクラス、Protがプロトコルの番号を示しています。
クラスはHID(キーボードやマウスなど)やマスストレージ(USBメモリやCD-ROM、HDDなど)など種類によって基本的に決められており、サブクラスやプロトコルも合わせて見ることで、キーボードなのか、マウスなのかなどが判るようになっています。(古いUSB機器は例外が多いのですが。)
以下に先ほどの例から該当する部分のみを抜き出してみます。
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=keyboard E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
I: If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=hid E: Ad=82(I) Atr=03(Int.) MxPS= 5 Ivl=10ms
この例ではクラスが3、サブクラスが1、プロトコルが1なのでキーボード、そしてクラスが3、サブクラスが1、プロトコルが2なのでマウスの機能が含まれていると判ります。このような複数の機能を持つUSB機器の場合、cfu1-driverで使用しているUSB Managerは最初に見つかった機能のドライバしか割り当ててくれません。
このような場合は、USB機器ごとに持っているベンダーID(製造元の会社ごとに割り当てられた番号)とプロダクトID(その会社の製品ごとに割り当てられた番号)に対応するドライバを割り当てるようにUSB Managerの設定ファイルに追記する必要があります。
ベンダーID及びプロダクトIDは「P:」で始まる行を見れば判ります。
VendorがベンダーID、ProdIDがプロダクトIDです。
以下に先ほどの例で該当する箇所を抜き出してみます。
P: Vendor=0d3d ProdID=0001 Rev= 0.01
この例ではベンダーIDが0d3d、プロダクトIDが0001だと判ります。
### PS/2 Keyboard & Mouse USB convert adapter vendor 0x0d3d product 0x0001 script mouse module input , hid , keybdev , mousedev , usbmouse
先頭の1行目はコメントです。
vendorの後、0xに続けてベンダーIDを、同じようにproductの後、0xに続けてプロダクトIDを記述します。続くscript mouseと、module input…の部分は、キーボードとマウスで必要になる手続き(script)とドライバ(module)を記述しています。これは元々書いてあるKEYBOARD、MOUSEの場合の記述から、必要な部分を転記しているだけです。
以下、参考までにusbmgr.confのKEYBOARDとMOUSEの部分を記載しておきます。
### KEYBOARD class 0x3 subclass 0x1 protocol 0x1 module input , hid , keybdev ### MOUSE class 0x3 subclass 0x1 protocol 0x2 script mouse module input , mousedev , usbmouse