usb转串口在linux下显示的tttyusb0是输出端口吗,Linux 绑定 ttyUSBn 串口方法。

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 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M|__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M|__ Port 3: Dev 4, If 0, Class=Vendor Specific Class, Driver=ch341, 12M/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M|__ Port 1: Dev 2, If 0, 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

Bus002 Device 004: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

Bus002 Device 003: ID 0bda:5411Realtek Semiconductor Corp.

Bus002 Device 002: ID 8087:0024Intel Corp. Integrated Rate Matching Hub

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

Bus001 Device 002: ID 8087:0024Intel Corp. Integrated Rate Matching Hub

Bus001 Device 001: ID 1d6b:0002 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:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1.3/2-1.1.3:1.0/ttyUSB0/tty/ttyUSB0

N: ttyUSB0

L:0S: serial/by-path/pci-0000:00:1d.0-usb-0:1.1.3:1.0-port0

S: serial/by-id/usb-1a86_USB2.0-Serial-if00-port0

E: DEVPATH=/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

E: DEVNAME=/dev/ttyUSB0

E: MAJOR=188E: MINOR=0E: SUBSYSTEM=tty

E: USEC_INITIALIZED=4816636E: ID_BUS=usb

E: ID_VENDOR_ID=1a86

E: ID_MODEL_ID=7523E: 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-340 USB-Serial adapter

E: ID_VENDOR=1a86

E: ID_VENDOR_ENC=1a86

E: ID_MODEL=USB2.0-Serial

E: ID_MODEL_ENC=USB2.0-Serial

E: ID_REVISION=0254E: ID_SERIAL=1a86_USB2.0-Serial

E: ID_TYPE=generic

E: ID_USB_INTERFACES=:ff0102:

E: ID_USB_INTERFACE_NUM=00E: ID_USB_DRIVER=ch341

E: ID_USB_CLASS_FROM_DATABASE=Vendor Specific Class

E: ID_PATH=pci-0000:00:1d.0-usb-0:1.1.3:1.0E: ID_PATH_TAG=pci-0000_00_1d_0-usb-0_1_1_3_1_0

E: ID_MM_CANDIDATE=1E: DEVLINKS=/dev/serial/by-path/pci-0000:00:1d.0-usb-0:1.1.3:1.0-port0 /dev/serial/by-id/usb-1a86_USB2.0-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 有一一对应关系。

48daf954611b7847ef20ec78a9509e48.png

- 前面是根集线集编号。

- 后面是端口号, hub级联用 . 连接。

:后面应该是USB协议版本号 (猜测)。 USB协议版本号是由 USB设备枚举的时候确定的。

其他内容

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值