Вопрос или проблема
Проблема
USB порты (2.0) постоянно перезагружаются, из-за чего подключенные устройства перестают работать через некоторое время.
Аппаратное обеспечение
Материнская плата: ASUS J1800I-C
ЦП: Intel(R) Celeron(R) CPU J1800 @ 2.41GHz
ОЗУ: 4GB
Количество устройств: > 100 устройств, работающих как платежные киоски, все с одинаковой проблемой.
Подключенные USB устройства (lsusb)
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 013: ID 0dd4:015d Custom Engineering SPA
Bus 001 Device 012: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard
Bus 001 Device 011: ID 23d8:0285
Bus 001 Device 010: ID 1ff7:0013 CVT Electronics.Co.,Ltd CVTouch Screen (HID)
Bus 001 Device 009: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 002: ID 0e8f:0022 GreenAsia Inc. multimedia keyboard controller
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ОС, воспроизводящие проблему:
Ubuntu 14.04-server (64bit)
Ubuntu 16.04-server (64bit)
Ubuntu 18.04-server (64bit)
Пробовал на этих ОС как с загрузкой через UEFI, так и через BIOS.
ОС, не воспроизводящие проблему на том же оборудовании:
Ubuntu 14.04 (server&desktop) (32bit)
Ubuntu 16.04-server (32bit)
Windows 7
Что происходит?
При запуске все работает нормально, а USB устройства работают от 15 до 60 минут.
После этого времени один или несколько портов начинают перезагружаться с ошибками в dmesg:
[ 1484.129248] perf interrupt took too long (2520 > 2500), lowering kernel.perf_event_max_sample_rate to 50000 [ 2645.972003] usb 1-4-port1: cannot reset (err = -71) [ 2646.236044] usb 1-4.1: reset full-speed USB device number 4 using xhci_hcd [ 2646.324439] usb 1-4.1: ep 0x1 - rounding interval to 64 microframes, ep desc says 80 microframes [ 2647.558156] usb 1-4.1: reset full-speed USB device number 4 using xhci_hcd [ 2647.646546] usb 1-4.1: ep 0x1 - rounding interval to 64 microframes, ep desc says 80 microframes [ 3942.619669] usb 1-4-port1: cannot reset (err = -71) [ 3942.619742] usb 1-4-port1: cannot reset (err = -71) [ 3942.619821] usb 1-4-port1: cannot reset (err = -71) [ 3942.619861] usb 1-4-port1: cannot reset (err = -71) [ 3942.619901] usb 1-4-port1: cannot reset (err = -71) [ 3942.619905] usb 1-4-port1: Cannot enable. Maybe the USB cable is bad? [ 3942.690031] usb 1-4.1: reset full-speed USB device number 4 using xhci_hcd [ 3942.690038] usb 1-4.1: hub failed to enable device, error -22 [ 3942.762176] usb 1-4.1: reset full-speed USB device number 4 using xhci_hcd [ 3943.170800] usb 1-4.1: device not accepting address 4, error -22 [ 3943.242967] usb 1-4.1: reset full-speed USB device number 4 using xhci_hcd [ 3943.651734] usb 1-4.1: device not accepting address 4, error -22 [ 3943.653063] usb 1-4.1: USB disconnect, device number 4 [ 3943.751603] usb 1-4.1: new full-speed USB device number 8 using xhci_hcd [ 3943.840892] usb 1-4.1: New USB device found, idVendor=1ff7, idProduct=0013 [ 3943.840899] usb 1-4.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [ 3943.841068] usb 1-4.1: ep 0x1 - rounding interval to 64 microframes, ep desc says 80 microframes [ 3943.850194] input: HID 1ff7:0013 as /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.1/1-4.1:1.0/0003:1FF7:0013.0005/input/input11 [ 3943.850467] hid-multitouch 0003:1FF7:0013.0005: input,hiddev0,hidraw3: USB HID v1.11 Mouse [HID 1ff7:0013] on usb-0000:00:14.0-4.1/input0 [ 4215.269989] usb 1-4-port1: cannot reset (err = -71) [ 4215.270192] usb 1-4-port1: cannot reset (err = -71) [ 4215.270264] usb 1-4-port1: cannot reset (err = -71) [ 4215.270343] usb 1-4-port1: cannot reset (err = -71) [ 4215.270383] usb 1-4-port1: cannot reset (err = -71) [ 4215.270386] usb 1-4-port1: Cannot enable. Maybe the USB cable is bad? [ 4215.342214] usb 1-4.1: reset full-speed USB device number 8 using xhci_hcd [ 4215.342221] usb 1-4.1: hub failed to enable device, error -22 [ 4215.358192] hub 1-4:1.0: hub_ext_port_status failed (err = -71) [ 4215.358263] usb 1-4-port1: cannot reset (err = -71) [ 4215.622566] usb 1-4.1: reset full-speed USB device number 8 using xhci_hcd [ 4215.755250] usb usb1-port4: disabled by hub (EMI?), re-enabling... [ 4215.755273] usb 1-4: USB disconnect, device number 3 [ 4215.755277] usb 1-4.1: USB disconnect, device number 0 [ 4216.031181] usb 1-4.1: device not accepting address 8, error -22 [ 4216.064588] usb 1-4.2: USB disconnect, device number 5 [ 4216.065324] usb 1-4.3: USB disconnect, device number 6 [ 4216.065632] option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0 [ 4216.065647] option 1-4.3:1.0: device disconnected [ 4216.065760] huawei_cdc_ncm 1-4.3:1.1 wwx001e101f0000: unregister 'huawei_cdc_ncm' usb-0000:00:14.0-4.3, Huawei CDC NCM device [ 4216.079590] option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1 [ 4216.079611] option 1-4.3:1.2: device disconnected [ 4216.079752] option1 ttyUSB2: GSM modem (1-port) converter now disconnected from ttyUSB2 [ 4216.079768] option 1-4.3:1.3: device disconnected [ 4216.148026] usb 1-4.4: USB disconnect, device number 7 [ 4216.148183] usblp2: removed [ 4216.387741] usb 1-4: new high-speed USB device number 9 using xhci_hcd [ 4216.517658] usb 1-4: New USB device found, idVendor=05e3, idProduct=0610 [ 4216.517666] usb 1-4: New USB device strings: Mfr=0, Product=1, SerialNumber=0 [ 4216.517670] usb 1-4: Product: USB2.0 Hub [ 4216.518341] hub 1-4:1.0: USB hub found [ 4216.518643] hub 1-4:1.0: 4 ports detected [ 4216.792385] usb 1-4.1: new full-speed USB device number 10 using xhci_hcd [ 4216.885849] usb 1-4.1: New USB device found, idVendor=1ff7, idProduct=0013 [ 4216.885855] usb 1-4.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [ 4216.886042] usb 1-4.1: ep 0x1 - rounding interval to 64 microframes, ep desc says 80 microframes [ 4216.895096] input: HID 1ff7:0013 as /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.1/1-4.1:1.0/0003:1FF7:0013.0006/input/input13 [ 4216.951230] hid-multitouch 0003:1FF7:0013.0006: input,hiddev0,hidraw2: USB HID v1.11 Mouse [HID 1ff7:0013] on usb-0000:00:14.0-4.1/input0
Что я пробовал и не решил проблему:
Я пытался отключить автосуспенд для USB портов, добавив в командную строку ядра Linux: usbcore.autosuspend=-1 среди множества других опций, и все они не сработали.
Я также пытался изменить множество опций BIOS, связанных с USB, ничего не помогло.
Полезные факты:
– Все 4-х портовые USB 2.0 вызывают проблему.
– На материнской плате есть единственный USB 3.0 порт, который кажется не затронутым проблемой.
– Использование активного USB хаба, подключенного к USB3 порту, а затем подключение всех USB устройств к нему, кажется, решает проблему.
– Использование 32-битной версии той же ОС, кажется, решает проблему с USB. Проверял работу некоторых киосков с 32-битной установкой в течение 3 дней без единого предупреждения или ошибки в dmesg.
Вопрос:
Как я могу решить эту проблему на моем 64-битном Ubuntu 16.04?
Переход на 32-битную версию — это нереалистичное решение для меня, так как это требует переустановки более 100 устройств. Кроме того, некоторые из моих устройств поставляются с 64-битным проприетарным SDK.
Обновление 1:
Archlinux 64-bit, кажется, работает нормально на том же оборудовании.
У меня была та же проблема, dmesg был заполнен такими сообщениями, и я не мог отключить или приостановить работу компьютера:
[ 4095.313680] usb usb4-port5: Cannot enable. Maybe the USB cable is bad?
[ 4099.301425] usb usb4-port5: Cannot enable. Maybe the USB cable is bad?
[ 4103.293161] usb usb4-port5: Cannot enable. Maybe the USB cable is bad?
Я обнаружил, что это происходит, когда USB устройства не отключаются длительное время. Возможно, контроллер на каком-то устройстве начинает работать неправильно после продолжительной работы, проходя через множество циклов приостановки, и из-за этого посылает некорректные сигналы.
Я обнаружил, что это устраняет проблему:
- отключить все ваши USB устройства;
или
- выключить компьютер и питание на блоке питания (блок питания компьютера), так как иначе блок питания будет продолжать подавать ток на материнскую плату, что будет продолжать запитывать USB контроллеры на подключенных устройствах.
И, конечно, иногда это может быть просто плохой кабель. Смотрите здесь: https://askubuntu.com/a/348799/82315
Archlinux 64-bit, кажется, работает нормально на том же оборудовании.
Arch имеет обновляемую версию и постоянно обновляется. Если вам нужно оставаться с Ubuntu, попробуйте использовать репозиторий, который предоставляет основные версии ядра для вашей версии Ubuntu.
Также вы можете попробовать добавить это в скрипт и запустить его.
echo enabled > /sys/bus/usb/devices/usb1/power/wakeup
для всех ваших устройств.
Ответ или решение
Проблема с сбросом USB-портов на системе под управлением Linux, особенно в контексте, который вы описали, может представлять серьезную проблему, учитывая использование более чем 100 устройств в платежных киосках. Рассмотрим возможные причины и решения этой проблемы, используя принцип TEA (Теория, Пример, Применение).
Теория
Симптомы, которые вы описали, указывают на сбои USB 2.0 интерфейсов, проявляющиеся через периодические сбросы. Ошибки, которые включают "usb 1-4-port1: cannot reset (err = -71)", "usb 1-4.1: hub failed to enable device, error -22", и "device not accepting address", часто связаны с проблемами передачи данных на уровне USB драйверов или аппаратных проблем. В вашей ситуации проблема, судя по всему, связана с 64-битными версиями Ubuntu, в то время как 32-битные версии и Arch Linux 64-bit работают корректно. Это может указывать на несовместимость драйверов или ошибку в ядре операционной системы именно в контексте использования 64-битной архитектуры.
Пример
В прошлом аналогичные проблемы возникали при использовании специфических чипсетов USB-контроллеров. При работе с ОС с различными архитектурами и версиями могут возникать несовместимости, которые приводят к нестабильности подключения USB-устройств. Например, использование более новых или экспериментальных версий ядер ОС может решить проблему за счет исправления ошибок и улучшенной совместимости USB-драйверов. Одним из способом выяснить, в чем именно заключается проблема, является детальный мониторинг и анализ логов системы, включая dmesg
, который может указать на причину проблемы (например, слишком длинный ответ от USB устройства, сбой контроллера или нехватка питания для периферийных устройств).
Применение
-
Обновление ядра: Поскольку Arch Linux функционирует без проблем, попробуйте использовать основное стабильное ядро более новой версии из репозиториев Ubuntu. Это можно сделать, добавив репозитории, которые содержат основное ядро, и обновив систему. Возможно, в новой версии ядра исправлены ошибки USB-драйверов, приводящие к сбоям.
-
Проблемы с питанием: Убедитесь, что все устройства получают достаточное питание. Используйте внешние концентраторы питания для хабов, если это возможно. USB 2.0 порты могут перегружаться, особенно если подключено много энергоемких устройств.
-
Автоматическое отключение питания USB: Проверьте настройки питания на USB портах. Отключите функцию автоматического отключения питания. Команда
usbcore.autosuspend=-1
может отключить автоотключение, но если это не помогает, стоит рассмотреть возможность принудительного отключения wakeup функций для каждого устройства через команду:echo enabled > /sys/bus/usb/devices/usbX/power/wakeup
где
usbX
– это номер устройства, требующего модификации. -
Аппаратные проблемы: Проблемы могут быть связаны и с физическим состоянием кабелей или самих USB портов. Попробуйте использовать новые качественные кабели и коннекторы, замените неисправные или изношенные элементы.
-
Задать параметр USБ: Если установлено использование привилегий UEFI или EFI загрузчика, попробуйте изменить настройки загрузки, чтобы использовать более устаревший BIOS или изменить настройки UEFI.
-
Мониторинг USB-портов: Установите системные утилиты для мониторинга USB портов в реальном времени. Это поможет быстро определить нестабильное устройство и заменить или перенастроить его.
В конечном итоге, подходящие методы устранения зависят от конкретной конфигурации оборудования и программного обеспечения. Системный администратор должен протестировать вышеуказанные методы, чтобы найти оптимальное решение для своего окружения.