Минимальные параметры ядра Linux для включения скрытого ввода

#linux-kernel #usb #embedded-linux #hid

#linux-ядро #usb #встроенный-linux #скрытый

Вопрос:

Мне нужно обработать устройство HID (считыватель штрих-кодов) с помощью пользовательского Linux (v5.8).

У меня модульное ядро, которое работает, как и ожидалось, с другими периферийными устройствами USB (известно, что хранилище и последовательный порт работают), но, похоже, я не могу просканировать это устройство.

Подключаем его к рабочему столу (Linux Mint «Ульяна», если это имеет значение) Я получаю обычное перечисление:

 [525428.367216] usb 1-11: new full-speed USB device number 9 using xhci_hcd
[525428.517071] usb 1-11: New USB device found, idVendor=05e0, idProduct=1200, bcdDevice= 1.00
[525428.517077] usb 1-11: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[525428.517080] usb 1-11: Product: Symbol Bar Code Scanner
[525428.517083] usb 1-11: Manufacturer: Symbol Technologies, Inc, 2008
[525428.517086] usb 1-11: SerialNumber: S/N:0641F625A3A943949AF00BAB171ABFE2 Rev:PAACFS00-001-R023
[525428.519932] input: Symbol Technologies, Inc, 2008 Symbol Bar Code Scanner as /devices/pci0000:00/0000:00:14.0/usb1/1-11/1-11:1.0/0003:05E0:1200.0005/input/input32
[525428.579736] hid-generic 0003:05E0:1200.0005: input,hidraw4: USB HID v1.10 Keyboard [Symbol Technologies, Inc, 2008 Symbol Bar Code Scanner] on usb-0000:00:14.0-11/input0
  

В то время как на моей цели я не вижу никаких признаков нового периферийного устройства; lsusb отображает только корневой концентратор, даже когда я вручную modprobe (как я думаю) соответствующие модули:

 # lsusb
Bus 001 Device 001: ID 1d6b:0002
# lsmod
Module                  Size  Used by    Not tainted
usbhid                 23296  0 
usbmon                 19424  0 
mt7603e                38048  0 
mt76                   31648  1 mt7603e
mac80211              380000  2 mt7603e,mt76
sha256_generic          2240  0 
libsha256               8480  1 sha256_generic
ehci_platform           4704  0 
cfg80211              236736  3 mt7603e,mt76,mac80211
ehci_hcd               37936  1 ehci_platform
rfkill                  8544  1 cfg80211
usbcore               143456  4 usbhid,usbmon,ehci_platform,ehci_hcd
libarc4                  832  1 mac80211
mtk_eth                30208  0 
usb_common              2768  3 usbmon,ehci_platform,usbcore
  

Я, очевидно, что-то упускаю, но, похоже, не могу понять, что.
Что я должен перепроверить?

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

Комментарии:

1. USB-сканеры штрих-кодов обычно выглядят как клавиатуры, которые обычно не создают узлы устройств.

2. @stark подтверждено. Этот сканер работает в «режиме эмуляции клавиатуры». Мне непонятно, что вы пытаетесь сказать; не могли бы вы уточнить, пожалуйста? на рабочем столе я вижу: «Bus 001 Device 009: ID 05e0: 1200 Symbol Technologies Сканер штрих-кода», в то время как на цели я ничего не вижу, и сканер не работает, даже звуковой сигнал при запуске, как будто он вообще не включен.

3. Вы уверены, что ваша цель обеспечивает достаточную мощность?

4. @stark: Да. Это же оборудование работает с древней версией ядра (3,18 тонны исправлений поставщика). Я пытаюсь перейти на современную сборку (для несвязанных проблем), и это одна из последних вещей, оставшихся для «переноса». К сожалению, конфигурация ядра изменилась достаточно, чтобы затруднить сравнение.

5. Можете ли вы попробовать подключить что-то еще, или это жестко подключено?

Ответ №1:

Оказывается, драйвер OHCI необходим для работы с низкоскоростными периферийными устройствами, даже если они подключены к контроллеру USB2 (EHCI).

На самом деле MT7628 имеет «вторичный» контроллер OHCI, который даже не указан в спецификации.

Это означает, что помимо выбора CONFIG_USB_OHCI_HCD=m , а CONFIG_USB_OHCI_HCD_PLATFORM=m также необходим следующий патч:

 diff --git a/arch/mips/boot/dts/ralink/mt7628a.dtsi b/arch/mips/boot/dts/ralink/mt7628a.dtsi
index bf6b6a459bd6..b4ac008fdfdf 100644
--- a/arch/mips/boot/dts/ralink/mt7628a.dtsi
    b/arch/mips/boot/dts/ralink/mt7628a.dtsi
@@ -323,6  323,17 @@ ehci@101c0000 {
        interrupts = <18>;
    };
 
    ohci@101c1000 {
        compatible = "generic-ohci";
        reg = <0x101c1000 0x1000>;
 
        phys = <amp;usb_phy>;
        phy-names = "usb";
 
        interrupt-parent = <amp;intc>;
        interrupts = <18>;
    };
 
    ethernet: ethernet@10100000 {
        compatible = "ralink,rt5350-eth";
        reg = <0x10100000 0x10000>;
  

Примечание. Адрес 101c1000 нигде не упоминается в руководстве по программированию MT7628, и он находится «на расстоянии одной ячейки» (0x1000) от стандартной (и документированной) ячейки контроллера EHCI (в 101c0000).

Я предполагаю, что аналогичная ситуация справедлива и для других SoC, поскольку стандарт USB предписывает «передавать» низкоскоростные устройства на устаревший контроллер USB1.

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