D:libusbを使用して制御できるようにusbhidが新しいUSBデバイスを宣言するのを防ぎますか?
libusb-0.1を使用するプログラムでRFIDリーダー(HIDデバイスとして使用)にアクセスしたいと思います。コードでは、カーネルドライバは正しく分離されていますがusb_detach_kernel_driver_np
(エラーはありません)、私のプログラムがUSBデバイスにアクセスしようとするたびにusbhidモジュールがそれをリサイクルしているようです。次のエラーが常に発生しますdmesg
。
USB 1-1.3:usbfs:インタフェース0はusbhidによって要求され、「MyProgram」は設定#1を設定します。
次のudevルールを追加し、udevdを再起動してからデバイスを再接続しましたが、うまくいきませんでした。デバイスをブラックリストに追加してusbhidで使用するのを防ぐ必要があります。
# I anonymized the vendor/product IDs here
ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", OPTIONS=="ignore_device"
/sys/bus/usb/drivers/usbhid/
dmesg出力に加えて、デバイスが毎回再生成されるのを見ることができるので、1-1.3:1.0
ブラックリストが機能しないようです。
私が試すことができる他のものがありますか?オペレーティングシステムはRaspbian(Raspberry Pi)で、カーネルは3.2.27です。
答え1
私は問題のこの部分を解決しました。
OPTIONS=="ignore_device"
カーネルから削除されました(犯罪)blacklist usbhid
何もしませんでしたが、キーボードもブロックしませんでした。options usbhid quirks=0xdead:0xbeef:0x0004
usbhidがモジュールにコンパイルされていないため、/etc/modprobe.dの設定ファイルは機能しません。
usbhid.quirks=0xdead:0xbeef:0x4
そのため、ブートコマンドライン(Raspbianの場合は/boot/cmdline.txt)に追加しましたが、usbhidはデバイスをバインドしなくなりました。
しかし、元の問題はまだ存在します。 RFIDリーダーに初めてアクセスすると、読み取り/タイムアウトエラーが発生し続けます。
答え2
私は同じ問題があり、udevルールファイルを次のように修正して問題を解決しました.
SUBSYSTEM=="input", GROUP="input", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="4242", ATTRS{idProduct}=="e131", MODE:="666", GROUP="users"
これでlibusb
、この機能を使用してRFIDロガーを読み取ることができます。