Другое

Решение проблемы сенсора инфокиоска в RHEL

Как исправить неработающий сенсор инфокиоска после установки Red Hat Enterprise Linux? Пошаговое решение проблемы с ошибкой USB -32 и настройкой IOMMU.

Как решить проблему с неработающим сенсором инфокиоска после установки Red Hat Enterprise Linux?

Проблема: Инфокиоск, который ранее стабильно работал под управлением Windows, перестал функционировать после установки Red Hat Enterprise Linux. Конкретно, сенсорное управление перестало работать.

Предпринятые шаги по устранению проблемы:

  1. Очистка сенсора от загрязнений
  2. Переустановка операционной системы
  3. Попытка включения IOMMU (не удалось, вероятно, из‑за отсутствия поддержки на плате)

Системные ошибки:

usb 2-1-3: new low-speed USB device number 23 using ehci-pci
usb 2-1-3: device descriptor read/64, error -32
usb 2-1-3: device descriptor read/64, error -32
usb 2-1-3: new low-speed USB device number 24 using ehci-pci
usb 2-1-3: device descriptor read/64, error -32
usb 2-1-3: device descriptor read/64, error -32
usb 2-1-port3: attempt power cycle
usb 2-1-3: new low-speed USB device number 25 using ehci-pci
usb 2-1-3: device not accepting address 25, error -32
usb 2-1-3: new low-speed USB device number 26 using ehci-pci
usb 2-1-3: device not accepting address 26, error -32

Дополнительная информация:

  • Сенсор был протестирован на других компьютерах с Red Hat Enterprise Linux 7.3 (последняя версия ядра)
  • На некоторых компьютерах сенсор работает, на других – нет
  • На компьютерах, где сенсор работает, IOMMU функционирует корректно
  • Вероятно, проблема связана с отключенным IOMMU на инфокиоске
  • Пробовали разные USB‑порты – результат тот же
  • Другие USB‑устройства распознаются нормально

Помогите решить данную проблему, так как все попытки самостоятельно устранить неисправность оказались безуспешными.

The error “device descriptor read/64, error -32” indicates USB communication protocol issues between your infokiosk touchscreen and Red Hat Enterprise Linux, commonly caused by IOMMU hardware virtualization being disabled or misconfigured. To resolve this touchscreen problem, you’ll need to enable IOMMU in your system’s BIOS/UEFI settings, verify kernel parameters related to USB and IOMMU functionality, and potentially adjust USB controller settings.

Содержание

Что означает ошибка -32 в логах системы

Ошибка “device descriptor read/64, error -32” указывает на проблемы с USB‑протоколом коммуникации между устройством и хост‑системой. Как объясняют специалисты на Stack Overflow, это означает, что USB‑устройство не отвечает корректно на запросы хост‑системы, отправляя данные в неверном формате или недостаточное количество данных.

В контексте вашего инфокиоска эта ошибка проявляется как:

  • Устройство не может быть корректно распознано системой
  • Процесс перечисления USB‑устройства (enumeration) прерывается
  • Сенсорное управление становится недоступным

Важно: Ошибка -32 не является фатальной для системы в целом, но критична для работы конкретных USB‑устройств, особенно сенсорных панелей, требующих точной инициализации.

Основные причины неработающего сенсора

Исходя из вашего описания и анализа системных логов, можно выделить несколько основных причин проблемы:

1. Отключенный IOMMU

Как вы правильно заметили, проблема, вероятно, связана с отключенным IOMMU (Input/Output Memory Management Unit) на вашем инфокиоске. IOMMU отвечает за виртуализацию доступа к устройствам ввода‑вывода.

2. Несовместимость USB‑контроллера

Некоторые USB‑контроллеры могут иметь проблемы с низкоскоростными устройствами (в вашем случае – low‑speed USB device), особенно при работе с сенсорными панелями.

3. Проблемы с питанием USB‑порта

Согласно обсуждениям на Reddit, ошибка -32 может возникать при недостаточном питании USB‑порта.

4. Проблемы с драйверами

Недостаточная поддержка специфических USB‑идентификаторов сенсора в ядре Linux.

Проверка и включение IOMMU

Поскольку вы упомянули, что IOMMU, вероятно, отключен на плате инфокиоска, выполните следующие шаги:

1. Проверка текущего статуса IOMMU

bash
# Проверьте, загружен ли модуль IOMMU
lsmod | grep -i iommu

# Проверьте наличие групп IOMMU
ls /sys/kernel/iommu_groups/

2. Включение IOMMU в BIOS/UEFI

  1. Перезагрузите инфокиоск
  2. Войдите в BIOS/UEFI (обычно клавиши F2, F10, Del)
  3. Найдите раздел “Advanced” → “CPU Configuration” или “Chipset”
  4. Установите параметры:
    • Intel VT-d или AMD-Vi в значение Enabled
    • IOMMU в Enabled

