这里我有2个usbserial硬件模块,并且规定一次只能使用一个.
1. 0403:6014
2. 0403:6001
我还想确保设备可以通过R / W访问“plugdev”组
对于设备0403:6014,我不想使用内置的usbserial(ftdi_sio)驱动程序.我想使用FTD2XXX库访问此设备.
对于设备0403:6001,我想使用inbulit usbserial(ftdi_sio)驱动程序.我试图找到一种共同的方法来实现这一目标.
到目前为止我试过的路线.由于,0403:6001设备使用内置的linux驱动程序,我试图在加载时删除/ blacklist(0403:6014)驱动程序
>试用1
ACTION ==“add”,SUBSYSTEMS ==“usb”,KERNEL ==“ttyUSB *”,ATTRS {idVendor} ==“0403”,ATTRS {idProduct} ==“6014”,
RUN =“/usr/local/bin / rmmod.sh 4”,GROUP =“plugdev”
这将删除加载的FTDI驱动程序,但不会将设备组从ROOT更改为PLUGDEV
因此,解决该问题又增加了一条规则行
>试用2
SUBSYSTEM ==“usb”,ENV {DEVTYPE} ==“usb_device”,MODE =“0664”,ATTRS {idVendor} ==“0403”,ATTRS {idProduct} ==“6014”,GROUP =“plugdev”
ACTION ==“add”,SUBSYSTEMS ==“usb”,KERNEL ==“ttyUSB *”,ATTRS {idVendor} ==“0403”,ATTRS {idProduct} ==“6014”,RUN =“/usr/local/bin / rmmod.sh 4“
此试用版将我的设备GROUP设置为“plugdev”,但这不会删除内核usbserial模块.
>试用3
SUBSYSTEM ==“usb”,ENV {DEVTYPE} ==“usb_device”,MODE =“0664”,ATTRS {idVendor} ==“0403”,ATTRS {idProduct} ==“6014”,GROUP =“plugdev”
将ftdi_sio添加到/etc/modprobe.d/blacklist.conf,但是这个将我的0403:6001完全列入黑名单.
这种方法适用于0403:6014,但这完全贬低了我的0403:6001设备
请求一些指导来解决此问题
解决方法:
我遇到了几乎相同的问题,并完成了源自sourcejedi的脚本.我没有必要传递设备路径,因为udev已经通过环境提供了相当多的信息(如果你想知道你的脚本收到了什么,请使用export> / tmp / vars).特别是,我使用$DEVNAME,它是/ dev下的设备名称(例如ttyUSB0).
/etc/udev/rules.d/ftdi.rules
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", KERNEL=="ttyUSB*" RUN+="/etc/udev/scripts/unbind_ftdi.sh"
/etc/udev/scripts/unbind_ftdi.sh
#!/bin/sh
# traverse sysfs to find the USB ID
# of the USB device which is parent/ancestor of ttyUSB*
# something like "1-1.6:1.0"
TTYDEV=$(basename $DEVNAME)
BOUND_DEVICES=/sys/bus/usb/drivers/ftdi_sio/*/
for DEVICE in ${BOUND_DEVICES}; do
if [ -e $DEVICE/$TTYDEV ]; then
USBID=$(basename $DEVICE)
break
fi
done
echo "$USBID" > /sys/bus/usb/drivers/ftdi_sio/unbind
标签:drivers,linux,debian,usb,devices
来源: https://codeday.me/bug/20190816/1671908.html