Вопрос или проблема
практически мой USB умирает, и я не знаю, как его перезагрузить без перезагрузки
до ядра 6.12 вы бы просто сделали
sudo modprobe -r xhci_pci
затем
sudo modprobe xhci_pci
и usb снова заработал бы
но теперь он встроен. Как перезагрузить его?
modprobe: FATAL: Module xhci_pci is builtin.
[1338075.049450] usb 5-2.1.1.1: USB отключен, номер устройства 13
[1338075.336478] usb 5-2.1.1.3: USB отключен, номер устройства 14
[1338075.654966] usb 5-2.1.1: сброс устройства USB на полной скорости номер 107 с использованием xhci_hcd
[1338082.210867] xhci_hcd 0000:05:00.3: xHCI-хост не отвечает на команду остановки конечной точки
[1338082.226886] xhci_hcd 0000:05:00.3: контроллер xHCI-хоста не отвечает, предполагаем смерть
[1338082.226959] xhci_hcd 0000:05:00.3: HC умер; очистка
[1338082.227428] usb 5-2.1.1: USB отключен, номер устройства 107
[1338082.227471] usb 5-1: USB отключен, номер устройства 2
[1338082.227477] usb 5-1.3: USB отключен, номер устройства 4
[1338082.227662] cdc_ether 5-1.3:2.0 enx62b986afb014: отмена регистрации 'cdc_ether' usb-0000:05:00.3-1.3, устройство CDC Ethernet
[1338082.265564] usb 5-1.4: USB отключен, номер устройства 5
[1338082.333565] usb 5-2.1.3: USB отключен, номер устройства 86
[1338082.559619] usb 5-2: USB отключен, номер устройства 3
[1338082.559633] usb 5-2.1: USB отключен, номер устройства 82
[1338082.643997] usb 5-2.1.4: USB отключен, номер устройства 84
[1338082.708358] usb 5-2.2: USB отключен, номер устройства 6
даже выход из гибернации и повторное включение компьютера приводит к неработающему usb, он работает в bios и т. д., но после загрузки из гибернации он снова не работает
Ответ или решение
В современных версиях ядра Linux, начиная с версии 6.12, модуль xhci_pci
интегрирован непосредственно в ядро. Это означает, что модуль нельзя загружать или выгружать динамически с помощью modprobe
, как это было возможно в более ранних версиях. Это привело к изменениям в управлении USB-контроллерами и требует нового подхода к решению проблем, связанных с их работоспособностью.
Теория
Во-первых, важно понимать, что xhci_pci
является драйвером для модуля поддержки USB 3.0 (и старых версий) на базе интерфейса xHCI (eXtensible Host Controller Interface), который обеспечивает управление подключением и передачей данных между USB-устройствами и ПК. Поскольку модуль интегрирован в основное ядро, это часто делается для повышения производительности, надёжности и безопасности системы, так как встроенные модули работают более стабильно и защищены от возможных конфликтов, вызываемых динамическим подключением и отключением модулей.
Пример
Давайте рассмотрим распространённую ситуацию с отказом USB после пробуждения из спящего режима или гибернации. В вашем журнале ошибок (dmesg
) представлены сообщения об отключении USB-устройств и проблемах с контроллером xHCI. Например:
[1338082.210867] xhci_hcd 0000:05:00.3: xHCI host not responding to stop endpoint command
[1338082.226886] xhci_hcd 0000:05:00.3: xHCI host controller not responding, assume dead
[1338082.226959] xhci_hcd 0000:05:00.3: HC died; cleaning up
Это свидетельствует о том, что USB-контроллер перестал реагировать на команды, в результате чего система аннулирует все связанные с ним устройства.
Применение
Теперь, когда мы понимаем природу проблемы и причины, вызывающие её, существует несколько шагов, которые можно предпринять для её решения:
-
Обновление ядра и драйверов:
Убедитесь, что у вас установлены последние обновления для ядра и драйверов. Часто новые версии содержат исправления для известных проблем. Используйте управляющие пакеты вашей операционной системы, такие какapt
для Ubuntu, чтобы обновить вашу систему. -
Настройки параметров питания:
Проверьте настройки питания для USB в BIOS/UEFI. Некоторые системы позволяют отключать USB-контроллер для экономии энергии. Попробуйте отключить данную функцию. -
Настройки ядра:
Настройте параметры ядра через загрузочный меню. Например, параметрыpci=noacpi
илиusbcore.autosuspend=-1
могут помочь отключить управление питанием для PCI или USB и предотвратить отключение контроллеров. -
Проверка конфигурации ядра:
Иногда проблема решается добавлением дополнительного параметра в конфигурации загрузки для правильной работы устройств xHCI. Проверьте текущие параметры через/etc/default/grub
и обновите конфигурацию с помощьюupdate-grub
. -
Использование скриптов udev:
Напишите udev-правило, которое будет обращаться к USB-контроллеру непосредственно после того, как система выходит из спящего режима. Это обеспечит перезагрузку устройства без необходимости полного перезапуска системы.Например, вы можете создать файл
/etc/udev/rules.d/usb_power.rules
с содержанием:ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="on"
-
Дополнительные утилиты:
Воспользуйтесь утилитами, такими какusbreset
илиusb_modeswitch
, для ручного сброса USB-портов. Эти утилиты могут инициировать процесс, аналогичный отключению и повторному подключению устройств. -
Обратная связь и баг-репорты:
Если проблема не решается, подайте отчёт об ошибке в соответствующие форумы или системы отслеживания багов (например, на Bugzilla для проблем с ядром Linux). Опишите шаги по воспроизведению проблемы и приложите журналы, чтобы разработчикам было проще воспроизвести и исправить проблему.
Если проблема продолжает проявляться и после применения всех указанных советов, может потребоваться более глубокий анализ, включающий проверку аппаратной совместимости и возможное обращение в службу поддержки производителя оборудования для приостановки проблем с совместимостью.
Проблемы с USB могут быть сложными для диагностики и установки, но следуя предложенным шагам, вы сможете увеличить шансы на успешное решение проблемы без необходимости перезагрузки системы.