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

Linux(Ubuntu 22.04)系统中固定串口

Linux(Ubuntu 22.04)系统中固定串口

文章目录

  • 前言
  • 正文
    • 查看linux串口信息
    • 修改udev固化串口
    • 校验是否修改完成
  • 注意

前言

在Linux系统中固定串口(通常指的是串行通信接口,如/dev/ttyS0或/dev/ttyUSB0)的原因有几个方面:

  • 稳定性与可靠性:
    固定串口可以确保每次重启系统后,特定的硬件设备总是映射到相同的串行端口。这对于需要稳定连接的应用程序特别重要,比如工业自动化、远程监控和数据采集系统。
  • 简化配置:
    当串口被固定后,应用程序或服务的配置文件可以使用固定的设备路径来引用相应的串行端口。这使得配置过程更加简单且易于管理。
  • 避免冲突:
    有些情况下,不同的外部设备可能会连接到同一类型的串口上。固定串口可以确保每个设备都有一个明确的端口分配,从而避免端口冲突。
  • 便于调试和维护:
    在开发过程中,如果串口是固定的,那么当出现问题时,开发者可以更快地定位问题所在的串口,进而进行调试。
  • 自动化脚本:
    对于依赖于特定串口的自动化脚本或任务,固定串口可以让这些脚本更加可靠。

正文

在Linux中,可以通过udev规则来实现串口的固定。udev是一个设备管理器,它可以基于设备的属性来设置规则,从而将设备绑定到特定的设备节点上。例如,你可以创建一个udev规则文件,通过识别串口设备的唯一标识符(如USB设备的ID_VENDOR和ID_MODEL),确保它始终被映射到同一个设备节点(如/dev/ttyUSB0)。这样,在设备插入后,udev就会根据规则自动为该设备分配预先定义好的设备节点名。

查看linux串口信息

方法一:使用lsusb查看信息

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0573:1573 Zoran Co. Personal Media Division (Nogatech) USB Audio and HID
Bus 001 Device 003: ID 0bda:c821 Realtek Semiconductor Corp. Bluetooth Radio 
# 下边这个是usb串口设备
Bus 001 Device 002: ID 1a86:7523 QinHeng Electronics CH340 serial converter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

这里idVendor是1a86,idProduct是7523

方法二:使用dmesg命令

$ sudo dmesg | grep tty
[    0.114228] printk: console [tty0] enabled
[    2.802954] usb 1-4: ch341-uart converter now attached to ttyUSB0

确定串口为ttyUSB0后使用udevadm,同样可获得idVendor、idProduct

$ udevadm info -a -p /sys/class/tty/ttyUSB0 
# 下边是详细信息
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/ttyUSB0/tty/ttyUSB0':KERNEL=="ttyUSB0"SUBSYSTEM=="tty"DRIVER==""ATTR{power/async}=="disabled"ATTR{power/control}=="auto"ATTR{power/runtime_active_kids}=="0"ATTR{power/runtime_active_time}=="0"ATTR{power/runtime_enabled}=="disabled"ATTR{power/runtime_status}=="unsupported"ATTR{power/runtime_suspended_time}=="0"ATTR{power/runtime_usage}=="0"looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/ttyUSB0':KERNELS=="ttyUSB0"SUBSYSTEMS=="usb-serial"DRIVERS=="ch341-uart"ATTRS{port_number}=="0"ATTRS{power/async}=="enabled"ATTRS{power/control}=="auto"ATTRS{power/runtime_active_kids}=="0"ATTRS{power/runtime_active_time}=="0"ATTRS{power/runtime_enabled}=="disabled"ATTRS{power/runtime_status}=="unsupported"ATTRS{power/runtime_suspended_time}=="0"ATTRS{power/runtime_usage}=="0"...looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-4':KERNELS=="1-4"SUBSYSTEMS=="usb"DRIVERS=="usb"ATTRS{authorized}=="1"ATTRS{avoid_reset_quirk}=="0"ATTRS{bConfigurationValue}=="1"ATTRS{bDeviceClass}=="ff"ATTRS{bDeviceProtocol}=="00"ATTRS{bDeviceSubClass}=="00"ATTRS{bMaxPacketSize0}=="8"ATTRS{bMaxPower}=="98mA"ATTRS{bNumConfigurations}=="1"ATTRS{bNumInterfaces}==" 1"ATTRS{bcdDevice}=="0264"ATTRS{bmAttributes}=="80"ATTRS{busnum}=="1"ATTRS{configuration}==""ATTRS{devnum}=="2"ATTRS{devpath}=="4"# 这里idVendor是1a86,idProduct是7523ATTRS{idProduct}=="7523"ATTRS{idVendor}=="1a86"ATTRS{ltm_capable}=="no"ATTRS{maxchild}=="0"ATTRS{physical_location/dock}=="no"ATTRS{physical_location/horizontal_position}=="left"ATTRS{physical_location/lid}=="no"ATTRS{physical_location/panel}=="top"ATTRS{physical_location/vertical_position}=="upper"ATTRS{power/active_duration}=="9948388"ATTRS{power/async}=="enabled"ATTRS{power/autosuspend}=="2"ATTRS{power/autosuspend_delay_ms}=="2000"ATTRS{power/connected_duration}=="9948388"ATTRS{power/control}=="on"ATTRS{power/level}=="on"ATTRS{power/persist}=="1"ATTRS{power/runtime_active_kids}=="1"ATTRS{power/runtime_active_time}=="9948108"ATTRS{power/runtime_enabled}=="forbidden"ATTRS{power/runtime_status}=="active"ATTRS{power/runtime_suspended_time}=="0"ATTRS{power/runtime_usage}=="1"ATTRS{product}=="USB Serial"ATTRS{quirks}=="0x0"ATTRS{removable}=="fixed"ATTRS{rx_lanes}=="1"ATTRS{speed}=="12"ATTRS{tx_lanes}=="1"ATTRS{urbnum}=="469"ATTRS{version}==" 1.10"

