本文针对在开发过程中有时会出现用到多个串口设备,usb端口号会发生变化,如设备的灯指示信号和其他控制器都是ttyUSB* .其序号与控制接入的顺序有关,对于写好的launch每次修改串口连接名很麻烦。或者每次得先插入一个再插一个,才能保证ttyUSB0 ttyUSB1。重启机器后还会变,很不方便。

下面介绍相关的映射和修改

一  单一的串口映射

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

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

 其中ID 10C4:ea60 表示usb的id,这个是芯片制造商设置,一般认为是唯一表示设备的

根据这个信息,就可以简单的写udev规则了:myusb.rules

sudo gedit /etc/udev/rules.d/myusb.rules 执行命令弹出此文件,修改相关内容

KERNEL=="ttyUSB*",ATTRS{idVendor}=="10c4",ATTRS{idProduct}=="ea60", MODE:=“0777”, SYMLINK+="myusblight"

这样你的连接串口名就可以写成唯一的名字myusblight了。

保存后 创建生效后重新插拔usb设备。

用 ls -l /dev |grep ttyUSB  命令就可以看到映射结果了

二 usb hub的多端口映射

同一设备连接多个usb串口时 ,两个设备硬件是一样的时 上述办法无法区分,需要做到一一映射 , 我们可以找usb端口的不同来区分,每一台电脑或设备usb口之间编号是不一样的

执行 udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB1 命令后:

Udevadm info starts with the device specified by the devpath and then   
    walks up the chain of parent devices. It prints for every device   
    found, all possible attributes in the udev rules key format.   
    A rule to match, can be composed by the attributes of the device   
    and the attributes from one single parent device.

looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0/ttyUSB1':   
        KERNEL=="ttyUSB1"   
        SUBSYSTEM=="usb-serial"   
        DRIVER=="cp210x"   
        ATTR{port_number}=="0"   
       
      looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0':   
        KERNELS=="1-2.2:1.0"   
        SUBSYSTEMS=="usb"   
        DRIVERS=="cp210x"   
        ATTRS{bInterfaceClass}=="ff"

执行命令查看另一个 udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0

Udevadm info starts with the device specified by the devpath and then   
    walks up the chain of parent devices. It prints for every device   
    found, all possible attributes in the udev rules key format.   
    A rule to match, can be composed by the attributes of the device   
    and the attributes from one single parent device.   
       
      looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.0/ttyUSB0':   
        KERNEL=="ttyUSB0"   
        SUBSYSTEM=="usb-serial"   
        DRIVER=="cp210x"   
        ATTR{port_number}=="0"   
       
      looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.0':   
        KERNELS=="1-2.1:1.0"   
        SUBSYSTEMS=="usb"   
        DRIVERS=="cp210x"   
        ATTRS{bInterfaceClass}=="ff"

我们发现KERNELS的号是不一样的 一个2.1一个2.2。

这样我们可以对两个设备进行一一映射了

修改上述myusb.rules文件内容为

KERNEL=="ttyUSB*", KERNELS=="1-2.1", MODE:="0777",SYMLINK+="myusblight"   
KERNEL=="ttyUSB*", KERNELS=="1-2.2", MODE:="0777",SYMLINK+="myusbvoice"

这样我们可以usb口1-2.1 就是lignt设备  ,1-2.2 就是voice设备,只要固定將设备插到对应固定的usb口上就可以做到每次重启设备等情况都不会混淆 ,也不用更新代码。便于安装部署。

执行 ls -l /dev  |grep ttyUSB 命令 后

myusblight ->ttyUSB0

myusbvoice ->ttyUSB1

映射成功,重新插拔后也没有问题

