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设备的目录结构:
这里有一个简要的命名规则:
- platform/fd800000.usb:
platform
:这通常表示该设备是通过平台设备驱动程序(platform device driver)管理的。平台设备驱动程序通常用于描述硬件平台特有的设备,这些设备通常不遵循标准的设备驱动程序模型。fd800000.usb
:这是平台设备的名称,可能由设备树(device tree)或硬件平台代码指定。它通常与设备的物理地址或其他硬件标识信息有关。
- usb1:
- 这表示这是系统上的第一个USB控制器(或称为USB主机控制器)。在Linux中,USB控制器通常按其在系统中的顺序进行编号(usb1、usb2等)。
- 1-1:
- 这表示连接到第一个USB控制器(usb1)的第一个设备。USB设备在其连接的控制器下按层级进行编号。第一个设备是1-1,第二个设备是1-2,依此类推。
- 1-1.1:
- 如果一个USB设备具有内置的USB端口(例如USB集线器),则连接到该设备的设备会在其下进一步编号。在这个例子中,
1-1.1
表示连接到1-1
设备(即连接到usb1的第一个设备)的第一个设备。
- 如果一个USB设备具有内置的USB端口(例如USB集线器),则连接到该设备的设备会在其下进一步编号。在这个例子中,
- 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
相关文章:

Linux USB转串口设备路径的查找方法
1、USB转串口设备 USB转串口设备是在嵌入式软件开发过程中经常要使用的,常常用于对接各种各样的串口设备。如果一台linux主机上使用多个usb转串口设备时,应用程序中就需要知道自己操作的是哪个串口设备。串口设备在系统上电时,由于驱动加载的…...

【初阶数据结构】单链表之环形链表
目录标题 前言环形链表的约瑟夫问题环形链表环形链表|| 前言 前面我们已经学习了关于单链表的一些基本东西,今天我们来学习单链表的一个拓展——环形链表,我们将用力扣和牛客网上的三道题目来分析讲解环形链表问题。 环形链表的约瑟夫问题 我们首先来看…...
【积分,微分,导数,偏导数公式推导】
1. 积分 积分是微积分的一个分支,用于计算曲边梯形的面积或者变速直线运动的总距离等。积分分为不定积分和定积分。 不定积分:给出一个函数,求出其所有可能的原函数。定积分:计算一个函数在特定区间上的积分。 2. 微分 微分是…...

java:递归实现的案例
//求第20个月兔子的对数 //每个月兔子对数:1,1,2,3,5,8 public class Test {//求第20个月兔子的对数//每个月兔子对数:1,1,2,3,5,8pu…...
Arxml文件解析03- 自动驾驶Radar服务radar_svc.arxml
<AR-PACKAGES><AR-PACKAGE><SHORT-NAME>bosch</SHORT-NAME><AR-PACKAGES>...</AR-PACKAGES>...
Elasticsearch安装步骤
引言 Elasticsearch是一个基于Lucene构建的开源、分布式、RESTful搜索和分析引擎。它设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。Elasticsearch为所有类型的数据提供近乎实时的搜索和分析。无论…...

Windows系统和unbtun系统连接usb 3.0海康可见MVS和红外艾睿相机
一.海康可见USB3.0工业面阵相机 海康usb相机需要去海康官网上下载对应系统的MVS客户端及SDK开发包 海康机器人-机器视觉-下载中心 选择Windows系统和unbtun(我是linux aarch64,所以选择了对应压缩包解压) Windows系统 1.双击安装包进入安装界面&…...

深入Django:用户认证与权限控制实战指南
title: 深入Django:用户认证与权限控制实战指南 date: 2024/5/7 18:50:33 updated: 2024/5/7 18:50:33 categories: 后端开发 tags: AuthDecoratorsPermissionsGuardianRESTAuthSessionMgmtMFA 第1章:入门Django与设置 1.1 Django安装与环境配置 在…...

