![USB 转串口设备不会分配 CP210x 驱动程序](https://linux22.com/image/91577/USB%20%E8%BD%AC%E4%B8%B2%E5%8F%A3%E8%AE%BE%E5%A4%87%E4%B8%8D%E4%BC%9A%E5%88%86%E9%85%8D%20CP210x%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F.png)
我在 RPi2 上运行 Jessie Lite。当我将 USB 连接到串行设备时,它确实会显示,但未分配驱动程序。
lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
|__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
|__ Port 3: Dev 13, If 0, Class=Vendor Specific Class, Driver=, 12M
来自 Silicon Labs 的 CP210x 驱动程序似乎已安装:
lsmod
Module Size Used by
cp210x 9419 0
usbserial 29964 1 cp210x
现在我尝试手动绑定但没有成功:
echo -n "1-1.3:1.0" > /sys/bus/usb/drivers/cp210x/bind
write error: No such device
由于我对 Linux 相当陌生,并且我需要运行它,因此我将不胜感激您的建议。旁注:我有一个在 Windows 机器上运行的小 Python 脚本,它能够很好地与该设备通信......
该设备就在那里,我不明白为什么没有找到它:
tree /sys/bus/usb/devices/
├── 1-1.3 -> ../../../devices/platform/soc/20980000.usb/usb1/1-1/1-1.3
├── 1-1.3:1.0 -> ../../../devices/platform/soc/20980000.usb/usb1/1-1/1-1.3/1-1.3:1.0
附加信息可能usb-devices
有助于发现问题吗?
T: Bus=01 Lev=02 Prnt=02 Port=04 Cnt=02 Dev#= 6 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=18ef ProdID=e030 Rev=01.00
S: Manufacturer=Silicon Labs
S: Product=ALC 8500 Expert
S: SerialNumber=3ENAEFJAVJCO9AQQ
C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
答案1
向 udev 添加一条规则,自动加载 USB 设备的驱动程序。
所需资料:
- USB 设备 PID/VID 号。
lsusb
输出。不以树模式显示。lsusb -t
- 设备驱动程序
modprobe
命令。/sbin/modprobe usb-storage
创建 udev 规则。
在下面添加您自己的规则文件/etc/udev/rules.d
sudo vi /etc/udev/rules.d/80-serialToUsb_VID-PID.rules
当您添加 udev 规则时。这将允许 udev 在 USB 插入时自动加载任何列出了 vid/pid 的设备的驱动程序。
- 代替#视频#与您设备的 VID。
- 代替#PID#与您设备的 PID。
- 代替#司机#使用加载模块的命令。
- 代替#系统#
new_id
以及该目录下驱动程序文件的位置/sys
。
ACTION=="add", ATTRS{idVendor}=="#VID#", ATTRS{idProduct}=="#PID#", RUN+="#DRIVER#" RUN+="/bin/sh -c 'echo #VID# #PID# > #SYS#'"
重新启动udev
sudo /etc/init.d/udev restart
连接设备并用于dmesg
验证
这是我用于自定义 mp3 播放器的示例。
ACTION=="add", ATTRS{idVendor}=="a000", ATTRS{idProduct}=="a000", RUN+="/sbin/modprobe usb-storage" RUN+="/bin/sh -c 'echo a000 a000 > /sys/bus/usb/drivers/usb-storage/new_id'"
还有一个自定义 Silicon Labs 串口转 USB 设备的示例:
ACTION=="add", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="84a0", RUN+="/usr/sbin/modprobe cp210x" RUN+="/bin/sh -c 'echo 10c4 84a0 > /sys/bus/usb-serial/drivers/cp210x/new_id'"
这适用于 Debian 8 和 Ubuntu 14。
您正在使用 Debian lite。所以,我不能 100% 确定这对你有用。
我有一个飞思卡尔嵌入式设备 mx23,它使用mdev
代替udev
,过程有点不同。