Проблемы с внешним USB-хабом в ARM linux

Устройство на основе SoC Allwinner F1C200s. Эта SoC имеет 1 USB OTG порт. Необходимо подключать как минимум клавиатуру и мышь, поэтому используется внешний USB хаб *4 на чипе HS8836A .

Любые USB устройства подключаются без ошибок, но в некоторых комбинациях работают неправильно.

Если подключить 2 USB Flash диска, то работают оба, но если любое из устройств USB клавиатура или мышь, то возникают проблемы, например:

1 случай. Подключаем USB Flash - работает (монтируется). Подключаем второй USB Flash - работают оба.

2 случай . Подключаем USB Flash - работает. Подключаем клавиатуру (мышь) : USB Flash работает, клавиатура (мышь) не работает, хотя определяется без ошибок.

3 случай. Подключаем клавиатуру (мышь) - работает. Любое второе подключенное устройство - не работает.

"не работает" - это значит, счетчик прерываний от контроллера USB (cat /proc/interrupts) не изменяется, если на подключенной вторым устройством клавиатуре (мыши) нажимать кнопки (двигать).

Похоже, второе подключенное устройство не опрашивается правильно, даже если подключено без ошибок.

В F1C200s USB контроллер это Inventra MUSB HDRC (Highspeed Dual Role Controller ). Система собрана в Buildroot, init - BusyBox. Ядро 5.4.66 .

В другом устройстве на той же SoC внешний USB-хаб на чипе FE1.1s . Проблемы те же.

Я не знаю, что влияет на работу при подключении USB клавиатуры или мыши, в отличие от USB Flash:

  • это "устройство ввода"
  • это "устройство HID"
  • это "устройство 'low speed' "

Вопрос, какой драйвер в USB-фреймворке ядря linux фактически осуществляет опрос устройств? Core ? hub ? или драйвера (HID, SCSI ...) ? или контроллер на аппаратном уровне? Я попытался для локализации проблемы вставить в исходники ядра в драйвера ветки USB строки printk, в места, где упоминается 'poll', но так и не нашел место с циклом опроса.


Ответы (0 шт):