"Перезапуск" USB

Dec 27, 2022 10:36

Сижу, никого не трогаю, STM32F407 мучаю (что-то пока даже "blink" не получается: где-то косяк в активации тактирования), вдруг бац: мыша не работает. Воткнул в другой порт USB - ноль реакции. Воткнул другую - аналогично. Флешку - тихо. В dmesg ничего по поводу новых устройств, зато вот такая ругань:

[926551.236558] xhci_hcd 0000:00:14.0: Abort failed to stop command ring: -110
[926551.236566] xhci_hcd 0000:00:14.0: xHCI host controller not responding, assume dead
[926551.236577] xhci_hcd 0000:00:14.0: HC died; cleaning up
[926551.236603] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
ОК, нашел в интернетах, что нужно сделать: закинуть отмерший адрес сначала в /sys/bus/pci/drivers/xhci_hcd/unbind, а затем - в bind. Чтобы упростить задачу набросал скрипт:

#!/bin/bash

BROKEN=$(dmesg | grep "HC died" | tail -n1| awk '{print $3}' | sed 's/:$//')

echo -n "${BROKEN}" > /sys/bus/pci/drivers/xhci_hcd/unbind
sleep 2
echo -n "${BROKEN}" > /sys/bus/pci/drivers/xhci_hcd/bind

Хорошо хоть, клавиатура жива осталась. В прошлый раз пришлось по ssh комп перезагружать (тогда я про эти bind/unbind не знал).

linux

Previous post Next post
Up