質問: usbモジュールに関連付けられているモジュールを見つけますか? usbデバイスに使用されているドライバーを特定する方法をお勧めしますか? lspci -kコマンドに相当するusbの一種。
回答: カーネルドライバーの検索被害者のデバイス$ lsusb bus 010 device 002: id 046d:c01e logitech, inc. mx518 optical mouse bus 010 device 003: id 051d:0002 american power conversion uninterruptible power supply apc upsに使用されているドライバーを確認します。この質問には2つの回答があることに注意してください:カーネルが使用するドライバーと現在使用中のドライバー。ユーザースペースはカーネルに別のドライバーを使用するように指示できます(私のapc upsの場合はnutが持っています)。方法1:usbutilsを使用する(簡単)usbutilsパッケージ(少なくともdebianでは)には、usb-devicesというスクリプトが含まれています。実行すると、使用されているドライバーなど、システム上のデバイスに関する情報が出力されます。$ usb-devices ⋮ t: bus=10 lev=01 prnt=01 port=01 cnt=02 dev#= 3 spd=1.5 mxch= 0 d: ver= 1.10 cls=00(>ifc ) sub=00 prot=00 mxps= 8 #cfgs= 1 p: vendor=051d prodid=0002 rev=01.06 s: manufacturer=american power conversion s: product=back-ups rs 1500 fw:8.g9 .d usb fw:g9 s: serialnumber=xxxxxxxxxxxx c: #ifs= 1 cfg#= 1 atr=a0 mxpwr=24ma i: if#= 0 alt= 0 #eps= 1 cls=03(hid ) sub=00 prot=00 driver=usbfs ⋮ これは、デフォルトのドライバーではなく、現在のドライバーをリストすることに注意してください。デフォルトのものを見つける方法はありません。方法2:debugfsを使用する(ルートが必要)debugfsがマウントされている場合、カーネルはusb-devicesが/sys/kernel/debug/usb/devicesに出力するのと同じ形式でファイルを維持します。 lessなどで表示できます。debugfsインターフェースは安定していないため、異なるバージョンのカーネルが異なるフォーマットで出力されるか、ファイルが完全に欠落している場合があります。ここでも、デフォルトではなく、現在のドライバのみが表示されます。方法3:基本的なユーティリティのみを使用して/ sysを直接読み取る(スクリプトまたは回復に最適)あなたは/sysから情報を得ることができますが、lspciよりも痛いと思います。これらの/sysインターフェースは適度に安定している必要があるため、シェルスクリプトを作成している場合は、おそらくこれがその方法です。最初は、lsusbは1からデバイスをカウントするようです。/sysは0からカウントされます。したがって、10-2は、apc ups lsusbがバス10、デバイス3として提供する場所を見つけるための良い推測です。マッピングが機能しなくなったとき—sysfsはデバイス番号がそうでない場合でも番号を再利用します。 devnumファイルの内容は、lsusbによって指定されたデバイス番号と一致するため、次のようなことができます。$ grep -l '^3$' /sys/bus/usb/devices/10-*/devnum # the ^ and $ to prevent also matching 13, 31, etc. /sys/bus/usb/devices/10-2/devnum したがって、この場合は間違いなく10-2です。$ cd /sys/bus/usb/devices/10-2 $ ls 10-2:1.0 bdeviceclass bmaxpower descriptors ep_00 maxchild remove urbnum authorized bdeviceprotocol bnumconfigurations dev idproduct power serial version avoid_reset_quirk bdevicesubclass bnuminterfaces devnum idvendor product speed bcddevice bmattributes busnum devpath ltm_capable quirks subsystem bconfigurationvalue bmaxpacketsize0 configuration driver manufacturer removable uevent いくつかのファイルをcatingすることで、これが正しいデバイスであることを確認できます。$ cat idvendor idproduct manufacturer product 051d 0002 american power conversion back-ups rs 1500 fw:8.g9 .d usb fw:g9 10-2:1.0を見ると(:1は「構成」であり、.0はインターフェイスです。1つのusbデバイスで複数の処理を実行でき、複数のドライバを使用できます。lsusb -vはこれら)、modaliasファイルとドライバーのシンボリックリンクがあります:$ cat 10-2\:1.0/modalias usb:v051dp0002d0106dc00dsc00dp00ic03isc00ip00in00 $ readlink driver ../../../../../../bus/usb/drivers/usbfs したがって、現在のドライバーはusbfsです。 modaliasについてmodinfoを尋ねると、デフォルトのドライバーを見つけることができます。$ /sbin/modinfo `cat 10-2\:1.0/modalias` filename: /lib/modules/3.6-trunk-amd64/kernel/drivers/hid/usbhid/usbhid.ko license: gpl description: usb hid core driver author: jiri kosina author: vojtech pavlik author: andreas gal alias: usb:v*p*d*dc*dsc*dp*ic03isc*ip*in* depends: hid,usbcore intree: y vermagic: 3.6-trunk-amd64 smp mod_unload modversions parm: mousepoll:polling interval of mice (uint) parm: ignoreled:autosuspend with active leds (uint) parm: quirks:add/modify usb hid quirks by specifying quirks=vendorid:productid:quirks where vendorid, productid, and quirks are all in 0x-prefixed hex (array of charp) したがって、apc upsはデフォルトでhidドライバーを使用しますが、これは実際に正しいことです。そして現在はusbfsを使用していますが、これはnutのusbhid-upsが監視しているためです。ユーザースペース(usbfs)ドライバーについてはどうですか?ドライバーがusbfsの場合、それは基本的にユーザースペース(非カーネル)プログラムがドライバーとして機能していることを意味します。それがどのプログラムであるかを見つけるにはrootが必要で(プログラムがユーザーとして実行されていない限り)、かなり簡単です。デバイスファイルを開いているプログラムはどれでも。私たちの「犠牲者」デバイスはバス10、デバイス3であることはわかっています。したがって、デバイスファイルは/dev/bus/usb/010/003(少なくとも最新のdebianでは)であり、lsofが答えを提供します。# lsof /dev/bus/usb/010/003 command pid user fd type device size/off node name usbhid-up 4951 nut 4u chr 189,1154 0t0 8332 /dev/bus/usb/010/003 そして実際、そのusbhid-upsは期待どおりです(lsofはレイアウトに合うようにコマンド名を切り捨てました。フルネームが必要な場合は、ps 4951を使用して取得できます。あるいは、いくつかのlsof出力フォーマットオプションを使用できます)。 。