Итак, я обновил свой скользящий дистрибутив OpenSuSe Tumbleweed на прошлой неделе с помощью zypper dist-upgrade
. До обновления он работал нормально. После обновления ядро начало спамить терминал каждые 4 секунды. Это делает терминал близким кнепригодный к использованию, поскольку пользовательский ввод или любой вывод консоли делится пополам и разделяется на множество строк. Вот фрагмент dmesg | grep | tail
:
[ 350.602656] usb usb2-port2: Cannot enable. Maybe the USB cable is bad?
[ 354.682627] usb usb2-port2: Cannot enable. Maybe the USB cable is bad?
[ 358.758627] usb usb2-port2: Cannot enable. Maybe the USB cable is bad?
По USB подключено только два устройства - клавиатура и мышь - и оба работают нормально. Адрес usb может меняться - иногда это usb4-port2 или usb3-port2 в дополнение к usb2-port2 (как мне соотнести эти имена с выводом lsusb - см. внизу).
Во время обновления ядро изменилось с 4.20 на 5.5. При загрузке с ядром 4.20 через grub advanced options эти сообщения не появляются. Установка Windows 7 также не показывает никаких проблем с USB-устройствами или концентраторами.
Поиск наводит меня на мысль, что это связано с этим коммитом ядра:usb: обработка запросов на горячую перезагрузку порта при возобновлении работы концентратора. Убунтурешенота же проблема при отмене этого коммита, но я не могу найти упоминания об этом в OpenSuSeбаг трекерили на форумах.
Как мне остановить эти сообщения? Идеальное решение было бы быстрым, ненавязчивым и легко откатываемым. Ручная компиляция и установка ядра — это последнее средство.
Это вывод lsusb -t в той же загрузке:
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
|__ Port 3: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 5: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 5: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 12M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
sudo dmesg -n1
выдает пустой вывод.
lsusb -vv
показывает следующее для ошибочного ресурса ( usb4-port2
во время этой загрузки)
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 3.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 3
bMaxPacketSize0 9
idVendor 0x1d6b Linux Foundation
idProduct 0x0003 3.0 root hub
bcdDevice 5.05
iManufacturer 3 Linux 5.5.6-1-default xhci-hcd
iProduct 2 (error)
iSerial 1 0000:00:14.0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x001f
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
bMaxBurst 0
can't get hub descriptor, LIBUSB_ERROR_TIMEOUT (Resource temporarily unavailable)
can't get debug descriptor: Resource temporarily unavailable
решение1
Дистрибутив должен оставить старые ядра, загрузить последнее работающее.
Сообщить об ошибке! Возможно, после сбора данных для отчета, удалите негодяя. Таким образом, следующий просто займет его место.
Попробуйте следующий релиз ядра. Ах, как приятно возиться с экспериментальными, скользящими релизами дистрибутива.