USBipd случайно вылетает – как это исправить?

Вопрос или проблема

У меня есть Raspberry Pi 3B с радиоприемником (Warema Stick), подключенным к нему.
Этот Raspberry Pi работает под управлением Raspberry Pi OS, и я установил usbipd из стандартного репозитория пакетов Raspberry Pi OS.
Радиоприемник работает нормально некоторое время, когда я вручную перезапускаю как USBipd на Pi 3, так и USBip клиента на моем RPi4, но в случайный момент времени usbipd аварийно завершается, и мне приходится снова перезапускать usbipd и клиента….

dmesg -T показывает следующее:

[Fr Feb 21 05:44:14 2025] usbip-host 1-1.4: recv a header, 0
[Fr Feb 21 05:44:14 2025] ftdi_sio 1-1.4:1.0: FTDI USB Serial Device converter detected
[Fr Feb 21 05:44:14 2025] usb 1-1.4: Detected FT232R
[Fr Feb 21 05:44:14 2025] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0
[Fr Feb 21 05:44:17 2025] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[Fr Feb 21 05:44:17 2025] ftdi_sio 1-1.4:1.0: device disconnected
[Fr Feb 21 05:44:17 2025] usbip-host 1-1.4: usbip-host: register new device (bus 1 dev 4)
[Fr Feb 21 05:45:09 2025] usbip-host 1-1.4: stub up
[Fr Feb 21 05:45:10 2025] usbip-host 1-1.4: endpoint 0 is stalled
[Fr Feb 21 05:45:10 2025] usbip-host 1-1.4: endpoint 0 is stalled
[Fr Feb 21 05:45:10 2025] usbip-host 1-1.4: endpoint 0 is stalled
[Fr Feb 21 05:45:56 2025] usbip-host 1-1.4: recv a header, 0
[Fr Feb 21 05:45:56 2025] ftdi_sio 1-1.4:1.0: FTDI USB Serial Device converter detected
[Fr Feb 21 05:45:56 2025] usb 1-1.4: Detected FT232R
[Fr Feb 21 05:45:56 2025] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0
[Fr Feb 21 05:45:59 2025] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[Fr Feb 21 05:45:59 2025] ftdi_sio 1-1.4:1.0: device disconnected
[Fr Feb 21 05:45:59 2025] usbip-host 1-1.4: usbip-host: register new device (bus 1 dev 4)
[Fr Feb 21 05:46:33 2025] usbip-host 1-1.4: stub up
[Fr Feb 21 05:46:33 2025] usbip-host 1-1.4: endpoint 0 is stalled
[Fr Feb 21 05:46:33 2025] usbip-host 1-1.4: endpoint 0 is stalled
[Fr Feb 21 05:46:33 2025] usbip-host 1-1.4: endpoint 0 is stalled
[Fr Feb 21 05:50:57 2025] usbip-host 1-1.4: recv a header, 0
[Fr Feb 21 05:50:57 2025] usbip-host 1-1.4: reset full-speed USB device number 4 using dwc_otg
[Fr Feb 21 05:50:57 2025] usbip-host 1-1.4: device reset
[Fr Feb 21 05:51:03 2025] usbip-host 1-1.4: stub up
[Fr Feb 21 05:51:04 2025] usbip-host 1-1.4: endpoint 0 is stalled
[Fr Feb 21 05:51:04 2025] usbip-host 1-1.4: endpoint 0 is stalled
[Fr Feb 21 05:51:04 2025] usbip-host 1-1.4: endpoint 0 is stalled
[Fr Feb 21 05:51:27 2025] usbip-host 1-1.4: unlinked by a call to usb_unlink_urb()
[Fr Feb 21 05:51:27 2025] usbip-host 1-1.4: unlinked by a call to usb_unlink_urb()
[Sa Feb 22 06:39:29 2025] usbip-host 1-1.4: unlinked by a call to usb_unlink_urb()

С уважением

Аарон

Ответ или решение

Исправление случайных сбоев USBipd на Raspberry Pi

Задача, с которой вы столкнулись, является распространенной среди пользователей Raspberry Pi и программного обеспечения USB over IP, такого как USBipd. В вашей системе Raspberry Pi 3B вы используете радио-адаптер Warema Stick. Проблемы, которые вы описали, связаны с нестабильностью USBipd — демона, который позволяет преобразовывать локальные USB-устройства в удаленные по сети. Ваша система работает с Raspberry Pi OS, и вы используете стандартный пакет из репозитория ОС. Разболее подробно рассмотрим вашу проблему и предложим стратегию её решения.

