Ubuntu22.04安装CH340驱动及串口

一、CH340驱动安装

1.1 查看USB设备能否被识别

        Ctrl+Alt+T打开终端:

lsusb

        插入设备前:

        插入设备后:

输出中包含ID 1a86:7523 QinHeng ElectronicsCH340 serial converter的信息,这表明CH340设备已经被系统识别。

1.2 查看USB转串口

ls /dev/tty*

        结果如下:

查看是否有tyyUSB0或其他含tty和USB项,如果没有可以进行下一步。

        查看内存中关于ch341的日志:

sudo dmesg | grep ch341
        如果出现“ch341 driver exit”,则表示ch341转换器现在与ttyUSB0断开。

1.3 升级驱动

(1)下载驱动压缩包

        下载地址: CH341SER_LINUX.ZIP - 南京沁恒微电子股份有限公司

(2)安装驱动

        创建文件夹:

mkdir temp # 方便后续其他安装 cd temp mkdir ch340 

        剪切压缩包到 /temp/ch340 目录下解压:

unzip CH341SER_LINUX.ZIP

        到 /drive 目录下编译:

cd driver && make

        安装,使驱动程序永久工作:

sudo make install

(3)安装测试

        重新插拔一次USB串口转换器, 查看内存中关于ch341的日志:

sudo dmesg | grep ch341
这里我的是 ttyCH341USB0,只是名字变了,还能正常使用。

二、常用方法和指令

2.1 卸载冲突项

        驱动程序与brltty程序冲突,可以卸载brltty程序:

sudo apt autoremove --purge brltty

2.2 常用指令

(1)在/dev目录查看tty设备        

ls /dev/tty*
ls /dev/ttyUSB0

(2)修改设备权限

sudo chmod 777 /dev/ttyUSB0
这里我的是 ttyCH341USB0,只是名字变了,还能正常使用。

(3)查看串口权限

ls -l /dev/ttyCH341USB0

正常输出应包含 crw-rw-rw- 或组名为 dialout/uucp

临时解决方法:

三、串口权限问题永久解决方法

3.1 将用户加入串口组

         Ubuntu/Debian 系统:

sudo usermod -a -G dialout $USER


        Arch/Manjaro 系统:

sudo usermod -a -G uucp $USER

3.2 创建 udev 规则

        确保设备永久可读写:

sudo nano /etc/udev/rules.d/99-ttyCH341USB0.rules
注意:ttyCH341USB0需要替换为你的串口名。

        写入以下内容:

KERNEL=="ttyCH341USB0", MODE="0666", GROUP="dialout"

        保存文件(Ctrl+O→ EnterCtrl+X),是哦O不是零0。

3.3 重载 udev 规则

sudo udevadm control --reload-rules sudo udevadm trigger

3.4 重启电脑

reboot now

3.5 验证是否修复

ls -l /dev/ttyCH341USB0

        正常输出:

crw-rw-rw- 1 root dialout 188, 0 Aug 7 10:00 /dev/ttyCH341USB0
下载安装驱动CH340相关: Ubuntu安装CH340驱动教程-ZEEKLOG博客

Read more

【Java 开发日记】我们来说一下无锁队列 Disruptor 的原理

【Java 开发日记】我们来说一下无锁队列 Disruptor 的原理

目录 一、为什么需要 Disruptor?—— 背景与问题 二、核心设计思想 三、核心组件与原理 1. 环形缓冲区(Ring Buffer) 2. 序列(Sequence) 3. 序列屏障(Sequence Barrier) 4. 等待策略(Wait Strategy) 5. 事件处理器(EventProcessor) 6. 生产者(Producer) 四、工作流程示例(单生产者 -> 单消费者) 五、多消费者与依赖关系 六、总结:Disruptor 高性能的秘诀 一、为什么需要 Disruptor?—— 背景与问题 在高并发编程中,传统的队列(如 java.

By Ne0inhk
Java中的反射机制详解:从原理到实践的全面剖析

Java中的反射机制详解:从原理到实践的全面剖析

文章目录 * 摘要 * 第一章 反射机制概述 * 1.1 什么是反射? * 1.2 反射的江湖地位:为何需要它? * 1.3 反射的优缺点 * 第二章 反射的基石:Class类与类加载 * 2.1 万物皆对象:Class对象 * 2.2 获取Class对象的三种方式 * 2.3 类加载的幕后故事 * 第三章 解剖类:反射的核心API * 3.1 操作构造方法(Constructor):创建对象 * 3.2 操作字段(Field):访问与修改属性 * 3.3 操作方法(Method):动态调用 * 第四章 深入进阶:反射的高级特性 * 4.1

By Ne0inhk
【Java 开发日记】为什么要有 time _wait 状态,服务端这个状态过多是什么原因?

【Java 开发日记】为什么要有 time _wait 状态,服务端这个状态过多是什么原因?

目录 为什么要有 TIME_WAIT 状态? 原因一:可靠地终止TCP连接(确保最后的ACK能到达对方) 原因二:让旧连接的重复报文段在网络中自然消失(防止影响新连接) 服务端 TIME_WAIT 状态过多是什么原因? 原因一:服务端使用了短连接,并且是它主动关闭连接 原因二:客户端的非正常行为 原因三:负载均衡器的健康检查 总结 面试回答 为什么要有 TIME_WAIT 状态? TIME_WAIT,俗称2MSL等待状态,是TCP连接主动关闭一方(通常是客户端,但也可能是服务端)在发送最后一次ACK确认报文后,会进入的一个状态。它需要等待2倍的最大报文段生存时间后,才会最终进入CLOSED状态,释放连接资源。 设计TIME_WAIT状态主要有两个核心原因,它们是确保TCP协议可靠性的基石: 原因一:可靠地终止TCP连接(确保最后的ACK能到达对方) 这是最主要的原因。让我们回顾一下TCP四次挥手的正常流程: 1. 主动关闭方(假设为A)

By Ne0inhk
2025 最新|超级智能体开发全攻略:从理论到 Spring AI 落地

2025 最新|超级智能体开发全攻略:从理论到 Spring AI 落地

一、什么是 AI 智能体? AI 智能体(Agent)是一类以大语言模型为核心,集成记忆、知识库、工具调用等能力的智能系统。它能感知环境信息、自主推理决策、制定执行计划,最终达成特定目标,如同拥有自主意识的数字助手。 与普通 AI 大模型相比,智能体的核心优势在于 “自主性”,具体体现在: 1. 多模态环境感知:通过文本、图像、语音等多渠道获取信息,精准理解场景与需求 2. 复杂任务拆解:将大目标拆分为可执行的子任务,规划最优执行路径 3. 工具扩展能力:灵活调用 API、搜索引擎、代码执行器等外部工具,突破模型原生限制 4. 链式推理思维:通过思维链(CoT)逐步分析问题,提升复杂决策准确率 5. 长效记忆机制:留存历史交互数据,实现连贯对话与经验复用 6.

By Ne0inhk