Linux 绑定 ttyUSBn 串口方法。

在linux下, 使用usb转串口, 经常会碰到一个问题: 如果有多个串口, 以不同顺序插入的时候, /dev/ttyUSB0 /dev/ttyUSB1的索引号码也是不同的, 这对于想要用脚本来实现设备操作的人来说, 是相当麻烦. 本文将介绍: 怎么才能知道这些索引号对应的具体是那个物理设备?

尝试了很多种方式,最后得出结论:   直接找USB的物理路径最好。

找的资料一般都是利用 VENDOR_ID、MODEL_ID 来区分。但是:

USB 设备的 VENDOR_ID、MODEL_ID 可以识别出是这个型号的USB芯片。 当系统中只有一个同芯片设备的时候很好办。 当存在多个就为难了,一样。无法分辨。

本来想找唯一ID,但是失败了,不是所有USB设备都有。

1 获取 USB 插接结构 和 VENDOR_ID、MODEL_ID

在终端运行命令:   lsusb -t

xx@debian:/home$ lsusb -t
/: Bus .Port : Dev , Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port : Dev , If , Class=Hub, Driver=hub/8p, 480M
|__ Port : Dev , If , Class=Hub, Driver=hub/4p, 480M
|__ Port : Dev , If , Class=Vendor Specific Class, Driver=ch341, 12M
/: Bus .Port : Dev , Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port : Dev , If , Class=Hub, Driver=hub/6p, 480M

我的主机情况是这样的。 主机有4个USB插口。  在其中一个USB口上出入了4口HUB,再在此HUB上出入了CH340的USB 串口。

上面截图可以看到:    硬件插线结构:

主板芯片组提供2个USB根集线集,其中一个接了8端口HUB,另一个接了4端口HUB。   都是高速HUB  480M。

  我自己的插入的4端口HUB在 ,主板内部8端口HUB下。 高速设备 480M。

    4端口HUB 下插入了使用CH341 驱动的设备。 全速设备 12M。

再看  lsusb

xx@debian:/home$ lsusb
Bus Device : ID 1a86: QinHeng Electronics HL- USB-Serial adapter
Bus Device : ID 0bda: Realtek Semiconductor Corp.
Bus Device : ID : Intel Corp. Integrated Rate Matching Hub
Bus Device : ID 1d6b: Linux Foundation 2.0 root hub
Bus Device : ID : Intel Corp. Integrated Rate Matching Hub
Bus Device : ID 1d6b: Linux Foundation 2.0 root hub

可以看到: 1a86:7523  这即是我的usb转串口设备, 冒号两边的数字分别对应设备的 VENDOR_ID 与 MODEL_ID 。

2 获取 /dev/ttyUSBn 信息

命令 udevadm info /tty/USBn

xx@debian:/home$ udevadm info /dev/ttyUSB0
P: /devices/pci0000:/::1d./usb2/-/-1.1/-1.1./-1.1.:1.0/ttyUSB0/tty/ttyUSB0
N: ttyUSB0
L:
S: serial/by-path/pci-::1d.-usb-:1.1.:1.0-port0
S: serial/by-id/usb-1a86_USB2.-Serial-if00-port0
E: DEVPATH=/devices/pci0000:/::1d./usb2/-/-1.1/-1.1./-1.1.:1.0/ttyUSB0/tty/ttyUSB0
E: DEVNAME=/dev/ttyUSB0
E: MAJOR=
E: MINOR=
E: SUBSYSTEM=tty
E: USEC_INITIALIZED=
E: ID_BUS=usb
E: ID_VENDOR_ID=1a86
E: ID_MODEL_ID=
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
E: ID_PCI_INTERFACE_FROM_DATABASE=EHCI
E: ID_VENDOR_FROM_DATABASE=QinHeng Electronics
E: ID_MODEL_FROM_DATABASE=HL- USB-Serial adapter
E: ID_VENDOR=1a86
E: ID_VENDOR_ENC=1a86
E: ID_MODEL=USB2.-Serial
E: ID_MODEL_ENC=USB2.-Serial
E: ID_REVISION=
E: ID_SERIAL=1a86_USB2.-Serial
E: ID_TYPE=generic
E: ID_USB_INTERFACES=:ff0102:
E: ID_USB_INTERFACE_NUM=
E: ID_USB_DRIVER=ch341
E: ID_USB_CLASS_FROM_DATABASE=Vendor Specific Class
E: ID_PATH=pci-::1d.-usb-:1.1.:1.0
E: ID_PATH_TAG=pci-0000_00_1d_0-usb-0_1_1_3_1_0
E: ID_MM_CANDIDATE=
E: DEVLINKS=/dev/serial/by-path/pci-::1d.-usb-:1.1.:1.0-port0 /dev/serial/by-id/usb-1a86_USB2.-Serial-if00-port0
E: TAGS=:systemd:

P : 总线路径。   这是我们最终想要的。

可以看到  VENDOR_ID、MODEL_ID 可以识别出是这个型号的USB芯片。  只是类型,不是设备唯一 ID 。  很多设备没有唯一 ID。 这也是让我很为难的地方。

