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 7月 25 14:37 /dev/serial_usb -> ttyUSB0
可以看到自动并联到ttyUSB0,现在通过/dev/serial_usb
即可访问串口。
注意
如果sudo dmesg | grep tty
发现串口一连接就断开可以参考如下12:
# 卸载冲突的brltty软件
sudo apt-get remove brltty
理论上应该可以正常使用了。
virtualbox 虚拟机ubuntu22 识别不了CH340串口_ubuntu 不识别ch340-CSDN博客 ↩︎
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标…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...