Теория

Наиболее вероятная причина сбоя USBipd кроется в сбоях взаимодействия между USB-устройствами и программным обеспечением на уровне ядра. Это может быть вызвано конфликтами драйверов, сбоями в передаче данных по сети или неверными конфигурациями демона. Проанализировав предоставленные вами сообщения dmesg, можно заметить, что системный лог показывает многократное отключение и повторное подключение FTDI USB Serial Device, что приводит к задержкам и возможному "зависанию" устройства. Есть несколько основных теорий того, что может вызвать такие события:

  1. Проблемы с питанием: Неконстантный или недостающий ток для USB-устройства может привести к его отключению.

  2. Проблемы с драйверами и модулями ядра: Устаревшие или конфликтующие драйверы также вызывают сбои в работе USBipd.

  3. Сетевые проблемы: Нестабильное подключение между Raspberry Pi и клиентским устройством может привести к нежелательным разрывам связи.

  4. Конфигурационные ошибки: Неправильные настройки, такие как порты или параметры соединения, могут нарушить работу USBipd.

Пример

Возьмём случай с другими пользователями Raspberry Pi, которые сталкивались с подобными проблемами. В одном из случаев пользователь заметил, что при питании устройства от стандартного USB-порта компьютера его USB-устройства периодически отключались. После подключения через отдельный адаптер питания проблема исчезла. Другая проблема, связанная с некорректной конфигурацией клиента USBip, была решена путем переустановки пакетов и корректировки конфигураций.

Приложение

Теперь, когда мы понимаем теоретическую часть проблемы и имеем пример, посмотрим на практические шаги по её решению:

  1. Проверка питания:

    • Убедитесь, что ваш Raspberry Pi и подсоединенные USB-устройства получают достаточное и стабильное питание. Попробуйте использовать внешний источник питания с более высокой мощностью и подключите его, чтобы избежать нехватки энергии через порты Raspberry Pi.
  2. Обновление системы:

    • Убедитесь, что ваша система Raspberry Pi OS и все связанные пакеты (включая ядро и USBipd) обновлены до последних версий. Обновите пакеты с помощью команд:
      sudo apt update
      sudo apt upgrade
  3. Настройка USBipd:

    • Проверьте, что USBipd запущен и конфигурирован правильно. Стоит посмотреть журналы ошибок USBip клиентов и сервера, чтобы сузить область поиска.
    • Повторно установите USBipd, чтобы исключить вероятность повреждений в инсталляции:
      sudo apt remove usbip
      sudo apt install usbip
  4. Мониторинг состояния сети:

    • Убедитесь, что сеть между вашим Raspberry Pi и клиентом стабильна и не прерывается. Используйте такие инструменты, как ping или iperf, чтобы проверить сеть на наличие потерянных пакетов.
  5. Конфигурации ядра:

    • Проверьте наличие конфликтующих драйверов в конфигурации ядра. Если используется отдельный драйвер для вашего устройства, убедитесь, что он не конфликтует с другими модулями.
  6. Отладка через USBip:

    • Включите подробный лог USBip для пользователя, чтобы получить дополнительную информацию о сбоях. Это может включать использование параметров запуска, таких как -d для получения отладочных данных.
  7. Автоматизация перезапуска службы:

    • Чтобы избежать необходимости вручную перезапускать USBipd, вы можете создать скрипт или системный сервис, который будет проверять статус USBipd и перезапускать его при обнаружении сбоев.
[Unit]
Description=Monitor USBipd

[Service]
Type=simple
ExecStart=/usr/bin/usbipd -d
Restart=always

[Install]
WantedBy=multi-user.target

Заключение

Внедрив вышеописанные шаги, вы потенциально сможете улучшить стабильность работы USBipd и минимизировать его случайные сбои. Если проблема сохраняется, может потребоваться более глубокий анализ лога системы и, возможно, обращение за поддержкой на специализированные форумы Raspberry Pi или USBip. Важно не забывать сохранять логи и информацию о системе для лучшего понимания причин неудач и быстрого их устранения.

Оцените материал
Добавить комментарий

Капча загружается...