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

news/2024/11/22 18:07:00/

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

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

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

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


一. 单一的USB映射说明

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

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

[cpp]  view plain  copy
 
print ? 在CODE上查看代码片 派生到我的代码片
  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  
[cpp]  view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  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

[cpp]  view plain  copy
 
print ? 在CODE上查看代码片 派生到我的代码片
  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"  
[cpp]  view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  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。

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

[cpp]  view plain  copy
 
print ? 在CODE上查看代码片 派生到我的代码片
  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:~$   
[cpp]  view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  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_

[cpp]  view plain  copy
 
print ? 在CODE上查看代码片 派生到我的代码片
  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  
[cpp]  view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  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端口的不同:

[cpp]  view plain  copy
 
print ? 在CODE上查看代码片 派生到我的代码片
  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"  
[cpp]  view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  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"  


[cpp]  view plain  copy
 
print ? 在CODE上查看代码片 派生到我的代码片
  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"  
[cpp]  view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  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

[html]  view plain  copy
 
print ? 在CODE上查看代码片 派生到我的代码片
  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_"  
[html]  view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  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   

[cpp]  view plain  copy
 
print ? 在CODE上查看代码片 派生到我的代码片
  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  
[cpp]  view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  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


http://www.ppmy.cn/news/334977.html

相关文章

USB HUB 方案

MA8608 USB 2.0 High Speed 4-Port Hub Controller ( USB 2.0高速端口集线器控制器) 描述: MA8608是USB 2.0高速端口集线器控制器的高性能解决方案,与通用串行总线规范2.0完全兼容。当4个DS(下游)端口同时作用时,控…

linux 贝尔金usb网卡,完全无线!贝尔金USB Hub与无线路由搭配实战

1拆包USB HUB 上阵子给高飞猪当了一回模特,拍了一出Network USB Hub的行情轻喜剧,不过也好,最近爽爽快快感受了一回什么叫“统统无线”,高飞猪就没这福气咯,嘿嘿。 话说回来,这款Network USB 是将以太网络连…

数字电路硬件设计系列(二十二)之USB HUB电路设计

针对设计过程中的问题,如有疑问,欢迎留言评论!点我返回目录 1 简介 USB_HUB电路指一种可以将一个USB接口扩展为多个(通常为4个),并可以使这些接口同时使用的电路。USB是一种外部总线标准,用于规…

android手机 usb hub,[RK3288][Android6.0] USB hub初始化流程小结

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 上一篇文件小结了USB设备的枚举过程,而设备是插入到hub上才被检测到的. 这里小结hub的初始化,假设初始化之前USB设备已经插入,并且这里讨论的是 root hub,非root hub的行为会和usb设备类似. usb core初始化会创建一个hub t…

HUB集线器测试软件,USB Hub.Connectivity 测试先决条件

USB Hub.Connectivity 测试先决条件 10/11/2018 本文内容 本主题介绍使用 Windows 硬件实验室工具包 (Windows HLK) 来测试 USB 集线器之前必须完成的任务: 硬件要求 USB 设备测试需要以下硬件。 如果设备包括附加功能,则可能需要额外的硬件。 一台测试计算机。 测试计算机必…

usb hub驱动

参考文章:https://blog.csdn.net/fudan_abc/article/details/1779800 资料:https://pan.baidu.com/s/1AZlZsqF_-VGREzLaQPdY9Q 提取码:15ky static const struct usb_device_id hub_id_table[] {{ .match_flags USB_DEVICE_ID_MATCH_VEN…

ps软件怎么测试性能,怎么用ps测试电脑性能 设计师要知道

对于设计师而言,电脑是吃饭的工具,如果工具不趁手,势必事倍功半。我相信大多数准备入行或已经工作多年的设计师,都明白这个道理。 画布的创建 先说大家熟悉的 Photoshop,这是一款位图软件,而它重要的功能就…

索尼PS5主机系统软件更新推出 大量问题未解决

PS5首批主机在日本、美国、加拿大、墨西哥、澳洲、新西兰和韩国等地发布后,一直出现多种不同的问题,部分更声称会引致玩家游戏崩溃等,近日官方终于推出了系统软件更新。 Sony近日为PS5推出了一个866mb的20.02-02.25.00版本系统软件更新&#…