3. Проверка параметров загрузки ядра

Откройте файл /etc/default/grub и найдите строку GRUB_CMDLINE_LINUX:

bash
nano /etc/default/grub

Добавьте параметры:

GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt"

Для AMD‑систем замените intel_iommu=on на amd_iommu=on.

Обновите конфигурацию GRUB:

bash
grub2-mkconfig -o /boot/grub2/grub.cfg

Настройка параметров ядра Linux

Дополнительно настройте параметры ядра для улучшения USB‑совместимости:

1. Параметры USB‑поддержки

Отредактируйте файл /etc/default/grub, добавив:

GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt usbhid.quirks=0x1234:0x5678:0x4"

Где 0x1234:0x5678:0x4 – это VID:PID вашего сенсора и параметры quirk (0x4 = ignore device).

2. Модули USB

Создайте файл /etc/modprobe.d/usb-quirks.conf:

bash
# Для проблемных USB‑контроллеров
options usbcore autosuspend=-1

# Для сенсорных панелей
options hid_multitouch debug_mask=1

3. Перезагрузите систему

bash
reboot

Проверка USB‑контроллера

Поскольку проблема может быть связана с конкретным USB‑контроллером, выполните следующие проверки:

1. Идентификация USB‑контроллера

bash
lsusb -t

2. Проверка драйверов USB

bash
# Проверьте драйверы для USB‑контроллеров
lspci -k | grep -i usb

# Проверьте статус USB‑хабов
dmesg | grep -i usb

3. Отключение энергосбережения USB

bash
# Отключите энергосбережение для USB‑портов
echo 'on' > /sys/bus/usb/devices/usb*/power/control

Альтернативные решения

Если стандартные методы не помогли, рассмотрите следующие альтернативы:

1. Использование USB‑хаба с внешним питанием

Подключите сенсор через USB‑хаб с отдельным источником питания. Это может решить проблемы с питанием USB‑порта.

2. Принудительное назначение драйвера

Создайте udev‑правило для принудительного назначения драйвера:

bash
# Создайте файл /etc/udev/rules.d/99-touchscreen.rules
SUBSYSTEM=="hid", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", DRIVER=="", DRIVER="hid-multitouch"

3. Ручная загрузка модулей

Добавьте в автозагрузку необходимые модули:

bash
echo "hid_multitouch" >> /etc/modules
echo "usbhid" >> /etc/modules

Диагностика и тестирование

После внесения изменений выполните полную диагностику:

1. Проверка распознавания устройства

bash
# Мониторинг USB‑событий в реальном времени
udevadm monitor --environment

# Проверка HID‑устройств
ls /sys/class/input/

2. Тестирование сенсора

Используйте инструменты для тестирования сенсорных панелей:

bash
# Для X11
evtest

# Для Wayland
libinput debug-events

3. Анализ логов

bash
# Фильтрация USB‑ошибок
journalctl -k | grep -i "usb.*error.*-32"

# Полный анализ USB‑событий
dmesg | grep -i usb | tail -50

Источники

  1. USB device enumeration fails: “device descriptor read/64, error -32” - Stack Overflow
  2. 1334955 – USB not reconnecting devices: device descriptor read/all, error -32 - Red Hat Bugzilla
  3. System shows lots of usb errors with status -32 - Red Hat Customer Portal
  4. How to Identify and Assign IOMMU Groups - Red Hat Documentation
  5. List IOMMU Groups and the connected USB Devices - GitHub
  6. USB error -110 or -71 is presented whenever a USB device is connected to a RHEL system - Red Hat Customer Portal
  7. ERROR: device descriptor read/64, error -32 - Ask Ubuntu

Заключение

Для решения проблемы неработающего сенсора инфокиоска в Red Hat Enterprise Linux необходимо предпринять следующие действия:

  1. Включите IOMMU в BIOS/UEFI – это наиболее вероятное решение вашей проблемы, учитывая, что на других системах с работающим IOMMU сенсор функционирует нормально.
  2. Добавьте параметры ядра intel_iommu=on iommu=pt в конфигурацию GRUB для правильной инициализации виртуализации ввода‑вывода.
  3. Проверьте USB‑контроллер и его драйверы – убедитесь, что контроллер корректно обрабатывает низкоскоростные устройства.
  4. Используйте внешне питаемый USB‑хуб как временное решение для тестирования проблем с питанием.
  5. Создайте udev‑правила для принудительного назначения правильного драйвера вашему сенсорному устройству.

Если после выполнения этих шагов проблема сохраняется, рекомендуется проверить совместимость конкретной модели инфокиоска с Red Hat Enterprise Linux и рассмотреть возможность использования более новой версии RHEL с улучшенной поддержкой USB‑устройств.

Авторы
Проверено модерацией
Модерация