Ubuntu16.04下串口配置设备绑定USB端口号(一定要看终极版)

      Ubuntu USB设备号为从零开始依次累加,当多个设备连接PC时,出现设备号不固定现象,要求工控机每次开机都需要按顺序插。为了解决这一现象,需要绑定USB端口号。

      有一种方法是:udev的规则,可以参考博客说明:http://blog.csdn.net/cokewei/article/details/8281239

      udev的规则说明,可以参考博客说明:http://blog.csdn.net/cokewei/article/details/8281239

将端口重映射到新的固定的名字,并且设置其权限为可读。使用对应的id端口映射到固定的名字上。

1

lsusb

查看对应的usb端口信息

1

2

3

4

5

6

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

Bus 001 Device 004: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

Bus 001 Device 003: ID 05e3:0608 Genesys Logic, Inc. Hub

Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

      ID 1a86:7523 表示usb设备的ID(这个ID由芯片制造商设置,可以唯一表示该设备)
      1a86 usb_device_descriptor.idVendor
     7523 usb_device_descriptor.idProduct
2.在/etc/udev/rules.d/下创建任意名称的规则配置文件,如:usb.rules。

  sudo vi /etc/udev/rules.d/usb.rules 

KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="usb"

  

保存完成后,以root权限打开终端执行

    service udev reload

    service udev restart

   创建生效后重新插拔USB.

3.查看串口设备生成的符号链接。

Ubuntu16.04下串口配置设备绑定USB端口号(一定要看终极版)_第1张图片

4.创建生效后重新插拔USB

1

ls -l /dev |grep ttyUSB

工控机连接两个usb串口,一个是rplidar,所对应的是ttyUSB1;另外一个是usb,所对应的是ttyUSB0。

非常尴尬的是,重新启动工控机时,不知道usb先启动,还是rplidar先启动?哪个先启动,哪个就是ttyUSB0。

 

终极版(2019年6月27日改):

        现在终于搞定了 。为了不让我们的usb设备在使用时,由于设备节点注册的ID不同,设备名称会不同,设备如何在 Linux 中永久修改 USB 设备权限。

1.创建一个脚本文件

touch create_dashgo_udev.sh

  gedit  create_dashgo_udev.sh

2. 在文件中添加如下内容

echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0777", GROUP:="dialout",  SYMLINK+="keysi_base"' >/etc/udev/rules.d/keysi_base.rules

service udev reload
sleep 2
service udev restart

3.查看自己设备的idVendor和idProduct

 

lsusb -vvv

Ubuntu16.04下串口配置设备绑定USB端口号(一定要看终极版)_第2张图片

  上面lsusb的输出中,找出你的 USB 设备,并找出"idVendor"和"idProduct"字段。本例中,我们的结果是idVendor (0x067b)和 idProduct (0x2303)。修改上面的create_dashgo_udev.sh文件

udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0

SUBSYSTEMS=="usb"  
        DRIVERS=="cp210x"  
        ATTRS{bInterfaceClass}=="ff"  
        ATTRS{bInterfaceSubClass}=="00"  
        ATTRS{bInterfaceProtocol}=="00"  
        ATTRS{bNumEndpoints}=="02"  
        ATTRS{supports_autosuspend}=="1"  
        ATTRS{bAlternateSetting}==" 0"  
        ATTRS{bInterfaceNumber}=="00"  
        ATTRS{interface}=="CP2102 USB to UART Bridge Controller"  
    KERNEL=="ttyUSB*", KERNELS=="1-2.1", MODE:="0777",SYMLINK+="slamtec_base_"  
    KERNEL=="ttyUSB*", KERNELS=="1-2.2", MODE:="0777",SYMLINK+="slamtec_laser_"

像我们公司的串口找不到 idVendor和idProduct的话,可以

lsusb

Ubuntu16.04下串口配置设备绑定USB端口号(一定要看终极版)_第3张图片

 4. .运行脚本

sudo sh create_dashgo_udev.sh

5.查看效果 

ls /dev/keysi_base

 6.在代码中使用设备名称

  

7.在linux串口工具cutecom中可以查看下位机发送的数据 

Ubuntu16.04下串口配置设备绑定USB端口号(一定要看终极版)_第4张图片

 参考博文:http://www.cnblogs.com/zxouxuewei

 

你可能感兴趣的:(ubuntu16.04,ROS)