web-dev-qa-db-ja.com

ドライバーとデバイスの一致を強制する

私はドライバーを知っているUSBハードウェアを持っています。ただし、ベンダーIDと製品IDが、ドライバーに登録されているVIDとPIDのペアと一致しません。 Linuxで、ドライバーを既知のデバイスに強制的に関連付ける方法はありますか?これには、PID/VIDペアを追加するためのカーネルモジュールの再コンパイルは含まれませんか?

23
shodanex

Sysfsツリーでモジュールを見つけます。この場合、

/sys/bus/usb-serial/drivers/cp2101

このディレクトリには、次のようにVIDPIDペアを動的に追加するために使用できるnew_idファイルエントリがあります。

echo VID PID >new_id

ここに LWNエントリ この機能について

24
shodanex

実際にカーネル全体を再コンパイルする必要はありません。 this 回答がカーネルで機能しない場合は、更新された一致テーブルを使用して関連するカーネルモジュールのみを再コンパイルするだけで十分です。

1
Ilya

この変更を永続的にし、特定のドライバーをデバイス(VID、PID)に割り当てたい場合は、 this 回答が役立つことがあります。

たとえば、次の内容で新しいfile _/etc/udev/rules.d/98-joystick.rules_を作成します。

ACTION == "add"、ATTRS {idVendor} == "1345"、ATTRS {idProduct} == "6005"、RUN + = "/ sbin/modprobe xpad" RUN + = "/ bin/sh -c'echo 1345 6005>/sys/bus/usb/drivers/xpad/new_id '"

_1345_をVIDに、_6005_をPIDに置き換えます。

xpadを適切なドライバーに置き換えます。

次のコマンドを実行します。

$ Sudoudevadmコントロール--reload

デバイスのプラグを抜き差しして、新しいドライバーがロードされているかどうかを確認します。

ここに示す例は、Speedlink Strike FX Gamepad (SL-6537-BK)に関するドライバーの問題を修正するためのものです。

1
nexayq