Вопрос или проблема
Я отключил USB (2.0) порт на производственной системе Linux с помощью этой команды:
echo 1 > /sys/bus/usb/devices/usb2/2-1/2-1.8/port/disable
Это успешно отключило 8-й USB порт на концентраторе #1.
Устройства, подключенные к этому порту, больше не определяются.
Но теперь я хочу снова активировать его (без сброса контроллера или перезагрузки системы).
Я не смог найти решение в документации ядра. Папка 2-1.8
исчезла, и команды echo "2-1.8" > /sys/bus/usb/devices/usb2/2-1/subsystem/drivers/usb/bind
не удается выполнить, возникает ошибка No such device.
Как я могу снова активировать его?
Ответ или решение
Восстановление доступа к USB-порту в Linux, который был отключен через sysfs
, может показаться задачей не из простых, особенно когда необходимо переактивировать его без перезагрузки системы или сброса USB-контроллера. В вашем случае отключение произошло через запись в файл /port/disable
, и теперь папка 2-1.8
исчезла, что делает вашу задачу более сложной. Обсудим, как можно попытаться решить эту проблему, основываясь на глубоком понимании работы sysfs
и управления USB-портами в Linux.
Теория:
Подсистема sysfs
в Linux предоставляет интерфейс для доступа и управления устройствами и их параметрами через файловую систему. Для USB-портов как правило, когда порт отключен, он может быть "устранен" из текущей конфигурации системы, что делает его невидимым для дальнейших операций, таких как bind
. Поскольку порт больше не появляется в системе, стандартные команды такие, как восстановление через /subsystem/drivers/usb/bind
, могут не работать, как и в вашем случае. Важно, что отключение порта может иногда удалять запись о порте из дерева устройств, что делает невозможным традиционный процесс "подключения".
Пример:
Рассмотрим пример, когда администратор пытается отключить и включить USB-порт. При успешном отключении порта папка, соответствующая порту, может исчезнуть, и любые связанные записи в поддиректориях USB также могут быть удалены. Это приведет к тому, что любые стандартные методы, которые используют echo
для повторного включения, вернут ошибку "No such device".
Применение:
-
Проверка доступных устройств: В первую очередь, необходимо убедиться, что правильный USB-контроллер и хаб выбраны для операций включения и отключения. Это можно сделать через просмотр дерева устройств:
lsusb -t
или
ls /sys/bus/usb/devices/
-
Использование udev: Если порт отсутствует, а его связанная запись в файловой системе удалена, одна из возможностей заключается в использовании
udev
для перезапуска устройств на физическом уровне без перезагрузки системы. Следует создать или отредактировать правила udev, которые могут инициировать перезапуск службы. Это позволит подтяжке новосозданного устройства через горячее подключение. -
Перезапщус конкретного USB-контроллера: Некоторые контроллеры позволяют выборочное отключение/включение отдельных фаз работы:
echo "0" > /sys/bus/pci/devices/0000:00:14.0/remove echo "1" > /sys/bus/pci/rescan
В этом примере мы отключаем PCIe контроллер, к которому подключены концентраторы USB, а затем снова инициируем пересканирование шины PCIe.
-
Задействование специальных драйверов или утилит: В зависимости от установленного оборудования, могут существовать специальные утилиты или драйверы производителя, которые позволяют контролировать состояние портов с большей гибкостью, чем предоставляют стандартные средства Linux.
-
Скрытые обходные пути: Время от времени могут существовать специфические баги или особенности ядра Linux, позволяющие пойти обходным путем. Всегда полезно проверять последние обновления для дистрибутива и ядра, так как уже могут существовать исправления для работы с USB-портами.
Надеемся, эти методы помогут вам справиться с отключением USB-порта. Подобные задачи напоминают о важности создания резервных копий конфигураций и ведения документации на случай необходимости вернуть систему в предыдущее рабочее состояние. Посколько порты могут быть задействованы в критически важных задачах, перед изменением конфигураций всегда следует убедиться в наличии безопасного пути восстановления.