USB hub 多usb接口重映射:udev 规则

转载 2016年06月01日 17:12:45
你在开发的过程中是否会出现 USB端口号会发生变化。 例如: 机器人底盘与雷达都是 ttyUSB* .其序号与接入的先后有关。 对于写好的launch每次修改对应接口是不是

很麻法,或者每次得先插入一个再插另外一个。才能保证ttyUSB0 ttyUSB1. 但是如果你重启系统,说不定还是有问题出现。。

        ==》 不如将端口重映射到新的固定的名字,并且设置其权限为可读。 这样不管你的先后插入,符合对应id的硬件端口自动的映射到新定义的名字。  


一. 单一的USB映射说明

  参见:http://blog.csdn.net/zyh821351004/article/details/41577105

lsusb 命令查看所有usb端口信息。 

  1. yhzhao@yhzhao:~$ lsusb   
  2. Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp.   
  3. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub  
  4. Bus 001 Device 004: ID 04f2:b48c Chicony Electronics Co., Ltd   
  5. Bus 001 Device 009: ID 046d:c31c Logitech, Inc. Keyboard K120  
  6. Bus 001 Device 010: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light  
  7. Bus 001 Device 005: ID 0bda:5411 Realtek Semiconductor Corp.   
  8. Bus 001 Device 008: ID 24ae:1100    
  9. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
udev的规则说明,可以参考博客说明:http://blog.csdn.net/cokewei/article/details/8281239

简单说明:

$kernel, %k:设备的内核设备名称,例如:sdacdrom

ID  10c4:ea60     表示usb设备的ID(这个ID由芯片制造商设置,可以唯一表示该设备)
    10c4    usb_device_descriptor.idVendor
    ea60    usb_device_descriptor.idProduct
 

依据这些信息,就可以简单的写udev规则了:rplidar.rules

sudo gedit /etc/udev/rules.d/rplidar.rules

  1. # set the udev rule , make the device_port be fixed by rplidar  
  2. #  
  3. KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="rplidar"  


创建生效后重新插拔USB。

用下面的命令就可以查看对应的映射结果了。

  1. yhzhao@yhzhao:~$ ls -l /dev |grep ttyUSB  
  2. lrwxrwxrwx  1 root   root             7 Apr 14 13:18 rplidar -> ttyUSB0  
  3. crwxrwxrwx  1 root   uucp      188,   0 Apr 14 13:18 ttyUSB0  
  4. yhzhao@yhzhao:~$   


二. USB hub的多端口映射:

同一个hub连接设备base和laser, 将其重映射换名称到  slamtec_base_  和  slamtec_laser_

  1. yhzhao@yhzhao:~$ lsusb   
  2. Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp.   
  3. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub  
  4. Bus 001 Device 004: ID 04f2:b48c Chicony Electronics Co., Ltd   
  5. Bus 001 Device 009: ID 046d:c31c Logitech, Inc. Keyboard K120  
  6. Bus 001 Device 011: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light  
  7. Bus 001 Device 012: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light  
  8. Bus 001 Device 005: ID 0bda:5411 Realtek Semiconductor Corp.   
  9. Bus 001 Device 008: ID 24ae:1100    
  10. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  


可以看到hub的信息,同时hub上连接了两个串口转USB的设备,并且两者硬件使用的是一样的, 一种是依据设备的device配合一起分别定义udev规则,同上。

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

现提供固定hub的每个端口的映射。

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

说明参见: http://askubuntu.com/questions/49910/how-to-distinguish-between-identical-usb-to-serial-adapters


可以找到hub端口的不同:

  1. yhzhao@yhzhao:~$ udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB1  
  2.   
  3. Udevadm info starts with the device specified by the devpath and then  
  4. walks up the chain of parent devices. It prints for every device  
  5. found, all possible attributes in the udev rules key format.  
  6. A rule to match, can be composed by the attributes of the device  
  7. and the attributes from one single parent device.  
  8.   
  9.   looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0/ttyUSB1':  
  10.     KERNEL=="ttyUSB1"  
  11.     SUBSYSTEM=="usb-serial"  
  12.     DRIVER=="cp210x"  
  13.     ATTR{port_number}=="0"  
  14.   
  15.   looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0':  
  16.     KERNELS=="1-2.2:1.0"  
  17.     SUBSYSTEMS=="usb"  
  18.     DRIVERS=="cp210x"  
  19.     ATTRS{bInterfaceClass}=="ff"  


  1. yhzhao@yhzhao:~$ udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0  
  2.   
  3. Udevadm info starts with the device specified by the devpath and then  
  4. walks up the chain of parent devices. It prints for every device  
  5. found, all possible attributes in the udev rules key format.  
  6. A rule to match, can be composed by the attributes of the device  
  7. and the attributes from one single parent device.  
  8.   
  9.   looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.0/ttyUSB0':  
  10.     KERNEL=="ttyUSB0"  
  11.     SUBSYSTEM=="usb-serial"  
  12.     DRIVER=="cp210x"  
  13.     ATTR{port_number}=="0"  
  14.   
  15.   looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.0':  
  16.     KERNELS=="1-2.1:1.0"  
  17.     SUBSYSTEMS=="usb"  
  18.     DRIVERS=="cp210x"  
  19.     ATTRS{bInterfaceClass}=="ff"  



