Устройство USB не отвечает на заданный адрес

Использование / в качестве разделительного символа для команды sed s не является обязательным. Разделителем является первый символ после s. Вы можете использовать | или # или (почти) все, что вам нравится. Для вещей с большим количеством символов /, таких как пути к именам файлов, мне нравится использовать запятые, потому что они идут под базовой линией и поэтому их легче увидеть, а в именах файлов они встречаются очень редко:

sed 's,^/home/me/subdir/,^/home/he/otherdir/,'

Выберите символ, который вы не найдете при поиске и замене. Если у вас есть один или два, добавьте к ним обратную косую черту.

3
10.01.2019, 06:11
2 ответа

В то время как, как сказал ОП, некоторые USB-концентраторы имеют дополнительный протокол, позволяющий отключать питание одного порта, что легко решает проблему с использованием uhubctl, большинство USB-концентраторов, включая внутренние, имеют нет такого контроля.

Что все еще возможно в Linux, так это попросить ядро ​​отключить использование USB-устройства, записав 0 в управляющий файл authorizedэтого устройства в дереве /sys/bus/usb/devices. Для устройства, которое ведет себя нормально, это решило бы проблему, но не для устройства, которое все время отключается и снова подключается.

Тем не менее, когда любой USB-концентратор отключен таким образом, он отключит и отключит питание всех своих портов. Таким образом, отключение USB-концентратора, к которому подключено устройство, эффективно отключит и отключит неправильное устройство. Если потеря любого другого устройства, подключенного к этому концентратору, приемлема, то это возможный метод.

Обратная запись 1в файл authorizedснова включит устройство, а для концентратора снова подаст питание на его порты, вернув питание любому подключенному устройству.

Пример:

# 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была клавиатура, и ее светодиоды погасли.

# 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
5
27.01.2020, 21:24

Предполагая, что вы используете systemd (или достаточно стандартный дистрибутив Linux ), я думаю, что эта инициализация USB, вероятно, выполняется udev во время процесса загрузки. Эта ссылка объясняет, как udev загружает и инициализирует устройства на основе файлов правил, которые хранятся в /lib/udev/rules.dи /etc/udev/rules.d.

Один из этих файлов правил должен относиться к USB-устройствам. Я не могу предоставить точную информацию, но я думаю, что должна быть возможность изменить правила USB, чтобы исключить это конкретное устройство на основе его пути к устройству или другого соответствующего свойства. Возможно, вам придется покопаться и попробовать несколько вещей.

1
27.01.2020, 21:24

Теги

Похожие вопросы