直接関連: libusbで制御できるように、usbhidによる新規USBデバイスの要求を防止しますか?
Libusb-0.1を使用するプログラムからRFIDリーダー(HIDデバイスとして機能)にアクセスしたい。コードでは、カーネルドライバーはusb_detach_kernel_driver_np
(エラーなし)で正しく切り離されていますが、私のプログラムがUSBデバイスにアクセスしようとするたびに、usbhidモジュールがそれを再利用しているようです。次のエラーは常にdmesg
に表示されます:
usb 1-1.3:usbfs: 'MyProgram'が構成#1を設定しているときにusbhidがインターフェイス0を要求
次のudevルールを追加し、udevdを再起動してデバイスを再接続しましたが、効果はありません。デバイスがusbhidによって使用されないようにブラックリストに登録することになっています。
# I anonymized the vendor/product IDs here
ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", OPTIONS=="ignore_device"
Dmesg出力とは別に、/sys/bus/usb/drivers/usbhid/
でデバイス1-1.3:1.0
が毎回再作成されるため、ブラックリストが機能していないようです。
他に何か試してみませんか?オペレーティングシステムは、カーネル3.2.27を搭載したRaspbian(Raspberry Pi上)です。
私は問題のこの部分を解決しました:
OPTIONS=="ignore_device"
がカーネルから削除されました( commit )blacklist usbhid
は何もせず、キーボードもブロックしていませんoptions usbhid quirks=0xdead:0xbeef:0x0004
を含む/etc/modprobe.d内の構成ファイルは機能しませんでしたしたがって、usbhid.quirks=0xdead:0xbeef:0x4
をブートコマンドラインに追加し(Raspbianでは/boot/cmdline.txtにあります)、usbhidはデバイスをバインドしなくなりました。
しかし、私の元々の問題はまだ残っています。 RFIDリーダーに初めてアクセスすると、常に読み取り/タイムアウトエラーが発生します。
同じ問題があり、次のようにudevルールファイルの変更を解決しました。
SUBSYSTEM=="input", GROUP="input", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="4242", ATTRS{idProduct}=="e131", MODE:="666", GROUP="users"
これで、libusb
関数を使用してRFIDロガーを読み取ることができます。