libusbで制御できるように、usbhidによる新規USBデバイスの要求を防止しますか?


9

で試してみたいUSBロケットランチャーを持っていlibusbます。ただし、libusbはインターフェースを要求できません。おそらくusb-devices、デバイスのドライバーとして「usbhid」が出力されるためです。

インターネットで読んだところ、このドライバーをデバイスから切り離してlibusbで使用できるようにする必要があるという結論に達しました。ただし、それを行うための唯一の決定的な方法は見つかりませんでした。いくつかの異なるアイデアとバグレポートのみです。

それで、Ubuntu 11.04で提供されるカーネルとツールに関連するデバイスからusbhidドライバーを切り離す方法はありますか?

編集:

ファイルを作成してみました

/etc/udev/rules.d/10-usbhid.rules

そして以下を書く:

ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0701", OPTIONS=="ignore_device"

保存してから再起動します。ファイルはまだ残っていますが、まったく機能していないようです。

編集:

さて、私はこれを試しました:

sudo -i
echo -n "0003:0A81:0701.0006" > /sys/bus/hid/drivers/generic-usb/unbind

その後、/ sys / bus / hid / devices / 0003:0A81:0701.0006およびlsに移動すると、次のようになります。

drwxr-xr-x 2 root root    0 2011-05-29 15:46 power
lrwxrwxrwx 1 root root    0 2011-05-29 13:19 subsystem ->       ../../../../../../../../../bus/hid
-rw-r--r-- 1 root root 4096 2011-05-29 13:19 uevent

以前のように「ドライバー」シンボリックリンクがリストされなくなったため、バインド解除されたと想定します。しかし、すべての証拠は、運転手がまだ不審であることを示唆しているようです。たとえば、usb-devicesは以下を生成します:

T:  Bus=02 Lev=03 Prnt=07 Port=00 Cnt=01 Dev#=  9 Spd=1.5 MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0a81 ProdID=0701 Rev=00.01
S:  Manufacturer=Dream Link
S:  Product=USB Missile Launcher v1.0
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid

libusbは、usb_claim_interface()....で-1を返します。

回答:


5

rootとしてlibusbプログラムを実行すると、

usb_detach_kernel_driver_np()

実際に期待どおりに動作します。


2

udevusbhidを含むモジュールが接続されないように、デバイスIDをのブラックリストに追加する必要があると思います。


どのように私はそれについて正確に行きますか?私の経験不足を許してください。しかし、このリンクwiki.archlinux.org/index.php/Blacklistingは、udevのページをたどって到達したもので、特にudevに関連付けられているようには見えません。特定のデバイスをベンダー製品IDでブラックリストに登録します。
2011年

そのページは、モジュールのロードをブラックリストに載せることについてです。キーボードとマウス用のモジュールが必要なため、それをしたくありません!必要なのは、その特定のデバイスとの関連付けを停止することです。申し訳ありませんが、udevのルールがすぐにわかりません。調べるための変更があった場合は、それを私の回答に追加しますが、最初にあなたをその方向に向けると思います。
カレブ

1

次のudevルールはあなたが望むことをすると思います:

SUBSYSTEM=="usb", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0701", MODE="0660", GROUP="plugdev", RUN="/bin/sh -c 'echo -n $id:1.0 > /sys/bus/usb/drivers/usbhid/unbind'"

ユーザーがアクセスするには、plugdevグループのメンバーである必要があります。このルールを設定した状態でrootとして実行する必要はありません。


1

私(Debian sid / stretch)の$id場合、USBデバイスを接続すると、udev 属性が空になります。それは$kernelUSBHIDのアンバインドに渡すために必要な文字列が含まれています。

ここに私が使用しているudevルールがあります:

SUBSYSTEM=="usb", ATTRS{idVendor}=="0000", ATTRS{idProduct}=="0000", MODE="0660", GROUP="plugdev"
ATTRS{idVendor}=="0000", ATTRS{idProduct}=="0000", DRIVER="usbhid", RUN="/bin/sh -c 'echo -n $kernel >/sys/bus/usb/drivers/usbhid/unbind'"

もちろん、idVendorとidProductをデバイスのIDに置き換えます。


これらの種類のルールを作成するために、次のコマンドは、使用可能なすべての属性を表示します(特定のUSBデバイスに対して)。

udevadm info -a /sys/bus/usb/devices/1-3:1.0/

最後に、$id$kernelシェル変数ではありません。それらはudevパーサーに置き換えられました。これらの変数の完全なリストについては、man udevを検索してください%k

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.