/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1.3/2-1.1.3:1.0/ttyUSB0/tty/ttyUSB0  与 lsusb -t 有一一对应关系。


- 前面是根集线集编号。
- 后面是端口号, hub级联用 . 连接。
:后面应该是USB协议版本号 (猜测)。 USB协议版本号是由 USB设备枚举的时候确定的。

其他内容

另外, 还有个简便但是不一定非常准确的方法, 直接运行:

ls -lh /dev/serial/by-id/

这样也能看出个大概, 只是不知道当有两个一样的物理设备时, 这种方法会不会有问题. 至少在我的测试中是好使的, 因为我手里的几个串口都是不同的厂商出的, 所以容易区分.

Linux 绑定 ttyUSBn 串口方法。的更多相关文章

  1. Linux 查看本机串口方法

    最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1.查看串口是否可用 可以对串口发送数据比如对com1口,echo /dev/ttyS02.查看串口名称使用 ls -l /de ...

  2. 详解linux下的串口通讯开发

    串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...

  3. 【转载】详解linux下的串口通讯开发

    来源:https://www.cnblogs.com/sunyubo/archive/2010/09/26/2282116.html 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使 ...

  4. 嵌入式linux应用程序移植方法总结

    嵌入式linux应用程序移植方法总结 前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟.江浩 ...

  5. 1008win7与虚拟机中的linux共享文件的(详细)方法

    转自http://jingyan.baidu.com/article/ca00d56c74dde4e99eebcfd2.html 好东西一起分享 win7与虚拟机中的linux共享文件的(详细)方法 ...

  6. jquery 绑定事件的方法

    jQuery中提供了四种绑定事件的方法,分别是bind.live.delegate.on,对应的解除监听的函数分别是unbind.die.undelegate.off: 一.on()方法(首选方法) ...

  7. 修改linux系统时间的方法(date命令)

    修改linux系统时间的方法(date命令) 来源:互联网 作者:佚名 时间:11-18 23:22:27 [大 中 小] date命令不仅可以显示系统当前时间,还可以用它来修改系统时间,下面简单的介 ...

  8. Linux绑定双网卡

    Linux绑定双网卡 1. 配置参数文件 版本在centos6以下在/etc/modproe.conf文件中配置,版本是centos6.x或以上在/etc/modproe.d/目录下配置. 2.    ...

  9. Linux下软件安装方法即路径设置

    Linux下软件安装方法即路径设置 http://www.cnblogs.com/edward259/archive/2010/07/02/1770066.html

随机推荐

  1. java算法 -- 基数排序

    基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较.由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排 ...

  2. 查看 redis 请求日志

    转: 查看 redis 请求日志 2019-05-29 15:34:41 打卤 阅读数 1980更多 分类专栏: other   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转 ...

  3. vue的mixin简化开发

    vue的mixin可以将多个组件公用的声明周期方法和数据封装成一个对象,在不同的组件中自由插拔.实际做项目的时候,可以定义一些mixin,供多个组件使用.也非常有必要定义一个全局的mixin对象,对所 ...

  4. wamp64显示黄色图标不能忍

    哎,昨天硬盘合区了下,重新安装了wamp64,删库的时候忘记备份数据库,灾难啊,只能自己重新建库建表了,深刻的教训啊. 然后还启动后是黄色图标,不能忍啊,发现wamp64需要启动三个服务,mysql, ...

  5. 机器学习技法总结(一):支持向量机(linear support vector machine,dual support vector machine)

    第一阶段技法: large margin (the relationship between large marin and regularization), hard-SVM,soft-SVM,du ...

  6. NET Core3高性能RPC框架

    NET Core 3.0 使用gRPC 一.前言 在前一文 <ASP.NET Core 3.0 使用gRPC>中有提到 gRPC 支持双向流调用,支持实时推送消息,这也是 gRPC的一大特 ...

  7. 本地mysql启动之后,另外一台电脑利用数据库访问软件,连接问题

    背景:在一台电脑上面安装MySQL数据库之后,利用另一台电脑访问本台电脑上面的数据,访问失败的问题 解决方法 开启 MySQL 的远程登陆帐号有两大步: 1.确定服务器上的防火墙没有阻止 3306 端 ...

  8. 18 Ajax、Json以及jackson框架解析json的基本应用

    1. Ajax (1)概念:ASynchronous JavaScript And XML 异步的JavaScript 和 XML 异步和同步:客户端和服务器端相互通信的基础上 * 客户端必须等待服务 ...

  9. Apache Kafka主题 - 架构和分区

    1.卡夫卡话题 在这篇Kafka文章中,我们将学习Kafka主题与Kafka Architecture的整体概念.Kafka中的体系结构包括复制,故障转移以及并行处理.此外,我们还将看到创建Kafka ...

  10. Spring Boot 项目中的 parent

    前言 我们成功创建Spring Boot之后,pom.xml坐标文件中都会有如下一段引用: <parent> <groupId>org.springframework.boot ...