修改udev固化串口

$ sudo touch /etc/udev/rules.d/70-serial_usb.rules$ sudo vim /etc/udev/rules.d/70-serial_usb.rules
ACTION=="add", KERNEL=="ttyUSB*", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", MODE:="0777", SYMLINK+="serial_usb"

修改完成后重新加载生效:

$ sudo udevadm control --reload

重新插拔usb串口转换器即可

校验是否修改完成

$ ls -al /dev/serial_usb lrwxrwxrwx 1 root root 7  725 14:37 /dev/serial_usb -> ttyUSB0

可以看到自动并联到ttyUSB0,现在通过/dev/serial_usb即可访问串口。

注意

如果sudo dmesg | grep tty发现串口一连接就断开可以参考如下12

# 卸载冲突的brltty软件
sudo apt-get remove brltty

理论上应该可以正常使用了。


  1. virtualbox 虚拟机ubuntu22 识别不了CH340串口_ubuntu 不识别ch340-CSDN博客 ↩︎

  2. Ubuntu22.04 | 串口设备/dev/ttyUSB0无法发现_ubuntu串口不显示-CSDN博客 ↩︎

相关文章:

Linux(Ubuntu 22.04)系统中固定串口

Linux(Ubuntu 22.04)系统中固定串口 文章目录 前言正文查看linux串口信息修改udev固化串口校验是否修改完成 注意 前言 在Linux系统中固定串口(通常指的是串行通信接口,如/dev/ttyS0或/dev/ttyUSB0)的原因有几个方面&…...

LeetCode - 209 - 长度最小的子数组

力扣209题 题目描述:长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组&…...

探索空间计算与VR中的手势跟踪新纪元:XHand框架详解

在虚拟现实(VR)和扩展现实(XR)技术日新月异的今天,手势跟踪作为实现沉浸式体验的关键技术之一,正逐步从概念走向成熟。今天,我们将深入探索一个创新的框架——XHand,它以其卓越的性能和先进的技术亮点,为空间计算与VR领域的手势跟踪带来了全新的解决方案。 XHand框架…...

leetcode + 项目复习

上午 Leetcode算法 参考文章——代码随想录 1. KMP 概念 主要应用 字符串匹配 主要思想 根据之前匹配的信息,当发现字符串不匹配时,避免从头开始匹配。 什么是前缀表(next数组、prefix) 是用来回退的,当文本串和…...

树莓派4/5:设置apt、pip、conda首选清华镜像源

一、教程简介 在中国大陆地区,使用清华镜像源可以显著缩短资源下载时间。 本教程介绍如何将清华镜像源设置为树莓派的apt、pip、conda下载的首选项(默认项)。其中,apt和pip为树莓派系统自带,conda则需要安装miniforg…...

NoSQL 之Redis集群模式

目录 案例概述 redis工作模式 主从模式 哨兵模式 redis cluster模式 Redis集群介绍 Redis集群的优势 Redis集群的实现方法 Redis-Cluster数据分片 Redis-Cluster的主从复制模型 Redis集群部署 案例部署 安装redis 检查redis的状态 修改配置文件 重启启动redis服…...

oracle rac

