
Ubuntu 19.10を実行する複数のシステムがあります。
すべてのシステムで検出されるUSB HIDデバイスがあり、
3つのシステムすべてでまったく同じudevルールファイル(99-MyDevice.rules)を使用しています。
SUBSYSTEM=="usb",ATTRS{idVendor}=="XXXX",ATTRS{idProduct}=="YYYY",MODE="0660",GROUP="timothy",SYMLINK+="mydevice%n"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="timothy"
3つのシステムすべてで、デバイスが/ dev / mydeviceとして正しく表示されます。
これで実行すると、lsusb -t
次のものが出力されます。
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=, 12M
空ですが、Driver
時には実際にドライバ(私が望むもの)をロードして次のように出力します。
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M
ドライバをロードした後、ソフトウェアはデバイスを検出して使用できます。
問題は、ドライバが自動的にロードされることがほとんどないことです。
これまで、ドライバを手動でロードする2つの方法がありました(成功かどうか)。
方法1:
以下を使用してドライバを手動で割り当て/バインドできます。
echo -n "4-3:1.0" > /sys/bus/usb/drivers/usbhid/bind
この時点でlsusb -t
ドライバがロードされたことを示します。
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M
acl
その後、これを使用するには/ dev / mydevice ...を変更する必要があります。
このアプローチが常に動作するわけではありません。せいぜいランダムに感じられます。
方法2:
コンピュータからデバイスを論理的に切断し、再接続します。
(物理的に切断するのではなく)VMWareをインストールし、デバイスをゲストシステムに数秒間接続して
これを実行しました。
デバイスがホストに再接続された後、ほとんどの場合、ドライバは
自動的にバインドされ、ソフトウェアでデバイスを表示または使用できます。
(このアプローチでは、何も修正する必要はありませんacl
。)
いくつかの注意:
- RaspbianがインストールされているRaspberryPIでこのデバイスを使用しても、この問題は発生しません。
- 同じ種類のデバイスが複数あり、この問題はすべてのデバイスで発生します。
- この問題は Windows では発生しません。
- WindowsのUbuntuシステム仮想マシンではこの問題は発生しません。
- MacOSではこの問題は発生しません。
- 私が覚えている限り、以前のバージョンのUbuntuでもこれは起こりません(完全にはわかりません)。
- デバイス自体はSTM32F4に基づいています。
usbhid
毎回ドライバーを強制的に結ぶ方法を知っていますか?
修正する:
デバイスを物理的に接続した後、次のコマンドを実行すると、usbhid
ドライバが毎回正しくバインドされることがわかりました。
sudo rmmod usbhid && sudo modprobe usbhid
rmmod
最初に使用する必要がありましたが、
単に実行するだけでmodprobe
は問題は解決されませんでした。
だから:
- 物理接続:
Driver=, 12MB
- 上記のコマンドを実行します。
Driver=usbhid, 12MB
これによると源泉 ドライバ自体がサポートするデバイスを選択します。
したがって、私はこのコマンドがusbhid
ドライバがデバイス
を処理できるかどうかを再評価することになると思います。
ここで自動化する方法を理解する必要があります。
答え1
/etc/modules-load.d
/00-my-usbhid.confにラインファイルを生成します。
usbhid
モジュールは自動的にロードされるため、最新のシステムではこれを行う必要はありませんが、時にはモジュールを強制的にロードする必要があるかもしれません。
他のすべての方法が失敗した場合は、カーネルブートパラメータを追加してみてください。
usbhid.quirks=0x0463:0xffff:0x08
到着NOGET属性を再度有効にします。動作していることを確認してください。
https://www.cyberciti.biz/faq/linux-how-to-load-a-kernel-module-automatically-at-boot-time/ https://bugzilla.redhat.com/show_bug.cgi?id=1715504 https://github.com/networkupstools/nut/issues/515