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.查看串口設備生成的符號鏈接。

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

  上面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

 4. .運行腳本

sudo sh create_dashgo_udev.sh

5.查看效果 

ls /dev/keysi_base

 6.在代碼中使用設備名稱

<param name="usart_port"         type="string" value="/dev/keysi_base"/>  
<param name="baud_data"          type="int"    value="115200"/>
<param name="robot_frame_id"     type="string" value="base_link"/>

7.在linux串口工具cutecom中可以查看下位機發送的數據 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章