Kubernetes - Dashboard 配置用户名密码方式登录
Kubernetes - Dashboard 配置用户名密码方式登录 前言: 为了 K8s 集群安全,默认情况下 Dashboard 以 Token的形式登录的,那如果我们想以用户名/密码的方式登录该怎么操作呢?其实只需要我们创建用户并进行 ClusterRoleBinding绑定即…...
AIGC能给人类社会带来哪些变革?
随着人工智能技术的飞速发展,AIGC(人工智能生成内容)正在成为推动社会变革的重要力量。本文将从技术角度出发,探讨AIGC技术如何影响和改变人类生活的各个方面。 一、AIGC技术概述 AIGC,即人工智能生成内容࿰…...

医药垃圾分类管理系统|基于SSM医药垃圾分类管理系统的系统设计与实现(源码+数据库+文档)
医药垃圾分类管理系统 目录 基于SSM医药垃圾分类管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统登录模块 2管理员模块实现 3用户模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博…...

用vim或gvim编辑程序
vim其实不难使用,学习一下就好了。简单功能很快学会。它有三种模式:命令模式,编辑模式,视模式。打开时在命令模式。在命令模式下按 i 进入编辑模式,在编辑模式下按<Esc>键退出编辑模式。在命令模式按 :wq 保存文…...

linus下Anaconda创建虚拟环境pytorch
一、虚拟环境 1.创建 输入下面命令 conda create -n env_name python3.8 输入y 2.激活环境 输入 conda activate env_name 二、一些常用的命令 在Linux的控制平台 切换到当前的文件夹 cd /根目录/次目录 查看conda目录 conda list 查看pip目录 pip list查看历史命…...

synchronized与volatile关键字
1.synchronized的特性 1.1互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到 同一个对象 synchronized 就会阻塞等待. 进入 synchronized 修饰的代码块, 相当于 加锁 退出 synchronized 修饰的代码块, 相当于 解锁 syn…...
Python基础之运算符操作
在Python中,运算符的作用就是用于执行各种的运算操作,常见的运算符有算数运算符、比较运算符、逻辑运算符、赋值运算符、成员运算符、身份运算符等。下面我们就来看看在Python中这些运算的详细操作。 算术运算符 算术运算符是用来执行一些基本的数学运…...

【busybox记录】【shell指令】uniq
目录 内容来源: 【GUN】【uniq】指令介绍 【busybox】【uniq】指令介绍 【linux】【uniq】指令介绍 使用示例: 去除重复行 - 默认输出 去除重复行 - 跳过第n段(空格隔开),比较n1以后的内容,去重 去…...

Nginx从入门到精通速成
文章目录 一. **Nginx** **的简介**1.1 什么是 **nginx**1.2 正向代理1.3 反向代理1.4 **负载均衡**1.5 动静分离 二. **Nginx** **的安装**三. **Nginx** **的常用的命令**四. **Nginx** **的配置文件**五. **Nginx** **配置实例**反向代理实例**1**5.1 实现效果5.2 准备工作5…...

Flutter笔记:Widgets Easier组件库(4)使用按钮组
Flutter笔记 Widgets Easier组件库(4):使用按钮组 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress…...
Docker常用命令 镜像库设置
Docker常用命令 & 镜像库设置 1. 镜像操作2. 容器操作3. 网络操作4. Docker Compose操作5. Docker volume操作6. Docker run介绍7. 镜像库设置 1. 镜像操作 列出本地所有的镜像 docker images从远程仓库拉取镜像到本地 docker pull <image_name>删除本地的指定镜像…...

无人零售,重塑购物新纪元
在这个快节奏的时代,科技的每一次跃进都在悄无声息地改变着我们的生活方式。而今,无人零售正以雷霆之势,颠覆传统购物模式,为我们带来前所未有的便捷与智能体验。想知道无人零售如何彻底改变我们的购物方式吗?跟随我&a…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...