我在测试条形码扫描仪时遇到了一个奇怪的问题。我先告诉您,除了系统提示的信息外,我不知道该设备的品牌或型号。
当我将其插入时,设备根本没有反应(通常,扫描仪会闪烁、发出哔哔声......你明白了),但它以某种方式被系统识别(Ubuntu 15.10 64Bit):
dmesg 的输出:
[ 4499.987323] usb 1-2: new full-speed USB device number 11 using xhci_hcd
[ 4500.116992] usb 1-2: New USB device found, idVendor=05e0, idProduct=1900
[ 4500.117000] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 4500.117003] usb 1-2: Product: Symbol Bar Code Scanner
[ 4500.117006] usb 1-2: Manufacturer: Symbol Technologies, Inc, 2008
[ 4500.117009] usb 1-2: SerialNumber: S/N:B78495535C643D4AAC4AD8C7C803D91A Rev:PAABLS00-003-R009
[ 4500.121560] hid-generic 0003:05E0:1900.000F: hiddev0,hidraw1: USB HID v1.10 Device [Symbol Technologies, Inc, 2008 Symbol Bar Code Scanner] on usb-0000:00:14.0-2/input0
USB 设备的输出:
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 11 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=05e0 ProdID=1900 Rev=01.00
S: Manufacturer=Symbol Technologies, Inc, 2008
S: Product=Symbol Bar Code Scanner
S: SerialNumber=S/N:B78495535C643D4AAC4AD8C7C803D91A Rev:PAABLS00-003-R009
C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=00 Driver=(none)
但它似乎没有被视为输入设备(xinput list
),因为当我插入任何其他条形码扫描仪(例如,Honeywell Eclipse)时就会发生这种情况:
↳ Honeywell Scanning and Mobility Honeywell Scanning and Mobility Scanner id=16 [slave keyboard (3)]
据我所知,该设备在 Windows 7 中运行正常,并使用以下驱动程序:
Symbol SNAPI USB Imaging Driver v1.1.2 似乎不适用于 Linux。
所以基本上我在这里完全迷失了,不知道如何继续......任何帮助都将不胜感激!
问候
答案1
因此,我终于解决了这个问题,事实证明它也可以帮助其他设备,例如客户显示器,并且通常可以帮助任何其他不会自动映射到 ttyUSBX 的“串行到 USB”设备。
主要问题似乎是ftdi_sio 驱动程序(串行到 USB 驱动程序)无法自动识别特定设备,但 USB 子系统 (lsusb) 可以识别。此外,根据发行版的不同,此内核模块可能会加载,也可能不会加载。因此,我们的目标是:
- 如果需要,加载 ftdi_sio 驱动程序
- 将我们的产品注册到 ftdi_sio 驱动程序中
加载 ftdi_sio 驱动程序
如果已加载,lsmod | grep "ftdi_sio"
命令应在终端提示符中输出类似这样的内容:
ftdi_sio 53248 0
usbserial 53248 1 ftdi_sio
否则,我们必须加载它:
- 临时,通过发出命令
sudo modprobe ftdi_sio
ftdi_sio
永久地,通过在文件末尾添加行/etc/modules
(在非 Debian 发行版中可能会有所不同!)并重新启动。
将我们的产品注册到 ftdi_sio 驱动程序中
好的,现在模块应该已经加载了。现在,我们需要将产品注册到驱动程序中。这是比较愚蠢的部分,因为有些供应商会告诉您发出以下命令:
modprobe ftdi_sio vendor=05e0 product=1900
在哪里小贩和产品是您通过发出例如命令从 USB 子系统获取的值,usb-devices
前面带有“0x”;
但根据这个犯罪从内核 3.12 开始,这完全没有任何作用:
删除很久以前在我们没有动态 sysfs 接口来添加新设备 ID(并且不限于单个新的 vid/pid 对)时添加的供应商和产品模块参数。
可以使用 sysfs 动态添加 vid/pid 对,例如:
echo 0403 1234 >/sys/bus/usb-serial/drivers/ftdi_sio/new_id
还修复了导致 sysfs 路径错误的代码内注释。
签名人:Johan Hovold 签名人:Greg Kroah-Hartman
因此,根据这些信息,您需要做的就是发出以下命令:
echo 05e0 1900 >/sys/bus/usb-serial/drivers/ftdi_sio/new_id
现在不记得之后是否需要重新启动,但如果设备在重新启动后不能立即工作,请记住这一点。
概括
幸运的是,我爱我的工作胜过爱我的妻子。(OMF 语录 ;-))