1、app连接oracle rac集群 连接到 Oracle RAC(Real Application Clusters)的多种配置方式 1. 使用 JDBC 连接字符串: 使用 JDBC 连接字符串是连接 Oracle RAC 的常见方式。连接字符串的格式如下: jdbc:oracle:thin:(DESCRIPTION…...

计算机毕业设计Python深度学习房价预测 房价可视化 链家爬虫 房源爬虫 房源可视化 卷积神经网络 大数据毕业设计 机器学习 人工智能 AI

Python深度学习房价预测系统开题报告 一、研究背景与意义 随着城市化进程的加速和房地产市场的不断发展,房价成为影响人们生活质量的重要因素之一。准确预测房价不仅有助于政府制定科学的房地产政策,还能为开发商提供市场参考,同时帮助购房…...

【Linux】学习Linux,需要借助具象化的思维

指令与图形化界面 导读一、命令行与图形化界面二、命令行与图形化界面的发展历程1.2.1 打字机的起源1.2.2 肖尔斯和格利登型打字机1.2.3 鼠标的发明1.2.4 图形化界面(GUI)的发展 三、命令行与图形化之间的联系3.1 图形化界面的人机交互3.2 命令行界面的人…...

R语言贝叶斯方法在生态环境领域技术教程

原文链接:R语言贝叶斯方法在生态环境领域技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247612056&idx5&snb170122cf5052cc7cb2d858606b9f158&chksmfa82777fcdf5fe69eec092410530e2900c98bcbb84e3d33c823705c948b4db96545bf282747a…...

mojo实现高阶函数(algorithm)

functional 实现高阶函数。 您可以从 algorithm 包导入这些 API。例如: from algorithm import map别名: ​Static1DTileUnitFunc = fn[Int](Int, /) capturing -> None: Signature of a 1d tiled function that performs some work with a static tile size and an off…...

先进制造aps专题二十四 云平台排产aps的方案设计

云平台排产aps的方案设计 针对对象是有排产需求无需定制的中小型工厂企业 一 网站功能(b/s架构) 1 前端界面 客户登录 排产项目管理 基础数据(产品资料,产品工艺,工作日历,生产资源,工艺能力…...

JavaScript 逆向技巧总结

本节属于知识总结,只是对思路的梳理,不对具体内容进行展开 JS 逆向可以分为三大部分: 寻找入口, 调试分析, 模拟执行 寻找入口: 这是非常关键的一步,逆向在大部分情况下就是找一些加密参数到底…...

linux反向代理原理:帮助用户更好地优化网络架构

Linux反向代理原理详解 反向代理是一种在网络架构中常用的技术,尤其在Linux环境下被广泛应用。它可以帮助实现负载均衡、安全防护和请求缓存等功能。本文将深入探讨Linux反向代理的原理、工作机制以及其应用场景。 1. 什么是反向代理 反向代理是指代理服务器接收客…...

开源DevOps工具链管理:DevStream

DevStream:简化DevOps,加速创新- 精选真开源,释放新价值。 概览 DevStream,一个开源的DevOps工具链管理器(DTM),由merico-dev团队精心打造,现已加入CNCF大家庭,并在devs…...

图数据库框架及其支持的开发语言和应用场景

图数据库框架及其支持的开发语言和应用场景 1. Neo4j 类型:原生图数据库特点:最流行的图数据库之一,使用Cypher查询语言,支持ACID事务,具有丰富的图算法库。支持的开发语言:Java, Python, JavaScript, Go, .NET, Ruby, PHP等。驱动和库:Neo4j Java Driver, Py2neo (Pyt…...

【Linux 18】核心转储

文章目录 🌈 一、什么是核心转储🌈 二、如何启动核心转储🌈 三、为什么有核心转储 🌈 一、什么是核心转储 核心转储 (Core Dump):当一个进程异常终止时,会在触发进程崩溃的目录下生成一个以进程 pid 命名的…...

远程传输文件至服务器—spc 传输

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、SPC是什么?二、使用步骤1.进入 windows 客户端需要传输文件的目录。2.在该目录的路径栏输入 cmd,回车打开终端。3.确定服务器端 IP …...

HarmonyOS.FA开发流程

开发环境配置 1、DevEco Studio的安装 2、DevEcoStudio模拟运行工程:运行Tools->Device Manager,使用已认证的HW开发者联盟帐号Login(在DP平台申请测试者权限),点击"允许"授权,选择一个设备运…...

三级_网络技术_21_无线局域网设备安装与调试

1.下列关于IEEE802.11标准的描述中,错误的是() IEEE802.11无线传输的频道定义在UNII波段 IEEE802.11在物理层定义了两个扩频技术和一个红外传播规范 IEEE802.11在MAC子层引入了一个RTS/CTS选项 IEEE802.11定义的传输速率是1Mbps和2Mbps 2.下列关于IEEE802.11标…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...