串口USB单一映射及重命名的更多相关文章

  1. 【Java EE 学习 22 上】【文件上传】【目录打散】【文件重命名】

    1.文件上传概述 (1)使用<input type="file">的方式来声明一个文件域. (2)表单提交方式一定要是post方式才行 (3)表单属性enctype 默 ...

  2. typedef 类型重命名 和 #define 宏定义(1)

    http://www.blogjava.net/jasmine214--love/archive/2010/11/29/339307.html 在现实生活中,信息的概念可能是长度,数量和面积等.在C语 ...

  3. bat如何实现图片与名字匹配重命名

    背景:有一批图片按顺序截取,需要按照规定的名称进行重名命. 问题:用批处理怎么实现呢?(公司电脑手动重名时,卡的不要不要的) No1:解决:将规定的名称放入criterion.txt中,将批处理Ren ...

  4. 怎样用bat批量重命名文件夹和文件

    很早以前本人写过重命名文件夹的文章,发现其中稍有不完善的地方,其主要功能在文件夹名前统一加上字符,或者在文件夹名后统一加上字符,有网友反应功能太单一.今天我又仔细研究了一下bat批处理代码,分别能完全 ...

  5. EF中外键重命名,打破原先的约束规则

    本人建议玩code frist的人多用用System.ComponentModel.DataAnnotations和System.ComponentModel.DataAnnotations.Sche ...

  6. centos7中的网卡一致性命名规则、网卡重命名方法

    一致性网络设备命名(Consistent Network Device Naming) 背景介绍: 在centos5的时候,我们习惯了eth0这样的网络设备命名,在centos6发现网络设备变成了em ...

  7. pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)

    DataFrame的这些操作和Series很相似,这里简单介绍一下. 一,应用和应用映射 apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数: DataFrame. ...

  8. ubuntu 网卡名称重命名

    ubuntu 网卡名称重命名 参考:https://blog.csdn.net/hzj_001/article/details/81587824 biosdevname 和 net.ifnames 两 ...

  9. delphi 文件的操作:重命名、复制、移动、删除

    Delphi 文件的操作:重命名.复制.移动.删除第一种方法: RenameFile('Oldname', 'Newname'); CopyFile(PChar('Oldname'), PChar(' ...

随机推荐

  1. 384. Shuffle an Array数组洗牌

    [抄题]: Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. i ...

  2. spring 自定义标签的实现

    在我们进行Spring 框架开发中,估计用到最多的就是bean 标签吧,其实在Spring中像<mvc/><context/>这类标签以及在dubbo配置的标签都是属于自定义的 ...

  3. CRM中QueryDict和模型表知识补充

    CRM中QueryDict和模型表知识补充 1.QueryDict的用法 request.GET的用法:1.在页面上输入:http://127.0.0.1:8000/index/print(reque ...

  4. Error configuring application listener of class org.springframework.web.util

    解决方案: 1.打开工程属性对话框,到Deployment Assembly页面,点击Add 2. 选择Jave Build Path Entries 3. 把程序用于的Library加入进来 4.重 ...

  5. BZOJ4377 Kurs szybkiego czytania \ Luogu 3589[POI2015]KUR - 数学思维题

    Solution 我又双叒叕去看题解啦$QAQ$, 真的想不到鸭 输入 $a$ 和 $n$ 互质, 所以满足 $a \times i \ mod \ n$ $(0<=i<n)$ 肯定是不重 ...

  6. Spring MVC 的 Converter 和 Formatter

    Converter 和 Formatter 都可用于将一种对象类型转换成另一种对象类型. Converter 是通用元件,可以将一种类型转换成另一种类型,可以在应用程序中的任意层中使用: Format ...

  7. Java的 volatile关键字的底层实现原理

    我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用.本文详细解读一下volat ...

  8. Hbase 性能改进

    第一种性能改进方式:

  9. python2.x 到 python3.x 中“url”部分变化

    这部分是笔者在亲身项目中遇到的一些变化,并不全,后面将会更新. (1) urllib.urlopen    改为:   urllib.request.urlopen (2) urllib2   删除 ...

  10. python class中__init__函数、self

    class中包含类内变量以及方法 __init__方法 其前面带有”__“,故此函数被声明为私有方法,不可类外调用. 此方法可以带参数初始化 此方法的首参数必须是”self“(不过”self“也可以换 ...