最近项目在使用树莓派,需要在树莓派上挂载多个USB转串口模块,但是linux下识别USB设备通常是按照插入顺序命名的,比如第一个插入就是USB0第二个USB1如此类推。。。这样就给我们写脚本或者写程序上添加不少难度,因为存在开机时设备名不稳定随时改变的可能。
这时候我们就可以用到udev规则,就可以实现给在特定的USB端口上的特定设备一个自定义的设备文件链接。
参考:
http://lnmcc.net/2014/03/14/%E4%BD%BF%E7%94%A8udev%E8%A7%84%E5%88%99%E5%9B%BA%E5%AE%9A%E8%AE%BE%E5%A4%87%E5%90%8D/
实现:
终端输入udevadm info --attribute-walk --name=/dev/video0
然后会有一大堆东西打出来
KERNELS=="1-1.3:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="cp210x"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceSubClass}=="00"
ATTRS{bInterfaceProtocol}=="00"
ATTRS{bNumEndpoints}=="02"
ATTRS{authorized}=="1"
ATTRS{supports_autosuspend}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceNumber}=="00"
ATTRS{interface}=="CP2102 USB to UART Bridge Controller"
我们需要的是这一段
接着在/etc/udev/rules.d下建立一个60-USBSerial.rules的文件,内容:
ACTION=="add",KERNELS=="1-1.x:1.0(物理端口)",SUBSYSTEMS=="usb",DRIVERS=="cp210x",SYMLINK+="MY_Serial"
重启udev服务:
/etc/init.d/udev restart
到这里就可以实现上述功能。