我需要使用自定义Linux (v5.8)处理HID设备(条形码读取器)。
我有一个模块化的内核,与其他USB外设(存储和串行已知工作)工作,但我似乎无法扫描这台设备。
将其插入桌面(Linux "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只显示根集线器,即使我手动地使用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我显然错过了什么,但我似乎无法理解什么。我该核对些什么?
注:请随时询问相关细节,我并没有把太多的东西放在这里只是为了避免混乱,但我充分准备提供所有的信息被认为有用。
发布于 2020-11-03 18:29:57
结果表明,即使是连接到USB2 (EHCI)控制器,也需要执行低速外设。
实际上,MT7628有一个“次要”的人权高专办控制器,甚至没有在数据表中做广告。
这意味着,除了选择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 = <&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控制器。
我希望这会给那些在同样的问题上绊倒的人留下很多麻烦。
https://stackoverflow.com/questions/64445738
复制相似问题