#参考   http://askubuntu.com/questions/49910/how-to-distinguish-between-identical-usb-to-serial-adapters

#lsusb  

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

  1.     SUBSYSTEMS=="usb"  
  2.     DRIVERS=="cp210x"  
  3.     ATTRS{bInterfaceClass}=="ff"  
  4.     ATTRS{bInterfaceSubClass}=="00"  
  5.     ATTRS{bInterfaceProtocol}=="00"  
  6.     ATTRS{bNumEndpoints}=="02"  
  7.     ATTRS{supports_autosuspend}=="1"  
  8.     ATTRS{bAlternateSetting}==" 0"  
  9.     ATTRS{bInterfaceNumber}=="00"  
  10.     ATTRS{interface}=="CP2102 USB to UART Bridge Controller"  
  11. KERNEL=="ttyUSB*", KERNELS=="1-2.1", MODE:="0777",SYMLINK+="slamtec_base_"  
  12. KERNEL=="ttyUSB*", KERNELS=="1-2.2", MODE:="0777",SYMLINK+="slamtec_laser_"  

重新拔插。可以看到:

ls -l  /dev   

  1. yhzhao@yhzhao:~$ ls -l /dev|grep ttyUSB  
  2. lrwxrwxrwx  1 root   root             7 Apr 14 13:45 rplidar -> ttyUSB1  
  3. lrwxrwxrwx  1 root   root             7 Apr 14 13:45 slamtec_base_ -> ttyUSB0  
  4. lrwxrwxrwx  1 root   root             7 Apr 14 13:45 slamtec_laser_ -> ttyUSB1  
  5. crwxrwxrwx  1 root   uucp      188,   0 Apr 14 13:45 ttyUSB0  
  6. crwxrwxrwx  1 root   dialout   188,   1 Apr 14 13:45 ttyUSB1  





参考:http://blog.csdn.net/zyh821351004/article/details/41577105

相关文章推荐

udev的使用-minicom没有权限打开串口,更改 ttyUSB0 的权限

使用minicom打开串口会提示没有权限,必须要用 sudo,如何更改串口设备的权限可以让普通用户读写呢? 其实只要更改udev的规则, ttyUSB0 的权限为666,即可实现让普通用户可读写...
  • cokewei
  • cokewei
  • 2012年12月11日 10:36
  • 7397

USB hub 多usb接口重映射:udev 规则

USB hub 多usb接口重映射:udev 规则 你在开发的过程中是否会出现 USB端口号会发生变化。 例如: 机器人底盘与雷达都是 ttyUSB* .其序号与接入的先后有关。 对于写好的...
  • lmg2015
  • lmg2015
  • 2016年08月24日 15:44
  • 847

ROS 简单的udev rules

Udev是Linux的设备管理器,动态地创建和删除节点的硬件设备。简而言之,它有助于你的电脑很容易找到你的机器人。默认情况下,硬件设备连接到Linux(Ubuntu)电脑将属于根用户。这意味着运行的任...

添加Udev规则,让Linux自动挂载U盘(转载)

如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev...

udev的自定义规则

自2.6 核心开始,就可以使用udev 协助管理系统中各设备名称。例如,磁盘设备排序、网卡设备排序等。udev能动态地在/dev 目录里产生自定义的、标识性强的设备文件或设备链接。本文即以红旗Asia...

Gazebo与ros_control(3):Moveit输出规划轨迹到Gazebo

在上一篇中介绍了ros_control的两个应用,但是还没结束,因为规划问题是一个很重要,而且也很有挑战性的问题。好在ROS里提供了一些规划的接口,比如主要用于机械臂规划的MoveIt,其实它也可以用...
  • yaked
  • yaked
  • 2016年05月17日 16:26
  • 3222

为ROS navigation功能包添加自定义的全局路径规划器(Global Path Planner)

原链接:https://community.bwbot.org/topic/43ROS 的navigation官方功能包提供了三种全局路径规划器:carrot_planner、global_plann...

【原创】如何编写udev规则实现特定usb口设备创建指定的设备文件名?

【原创】如何编写udev规则实现特定usb口设备创建指定的设备文件名?电脑上连接了4个uvc摄像头(编号A/B/C/D),每次重启系统后摄像头对应的设备文件名(/dev/video*)都会改变,很难确...

usb hub

摘自:百度百科。 USB Hub,一种可以将一个USB接口扩展为多个(通常为4个),并可以使这些接口同时使用的装置。 先这个词分USB和hub两部分 第一、USB是英文Univers...

USB Hub Kernel Debug

Mar 26 10:19:50 localhost kernel: usb usb1: usb resume Mar 26 10:19:50 localhost kernel: ehci_hcd 00...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:USB hub 多usb接口重映射:udev 规则
举报原因:
原因补充:

(最多只允许输入30个字)