web-dev-qa-db-ja.com

USBデバイスが設定されたアドレスに応答しない

セットアップアドレスに応答しない内蔵USBデバイスがあります。デバイスを継続的にセットアップしようとし、継続的に失敗します:バッテリー、CPU、ディスク容量などの浪費。

USBポートを強制終了するか、カーネルがそれを構成しようとするのを止める方法はありますか?

Uhubctl(スマートハブとしては知られていない)を使用して再起動し、ポートのpower/autosuspend_delay_ms(入出力エラーを取得)で再生し、ポートのpower/control(すでに自動)で再生し、ハブのpower/levelで再生してみました(無効な引数)。もちろん、私は別のケーブルを試すことはできません。それは組み込みデバイスです。

そして、私はハブを完全に無効にしたくないのですが、私はそれを試してみたいと思っています。 Linuxを介してPCIカードを事実上取り外すことができますが、実際に必要なもの(高速USBハブ)が取り除かれます。

デバイスは、実際には使用したことがない、または使用できなかったラップトップの指紋リーダーであると推測しますが、周りにいたことを覚えています。

[ 7283.684834] usb usb1-port7: attempt power cycle
[ 7284.312659] usb 1-7: new full-speed USB device number 41 using xhci_hcd
[ 7284.312858] usb 1-7: Device not responding to setup address.
[ 7284.516966] usb 1-7: Device not responding to setup address.
[ 7284.724647] usb 1-7: device not accepting address 41, error -71
[ 7284.838653] usb 1-7: new full-speed USB device number 42 using xhci_hcd
[ 7284.838852] usb 1-7: Device not responding to setup address.
[ 7285.044852] usb 1-7: Device not responding to setup address.
[ 7285.252760] usb 1-7: device not accepting address 42, error -71
[ 7285.252861] usb usb1-port7: unable to enumerate USB device
[ 7285.366647] usb 1-7: new full-speed USB device number 43 using xhci_hcd
[ 7285.480810] usb 1-7: device descriptor read/64, error -71
[ 7285.702811] usb 1-7: device descriptor read/64, error -71
[ 7285.918653] usb 1-7: new full-speed USB device number 44 using xhci_hcd
[ 7286.032729] usb 1-7: device descriptor read/64, error -71
[ 7286.254780] usb 1-7: device descriptor read/64, error -71
[ 7286.356717] usb usb1-port7: attempt power cycle
Repeat forever

もちろん、lsusbを実行してもデバイスは報告されません。ただし、上流のハブは次のとおりです。

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
00:14.0 USB controller: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller (rev 31)
3
Seth Robertson

OPが言ったように、 一部のUSBハブ は、単一のポートの電源をオフにできる追加のプロトコルを持っているため、uhubctlの使用に関する問題を簡単に解決できますが、ほとんどのUSBハブは内部に含まれているため、そのようなものはありませんコントロール。

Linuxでまだ可能なことは、/sys/bus/usb/devicesツリー内のこのデバイスのauthorized制御ファイルに0を書き込むことにより、USBデバイスの使用を無効にするようカーネルに要求することです。正常に動作するデバイスの場合、これは問題を解決しますが、常に切断して接続しているデバイスの場合はそうではありません。

それでも、USBハブが無効になると、すべてのポートが無効になり、電源がオフになります。そのため、デバイスが接続されているUSBハブを無効にすると、不正なデバイスを事実上無効にして電源を切ります。このハブに接続されている他のデバイスの損失が許容できる場合、それは可能な方法です。

1authorizedファイルに書き戻すと、デバイスが再び有効になり、ハブの場合は、ポートの電源が入り、接続されているデバイスの電源が入ります。

例:

# cat /sys/bus/usb/devices/2-1/product
USB2.0 Hub
# echo 0 > /sys/bus/usb/devices/2-1/authorized
# dmesg|tail -1
[226616.900051] usb 2-1.3: USB disconnect, device number 30

usb 2-1.3はキーボードで、そのLEDは消えました。

# echo 1 > /sys/bus/usb/devices/2-1/authorized
# dmesg|fgrep 2-1|tail -10
[227055.203089] hub 2-1:1.0: USB hub found
[227055.204441] hub 2-1:1.0: 4 ports detected
[227055.213891] usb 2-1: authorized to connect
[227055.405342] usb 2-1.3: new low-speed USB device number 41 using xhci_hcd
[227055.511969] usb 2-1.3: New USB device found, idVendor=413c, idProduct=2113, bcdDevice= 1.08
[227055.511975] usb 2-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[227055.511978] usb 2-1.3: Product: Dell KB216 Wired Keyboard
[227055.520754] input: Dell KB216 Wired Keyboard as /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.3/2-1.3:1.0/0003:413C:2113.001A/input/input136
[227055.583032] input: Dell KB216 Wired Keyboard System Control as /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.3/2-1.3:1.1/0003:413C:2113.001B/input/input137
[227055.641748] input: Dell KB216 Wired Keyboard Consumer Control as /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.3/2-1.3:1.1/0003:413C:2113.001B/input/input138
2
A.B

Systemd(またはかなり標準的なLinuxディストリビューション)を使用していると仮定すると、このUSB初期化は、ブートプロセス中に dev によっておそらく実行されていると思います。 このリンク は、/lib/udev/rules.dおよび/etc/udev/rules.dに格納されているルールファイルに基づいて、udevがデバイスをロードおよび初期化する方法を説明します。

これらのルールファイルの1つは、USBデバイスを処理する必要があります。正確な詳細を提供することはできませんが、デバイスのパスまたは別の関連プロパティに基づいて、USBルールを変更してその特定のデバイスを除外することは可能だと思います。いくつかのことを試してみる必要があるかもしれません。

0
Time4Tea