当我们接入两个或两个以上的同类型usb设备时,内核会在/dev目录下生成对应的设备文件例如/dev/ttyUSB0,/dev/ttyUSB1。这样就会导致我们在访问设备时不知道相应的设备文件对应的是哪一个usb设备。下面讲一下几种方法来让大家能够正确的访问到想访问的设备。
方法一:
如果是临时测试可以通过手动顺序插入设备来做到区分,先插入的设备生成的设备文件编号较低,比如usb转串口设备是按照ttyUSB0,ttyUSB1这种方式逐渐生成。
方法二:
如果是想开机自动固定usb设备的名称,而且你又可以控制usb设备的上电顺序的话,你可以按照一定的顺序给usb设备上电,这样先上电的设备会被先识别,识别规则和方法一相同。
方法三:
如果你想开机自动固定名称但是又没有办法控制usb设备的上电的话可以按照下面的步骤来固定。
第一步:
终端输入:sudo vi /etc/udev/rules.d/10-local.rules,添加下面的内容(这句话是个模板,每固定一个设备把这句话复制一次,把开头的#号去掉,把KERNELS和SYMLINK改成自己想要的就可以了)。
#ACTION=="add",KERNELS=="1-2:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="name"
第二步:
查找需要 需要固定的usb设备,例如我要固定两个usb转串口的设备
输入命令:ls /sys/class/tty/ttyUSB*-l,输出结果如下
lrwxrwxrwx root root -08-01 13:40 ttyUSB0 -> ../../devices/ff540000.usb/usb3/3-1/3-1.1/3-1.1:1.0/ttyUSB0/tty/ttyUSB0
lrwxrwxrwx root root -08-01 13:43 ttyUSB1 -> ../../devices/ff540000.usb/usb3/3-1/3-1.2/3-1.2:1.0/ttyUSB1/tty/ttyUSB1=
第三步:
将需要固定的串口编号(第二步的红色部分)赋值给KERNELS,把name改为要固定的设备名字这里我改为my_serial0,my_serial1。改好之后如下,把这两句话追加到 /etc/udev/rules.d/10-local.rules文件。
ACTION=="add",KERNELS=="3-1.1:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="my_serial0"
ACTION=="add",KERNELS=="3-1.2:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="my_serial1"
保存退出。重新插拔设备(或重启)就会在/dev目录下生成固定的设备名(本实例为:/dev/my_serial0,/dev/my_serial1)。
备注:
1.固定好之后usb设备插入的usb端口不能再改变。
2.操作中如果提示权限问题,用root用户操作即可。
3.若ttyUSB设备过多找不到自己要固定的串口设备,可以对要固定的设备进行拔插,通过比较插拔前后ls /sys/class/tty/ttyUSB* -l命令输出结果来找到所需要固定的串口号。
4.此方法也适用其他usb设备的固定,例如usb摄像头。