当前位置: 首页 > news >正文

Linux USB转串口设备路径的查找方法

1、USB转串口设备

        USB转串口设备是在嵌入式软件开发过程中经常要使用的,常常用于对接各种各样的串口设备。如果一台linux主机上使用多个usb转串口设备时,应用程序中就需要知道自己操作的是哪个串口设备。串口设备在系统上电时,由于驱动加载的顺序不能会出现串口设备号不一样的情况,比如接了A串口,B串口到USB接口上,可以在系统上加载出来的串口为变化,有时A串口是/dev/ttyUSB0, 有时B串口是/dev/ttyUSB0。因此应用程序要有一个方法能准确的找到对应的串口 。

2、确定串口设备的方法

      usb总线在/sys/bus/usb/device目录下有对应的目录的,不同usb设备连接到系统上会生成一个特定的目录的。如下/sys/devices/platform/fd800000.usb/usb1/1-1/1-1.1/1-1.1:1.0,这是一个USB设备的目录结构:

这里有一个简要的命名规则:

  1. platform/fd800000.usb
    • platform:这通常表示该设备是通过平台设备驱动程序(platform device driver)管理的。平台设备驱动程序通常用于描述硬件平台特有的设备,这些设备通常不遵循标准的设备驱动程序模型。
    • fd800000.usb:这是平台设备的名称,可能由设备树(device tree)或硬件平台代码指定。它通常与设备的物理地址或其他硬件标识信息有关。
  2. usb1
    • 这表示这是系统上的第一个USB控制器(或称为USB主机控制器)。在Linux中,USB控制器通常按其在系统中的顺序进行编号(usb1、usb2等)。
  3. 1-1
    • 这表示连接到第一个USB控制器(usb1)的第一个设备。USB设备在其连接的控制器下按层级进行编号。第一个设备是1-1,第二个设备是1-2,依此类推。
  4. 1-1.1
    • 如果一个USB设备具有内置的USB端口(例如USB集线器),则连接到该设备的设备会在其下进一步编号。在这个例子中,1-1.1表示连接到1-1设备(即连接到usb1的第一个设备)的第一个设备。
  5. 1-1.1:1.0
    • 最后的:1.0表示这是1-1.1设备上的第一个接口。USB设备可以有多个接口(interface),每个接口都提供不同的功能。例如,一个USB摄像头可能有一个视频接口和一个音频接口。这些接口在设备下按数字顺序编号(1.0、1.1等)。

总结来说,这个路径表示了一个USB设备树,从平台的USB控制器开始,经过一个或多个USB设备,最终到达一个特定的USB接口。这种结构使得内核和用户空间程序能够轻松地遍历和识别系统中的USB设备。

      因此应用程序可以通过唯一的USB设备路径来查找到USB转串口设备,当然也可以查找到其他USB设备,可以编写一段程序,在/sys/bus/usb/device目录查找每一个文件夹,当找到文件夹中对的usb PID, VID与目标设备相符时,就是找到了这个USB设备的对应路径。

      有没有更简单的方法么?答题是有的,可以udevadm命令,如使用udevadm命令查找/dev/ttyUSB0设备对的路径:udevadm info -q path -n /dev/ttyUSB0

       可以看到查找到ttyUSB0设备位于路径:/sys/devices/platform/fd800000.usb/usb1/1-1/1-1.2/1-1.2:1.0/下面。这个路径与硬件上USB接口一一对应,因此可通过这个USB总线的路径来查看其加载出来的串口设备号,最后找到对应的串口。

       这里提供一段python程序代码,用于从USB总线路径中找到其USB转串口设备的设备号。

import os
strpath = '/sys/devices/platform/fd800000.usb/usb1/1-1/1-1.2/1-1.2:1.0'
hd = os.popen(r'ls %s | grep ttyUSB' %strpath)
uartid = hd.read()[:-1]
uartid = '/dev/%s' %uartid

http://www.lryc.cn/news/342775.html

相关文章:

  • 【初阶数据结构】单链表之环形链表
  • 【积分,微分,导数,偏导数公式推导】
  • java:递归实现的案例
  • Arxml文件解析03- 自动驾驶Radar服务radar_svc.arxml
  • Elasticsearch安装步骤
  • Windows系统和unbtun系统连接usb 3.0海康可见MVS和红外艾睿相机
  • 深入Django:用户认证与权限控制实战指南
  • Kubernetes - Dashboard 配置用户名密码方式登录
  • AIGC能给人类社会带来哪些变革?
  • 医药垃圾分类管理系统|基于SSM医药垃圾分类管理系统的系统设计与实现(源码+数据库+文档)
  • 用vim或gvim编辑程序
  • linus下Anaconda创建虚拟环境pytorch
  • synchronized与volatile关键字
  • Python基础之运算符操作
  • 【busybox记录】【shell指令】uniq
  • Nginx从入门到精通速成
  • Flutter笔记:Widgets Easier组件库(4)使用按钮组
  • Docker常用命令 镜像库设置
  • 无人零售,重塑购物新纪元
  • 【图片格式转换】ICO、JPG、JPEG、PNG图片格式在线免费转换
  • 通过自然语言处理执行特定任务的AI Agents;大模型控制NPC执行一系列的动作;个人化的电子邮件助手Panza
  • 4.2 JavaScript语法
  • 面试二十五、remove和earse的区别
  • 普乐蛙元宇宙VR体验馆设备集体亮相VR文旅景区展
  • 北京大学-知存科技存算一体联合实验室揭牌,开启知存科技产学研融合战略新升级
  • 项目总结(一)docker总结
  • 深圳比创达EMC|EMC一站式解决方案:助力电子产品电磁兼容性升级
  • 万兆以太网MAC设计(11)完整UDP协议栈仿真
  • 【牛客】【模板】差分
  • 鸿蒙内核源码分析(中断管理篇) | 江湖从此不再怕中断