ベンダーと製品 ID 以外にも、どのドライバーが選択されるかに影響を与えるパラメーターが多数あります。バージョン番号、デバイス クラス、サブクラス、およびプロトコルと、インターフェイス クラス、サブクラス、およびプロトコルがあります。カーネルはデバイスからそれらすべてを読み取り、次のようなすべてを含む文字列を作成します (例は私のデバイスであり、あなたのデバイスではありません)。
usb:v15A9p0004d0001dc00dsc00dp00icFFiscFFipFF
次に、その文字列が modprobe に渡され、モジュール自体で見つかった文字列 (ワイルドカードを使用) と照合されます。特定のモジュールで実行すると、そのモジュールの一致ルールのリストを表示できますmodinfo
。これらのルールに対応するソース コード構造はMODULE_DEVICE_TABLE
. デバイス テーブルの個々のエントリは、通常、USB_DEVICE
マクロを使用して構築されるためUSB_DEVICE.*8187
、単に絞り込むのではなくgrep を実行する8187
必要があります。
デバイスが接続されていて動作している場合は、その sysfs エントリを調べることで、関連付けられているドライバーを見つけることができます。
ls -l /sys/bus/usb/devices/*/driver
これらのデバイス記述子文字列の 1 つを作成できる場合は、次のようにして、実際にドライバーをロードせずにドライバーを検索するように modprobe に依頼できます (ここでも例として私のデバイスを使用します)。
modprobe -v -n 'usb:v15A9p0004d0001dc00dsc00dp00icFFiscFFipFF'
すべての数値は、lsusb -v
取得できる場合の出力で使用できます。そうでない場合は、ゼロを試してみてください。ワイルドカードの一致が得られる可能性があります。16 進数には大文字を使用し、それ以外には小文字を使用してください。これは、ドライバーが存在する場合にのみ機能する/lib/modules
ため、カーネル コンパイルから除外されたドライバーを見つけるのには適していません。
他のすべてが失敗した場合、ローテクなアプローチは、人間が読めるデバイス名を から取得しlsusb
、それに「Linux」という単語を加えてグーグルで検索することです。
上記の方法のいくつかを使用して、デバイスのドライバーが rtl8187 と呼ばれ、ベンダー ID と製品 ID が から登録されていることがわかりましたdrivers/net/wireless/rtl818x/rtl8187/dev.c
。