启用隐藏输入的最小 Linux 内核选项

Minimal Linux kernel options to enable hid input

我需要使用自定义 Linux (v5.8) 处理 HID 设备(条形码 reader)。

我有一个模块化的内核,它可以像预期的那样与其他 USB 外设一起工作(已知存储和串口可以工作),但我似乎无法扫描这个设备。

将其插入桌面(Linux Mint“Ulyana”,如果重要的话)我得到一个正常的枚举:

[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 仅显示根 HUB,即使我手动 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

我显然遗漏了什么,但我似乎无法理解是什么。 我应该交叉检查什么?

注意:请随时询问相关细节,我没有在这里放太多东西只是为了避免混乱,但我已做好充分准备提供所有有用的信息。

原来 需要 OHCI 驱动程序来处理低速外设,即使它们连接到 USB2 (EHCI) 控制器。

实际上 MT7628 有一个“辅助”OHCI 控制器,甚至没有在数据中公布 Sheet。

这意味着,除了选择 CONFIG_USB_OHCI_HCD=mCONFIG_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 = <&usb_phy>;
+       phy-names = "usb";
+
+       interrupt-parent = <&intc>;
+       interrupts = <18>;
+   };
+
    ethernet: ethernet@10100000 {
        compatible = "ralink,rt5350-eth";
        reg = <0x10100000 0x10000>;

注意地址 101c1000 在 MT7628 编程手册中没有提及,它与标准(和记录的)EHCI 控制器单元(位于 101c0000)“一个单元格”(0x1000)。

我假设其他 SoC 也存在类似情况,因为 USB 标准要求将低速设备“移交给”旧版 USB1 控制器。

我希望这会减轻遇到同样问题的人的头痛。