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.mzph.cn/bicheng/6243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python内置函数locals()详解

Python中的locals()函数用于获取当前局部符号表的字典。这个字典包含了当前作用域中的局部变量。 函数定义 locals()函数不需要任何参数,并且返回当前局部变量作用域的内容。 locals()基本用法 在函数中使用 def my_function():a 10b 20local_variables loc…

行业早报05.04

1.沃尔沃汽车 Q1 全球销量超 18.2 万辆:同比增长 12%,中国市场达 1.4 万辆; 2.LG 电子 Q1 营收 21.10 万亿韩元同比增长 3.3%,利润 1.33 万亿韩元同比减少 11%; 3.乘联会:3 月新能源车批发销量 81.0 万辆同…

【华为 ICT HCIA eNSP 习题汇总】——题目集20

1、(多选)若两个虚拟机能够互相ping通,则通讯过程中会使用()。 A、虚拟网卡 B、物理网卡 C、物理交换机 D、分布式虚拟交换机 考点:数据通信 解析:(AD) 物理网卡是硬件设…

推荐一个好用的命令行工具ShellGPT

ShellGPT 配置安装常用功能聊天写命令并执行 高级功能函数调用角色管理 总结 这两天突然想到,现有的很多工具都在被大模型重构,比如诞生了像perplexity.ai 这种新交互形式的搜索引擎,就连wps也推出了AI服务,甚至都可以直接生成ppt…

2024系统架构师---测试用例效用树的核心概念

测试用例效用树(Test Case Utility Tree)是一种用于软件测试中的工具,它帮助组织和优化测试用例。这种结构通常被用来确保测试覆盖全面,同时避免冗余。以下是测试用例效用树的一些关键概念和应用方法: 测试用例效用树…

【云原生】Docker 实践(二):什么是 Docker 的镜像

【Docker 实践】系列共包含以下几篇文章: Docker 实践(一):在 Docker 中部署第一个应用Docker 实践(二):什么是 Docker 的镜像Docker 实践(三):使用 Dockerf…

UDP编程流程(UDP客户端、服务器互发消息流程)

一、UDP编程流程 1.1、 UDP概述 UDP,即用户数据报协议,是一种面向无连接的传输层协议。相比于TCP协议,UDP具有以下特点: 速度较快:由于UDP不需要建立连接和进行复杂的握手过程,因此在传输数据时速度稍快…

【深度学习】第二门课 改善深层神经网络 Week 1 深度学习的实践层面

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:深度学习 💬总结:希望你看完之后,能对…

基于SSM的宠物领养平台(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的宠物领养平台(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Spri…

排序算法--直接选择排序

前提: 选择排序:选择排序(Selection sort)是一种比较简单的排序算法。它的算法思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 话不多说,直接放图…

深入浅出学习Pytorch—Pytorch简介与2024年最新安装(GPU)

深入浅出学习Pytorch—Pytorch简介 学习原因:Pytorch日益增长的发展速度与深度学习时代的迫切需要 Pytorch模型训练 pytorch实现模型训练包括以下的几个方面(学习路线) 数据:数据预处理与数据增强模型:如何构建模型模…

高可用系列四:loadbalancer 负载均衡

负载均衡可以单独使用,也常常与注册中心结合起来使用,其需要解决的问题是流量分发,这是就需要定义分发策略,当然也包括了故障切换的能力。 故障切换 故障切换是负载均衡的基本能力,和注册中心结合时比较简单&#xf…

机器学习之基于Jupyter中国环境治理投资数据分析及可视化

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 机器学习之基于Jupyter中国环境治理投资数据分析及可视化项目是一个结合了机器学习和数据可视化技术的项目&#xf…

AMD GPU体系知识大全

AMD(Advanced Micro Devices)在GPU领域同样具有丰富的产品线和架构体系,以下是一个关于AMD GPU体系的概览: 架构系列: Vega架构:发布于2017年,特点是采用高带宽缓存控制器(HBCC&…

JavaScript百炼成仙自学笔记——11

函数七重关之四(闭包) function add(){return function(){} } function test(){var a 0;return function(){console.log(a);} } 这样子调用:test()(); 这就是闭包! 这样做有什么好处呢? //先获取这个内部函数 var i…

「笔试刷题」:添加逗号

一、题目 描述 对于一个较大的整数 N(1<N<2,000,000,000) 比如 980364535&#xff0c;我们常常需要一位一位数这个数字是几位数&#xff0c;但是如果在这 个数字每三位加一个逗号&#xff0c;它会变得更加易于朗读。 因此&#xff0c;这个数字加上逗号成如下的模样&a…

【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】

【基于MAX98357的Minimax&#xff08;百度&#xff09;长文本语音合成TTS 接入教程】 1. 前言2. 先决条件2.1 硬件准备2.2 软件准备2.3 接线 3. 核心代码3.1 驱动实现3.2 代码解析 4. 播放文本5. 结论 视频地址&#xff1a; SeeedXIAO ESP32S3 Sense【基于MAX98357的Minimax&am…

富文本编辑器 iOS

https://gitee.com/klkxxy/WGEditor-mobile#wgeditor-mobile 采用iOS系统浏览器做的一款富文本编辑器工具。 原理就是使用WKWebView加载一个本地的一个html文件&#xff0c;从而达到编辑器功能的效果&#xff01; 由于浏览器的一些特性等&#xff0c;富文本编辑器手机端很难做…

链表的回文结构(详解)

链表的回文结构&#xff08;详解&#xff09; 题目&#xff1a; 链表的回文结构 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针A&#xff0c;请返回一个bool值&#xff0c;代表…

Web前端一套全部清晰 ⑥ day4 CSS.1 基础选择器、文字控制属性

后来的我不在抱怨 所有的事与愿违都是我能力或者判断力不足 仅此而已 —— 24.5.1 一、CSS定义 1. 将CSS放在html文件的<style>标签中 层叠样式表(Cascading style Sheets&#xff0c;缩写为 CSS)&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现(美…