解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题

文章目录

  • 解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题
    • 不识别CH340/CH341
      • 报错
      • 解决办法
        • 升级驱动
          • 编译安装
        • 卸载brltty程序
    • vscode espidf插件无法选择串口设备节点
      • 问题
      • 解决办法
        • 编译安装

解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题

不识别CH340/CH341

报错

lsusb 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 009: ID 1a86:7523 QinHeng Electronics CH340 serial converter
Bus 001 Device 004: ID 0e0f:0008 VMware, Inc. Virtual Bluetooth Adapter
Bus 001 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubxxxxxxxxxx dmesglsusb Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 001 Device 009: ID 1a86:7523 QinHeng Electronics CH340 serial converterBus 001 Device 004: ID 0e0f:0008 VMware, Inc. Virtual Bluetooth AdapterBus 001 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB HubBus 001 Device 002: ID 0e0f:0003 VMware, Inc. Virtual MouseBus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

执行lsusb,发现可以检测到ch340设备,但是/dev下却没有设备节点

dmesg
[  582.564563] usb 1-2.2: USB disconnect, device number 6
[  610.085165] usb 1-2.2: new full-speed USB device number 7 using uhci_hcd
[  610.396210] usb 1-2.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64
[  610.396216] usb 1-2.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[  610.396218] usb 1-2.2: Product: USB Serial
[  610.401423] ch341 1-2.2:1.0: ch341-uart converter detected
[  610.415702] usb 1-2.2: ch341-uart converter now attached to ttyUSB0
[  610.975480] input: BRLTTY 6.4 Linux Screen Driver Keyboard as /devices/virtual/input/input9
[  610.982887] usb 1-2.2: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
[  610.986786] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[  610.986811] ch341 1-2.2:1.0: device disconnected

发现和 brltty程序冲突。

解决办法

升级驱动

CH341SER_LINUX.ZIP - 南京沁恒微电子股份有限公司 (wch.cn)

下载后解压,可以看到下列文件。

image-20240822213842990

README.md文件写有教程。

描述
这是一个为 CH340、CH341 等 USB 至 UART 芯片设计的 USB 串行驱动程序。实际上,自从内核版本 2.6.24 开始,Linux 主线内核就已经内置了 CH341 串行驱动程序。该驱动程序的位置是:drivers/usb/serial/ch341.c。遗憾的是,内置的驱动程序可能无法保持最新状态。我们建议客户使用这个驱动程序。

打开“终端”
切换到“driver”目录
使用 make 命令编译驱动程序,如果成功,您将看到模块 ch341.ko
输入 sudo make load 或者 sudo insmod ch341.ko 动态加载驱动程序
输入 sudo make unload 或者 sudo rmmod ch341.ko 卸载驱动程序
输入 sudo make install 使驱动程序永久生效
输入 sudo make uninstall 移除驱动程序
您可以参考下面的链接获取 UART 应用程序,您可以使用 gcc 或者交叉编译工具 cross-gcc https://github.com/WCHSoftGroup/tty_uart
在驱动程序工作之前,请确保 USB 设备已经插入并且正常工作,您可以通过 shell 命令 lsusb 或 dmesg 来确认这一点。这些设备的 USB VID 是 [1a86],您可以从定义在 ch341.c 中的 ID 表中查看所有 ID。

如果设备工作良好,驱动程序将在 /dev 目录下创建名为 ttyCH341USBx 的 tty 设备。

注意
有任何问题,您可以发送反馈至邮箱:tech@wch.cn
编译安装

进入到driver目录编译后报错,gcc-12: not found。

make
make -C /lib/modules/6.8.0-40-generic/build  M=/home/donnel/CH341SER_LINUX/driver  
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-40-generic'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
  You are using:           
  CC [M]  /home/donnel/CH341SER_LINUX/driver/ch341.o
/bin/sh: 1: gcc-12: not found
make[3]: *** [scripts/Makefile.build:243: /home/donnel/CH341SER_LINUX/driver/ch341.o] Error 127
make[2]: *** [/usr/src/linux-headers-6.8.0-40-generic/Makefile:1926: /home/donnel/CH341SER_LINUX/driver] Error 2
make[1]: *** [Makefile:240: __sub-make] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-40-generic'
make: *** [Makefile:5: default] Error 2

安装gcc-12即可。

sudo apt install gcc-12

然后继续编译,报错,函数原型不一致。

make -C /lib/modules/6.8.0-40-generic/build  M=/home/donnel/CH341SER_LINUX/driver  
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-40-generic'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
  You are using:           gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
  CC [M]  /home/donnel/CH341SER_LINUX/driver/ch341.o
/home/donnel/CH341SER_LINUX/driver/ch341.c:1460:18: error: initialization of ‘ssize_t (*)(struct tty_struct *, const u8 *, size_t){aka ‘long int (*)(struct tty_struct *, const unsigned char *, long unsigned int)} from incompatible pointer type ‘ssize_t (*)(struct tty_struct *, const unsigned char *, int){aka ‘long int (*)(struct tty_struct *, const unsigned char *, int)} [-Werror=incompatible-pointer-types]
 1460 |         .write = ch341_tty_write,
      |                  ^~~~~~~~~~~~~~~
/home/donnel/CH341SER_LINUX/driver/ch341.c:1460:18: note: (near initialization for ‘ch341_ops.write’)
cc1: some warnings being treated as errors
make[3]: *** [scripts/Makefile.build:243: /home/donnel/CH341SER_LINUX/driver/ch341.o] Error 1
make[2]: *** [/usr/src/linux-headers-6.8.0-40-generic/Makefile:1926: /home/donnel/CH341SER_LINUX/driver] Error 2
make[1]: *** [Makefile:240: __sub-make] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-40-generic'
make: *** [Makefile:5: default] Error 2

修改驱动文件,ch340.c。

646c646
< static int ch341_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
---
> static ssize_t ch341_tty_write(struct tty_struct *tty, const u8 *buf, size_t count)

再编译安装即可。

make 
make -C /lib/modules/6.8.0-40-generic/build  M=/home/donnel/CH341SER_LINUX/driver  
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-40-generic'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
  You are using:           gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
  CC [M]  /home/donnel/CH341SER_LINUX/driver/ch341.o
  MODPOST /home/donnel/CH341SER_LINUX/driver/Module.symvers
  CC [M]  /home/donnel/CH341SER_LINUX/driver/ch341.mod.o
  LD [M]  /home/donnel/CH341SER_LINUX/driver/ch341.ko
  BTF [M] /home/donnel/CH341SER_LINUX/driver/ch341.ko
Skipping BTF generation for /home/donnel/CH341SER_LINUX/driver/ch341.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-40-generic'


sudo make install
make -C /lib/modules/6.8.0-40-generic/build  M=/home/donnel/CH341SER_LINUX/driver  
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-40-generic'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
  You are using:           gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-40-generic'
rmmod ch341 || true
insmod ch341.ko || true
mkdir -p /lib/modules/6.8.0-40-generic/kernel/drivers/usb/serial/ || true
cp -f ./ch341.ko /lib/modules/6.8.0-40-generic/kernel/drivers/usb/serial/ || true
depmod -a
卸载brltty程序

brltty介绍

brltty 是一款专为盲人设计的屏幕阅读器软件,它能够将文本输出转换为盲文点阵显示器上的触觉反馈。brltty 支持多种类型的盲文点阵显示器,并且能够在多种操作系统上运行,包括 Linux、FreeBSD 和 Mac OS X。

brltty 的主要功能包括:

文本到盲文转换:将计算机屏幕上的文本转换成盲文点阵显示器上的触觉输出。
键盘输入支持:允许用户通过盲文点阵显示器上的按键来输入文本或命令。
语音合成:提供文本到语音的功能,对于没有盲文点阵显示器的用户也可以使用。
Braille Backspace:当用户在盲文点阵显示器上输入时,如果需要删除前面的字符,可以通过特定的键组合实现。
多语言支持:支持多种语言的盲文编码,包括英语、西班牙语等。
集成环境:可以与多种辅助技术工具集成,如其他屏幕阅读器或语音合成引擎。
brltty 软件通常用于教育机构、图书馆以及个人计算机上,以帮助视障人士更好地使用计算机和互联网资源。此外,brltty 还可以与其他辅助技术结合使用,比如支持通过声音反馈来读取屏幕上的信息。

在 Linux 系统中,brltty 通常作为一项服务运行,可以通过系统服务管理工具启动和停止。安装 brltty 可以通过包管理器进行,例如在基于 Debian 的系统中,可以使用 apt-get install brltty 命令来安装。
sudo apt autoremove --purge brltty

重新插拔一次,就可以识别到了。

[ 3837.097423] usb_ch341 1-2.2:1.0: ch341 usb device disconnect.
[ 3840.079302] usb 1-2.2: new full-speed USB device number 10 using uhci_hcd
[ 3840.390310] usb 1-2.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64
[ 3840.390321] usb 1-2.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 3840.390324] usb 1-2.2: Product: USB Serial
[ 3840.395429] usb_ch341 1-2.2:1.0: ttyCH341USB0: ch341 USB device

ls /dev/ttyCH341USB0 
/dev/ttyCH341USB0

到这里CH340和CH341就可以正常识别到了

vscode espidf插件无法选择串口设备节点

问题

上文已经可以识别到串口设备了,但是乌龙的是vscode esp-idf插件居然不能选择。

image-20240822215209299

解决办法

然后经过我的仔细观察,他好像过滤了ttyS开头的串口。

正好刚刚升级驱动时源码还没删,所以可以直接改驱动,把节点改为ttyS开头的即可。

修改ch340.c

646c646
< static int ch341_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
---
> static ssize_t ch341_tty_write(struct tty_struct *tty, const u8 *buf, size_t count)
1271c1271
<       dev_info(&intf->dev, "ttyCH341USB%d: ch341 USB device\n", minor);
---
>       dev_info(&intf->dev, "ttySCH341USB%d: ch341 USB device\n", minor);
1483c1483
<       ch341_tty_driver->driver_name = "ch341_uart", ch341_tty_driver->name = "ttyCH341USB",
---
>       ch341_tty_driver->driver_name = "ch341_uart", ch341_tty_driver->name = "ttySCH341USB",
编译安装
make && sudo make install

重新拔插后,发现可以选择了。

image-20240822215614052

如果还出现烧录报错的情况,请检查配置信息是否正确,除了这个也有可能是没有权限读写串口,可以修改串口权限。

sudo chmod 777 /dev/ttySCH341USB0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/872089.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

坐标大连!提交EI、Scopus、知网检索!第五届经济管理与大数据应用国际学术会议(ICEMBDA 2024)

合作ACM出版-EI稳检索 高录用&#xff0c;快见刊&#xff01; 管理、经济、金融、计算机相关主题均可投稿 目前仍有口头汇报名额&#xff0c;如有需要请尽快报名 重要信息 会议官网&#xff1a;www.icembda.org 会议时间&#xff1a;2024年10月25日-27日 会议地点&#x…

【Python系列】方法返回2个值

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

spring security 入门基础,表单认证web页面跳转

一、导入所需依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.2</version></parent><!-- web 支持 --><dependency><groupId>…

FPGA 综合笔记

仿真时阻塞赋值和非阻塞赋值 Use of Non-Blocking Assignment in Testbench : Verilog Use of Non-Blocking Assignment in Testbench : Verilog - Stack Overflow non-blocking assignment does not work as expected in Verilog non-blocking assignment does not work a…

Linux云计算 |【第二阶段】SECURITY-DAY3

主要内容&#xff1a; Prometheus监控服务器、Prometheus被监控端、Grafana监控可视化 补充&#xff1a;Zabbix监控软件不自带LNMP和DB数据库&#xff0c;需要自行手动安装配置&#xff1b;Prometheus监控软件自带WEB页面和DB数据库&#xff1b;Prometheus数据库为时序数据库&…

adaptive AUTOSAR UCM模块中SoftwareCluster与Software Package是什么样的关系,他们分别包含哪些元素?

在自适应AUTOSAR(Adaptive AUTOSAR)的更新和配置管理(UCM)模块中,SoftwareCluster和Software Package是软件更新过程中的两个关键概念,它们之间有着密切的关系: SoftwareCluster:通常指的是一组功能相关的软件组件,它们共同实现了车辆中的一个或多个特定功能。在UCM中…

柔性织物处理 | 山大宋锐老师 | 最新演讲

笔者是清华在读研究生&#xff0c;主要关注人形机器人、具身智能。将持续分享行业前沿动态、学者观点整理、论文阅读笔记、知识学习路线等。欢迎交流 最近听了宋老师的演讲&#xff0c;以下是学习整理。部分图截自直播&#xff0c;若模糊望见谅 演讲信息&#xff1a; 【会议】…

Python | Leetcode Python题解之第365题水壶问题

题目&#xff1a; 题解&#xff1a; class Solution:def canMeasureWater(self, x: int, y: int, z: int) -> bool:if x y < z:return Falseif x 0 or y 0:return z 0 or x y zreturn z % math.gcd(x, y) 0

实现BeanPostProcessor

文章目录 1.实现初始化方法1.目录2.InitializingBean.java3.MonsterService.java 实现初始化接口4.SunSpringApplicationContext.java 调用初始化方法5.测试 2.实现后置处理器1.目录2.BeanPostProcessor.java 后置处理器接口3.SunBeanProcessor.java 自定义后置处理器4.SunSpri…

ZMQ请求应答模型

案例一 这个案例的出处是ZMQ的官网。请求段发送Hello&#xff0c;应答端回复World。 ZMQ Request(client) #include <string> #include <iostream> #include <zmq.hpp>using namespace std; using namespace zmq; // 使用 zmq 命名空间int main() {// ini…

PHP轻创推客集淘客地推任务平台于一体的综合营销平台系统源码

&#x1f680;轻创推客&#xff0c;营销新纪元 —— 集淘客与地推任务于一体的全能平台&#x1f310; &#x1f308;【开篇&#xff1a;营销新潮流&#xff0c;轻创推客引领未来】 在瞬息万变的营销世界里&#xff0c;你还在为寻找高效、全面的营销渠道而烦恼吗&#xff1f;&…

【STM32】C语言基础补充

学习过程中发现自己好些需要用到的C语言语法、特征都不太熟练了&#xff0c;特意记录一下&#xff0c;免得忘记了&#xff0c;以后遇到了新的也会继续更新 目录 1 全局变量 2 结构体 3 静态变量 4 memset()函数 5 使用8位的存储器存16位的数 1 全局变量…

汽车冷却液温度传感器

1、冷却液温度传感器的功能 发动机冷却液温度传感器&#xff0c;也称为ECT&#xff0c;是帮助保护发动机&#xff0c;提高发动机工作效率以及帮助发动机稳定运行的非常重要的传感器之一。 发动机冷却液温度 &#xff08;ECT&#xff09; 传感器用于测量发动机的冷却液温度&…

Vue项目创建和使用

快速上手 | Vue.js (vuejs.org) nodejs.org/ vue项目实质上是index.html页面和多个js文件的集合&#xff0c;最终解析后的html和js代码可以由浏览器解析运行&#xff1a; vue项目的创建&#xff0c;需要脚手架工具来搭建&#xff1b; 在编译的源码阶段&#xff0c;文件格式为.…

集团数字化转型方案(十二)

集团数字化转型方案致力于通过构建一个集成化的数字平台&#xff0c;全面应用大数据分析、人工智能、云计算和物联网等前沿技术&#xff0c;推动业务流程、管理模式和决策机制的全面升级。该方案将从业务流程的数字化改造开始&#xff0c;优化资源配置&#xff0c;提升运营效率…

MySQL的源码安装及基本部署(基于RHEL7.9)

这里源码安装mysql的5.7.44版本 一、源码安装 1.下载并解压mysql , 进入目录: wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz tar xf mysql-boost-5.7.44.tar.gz cd mysql-5.7.44/ 2.准备好mysql编译安装依赖: yum install cmake g…

牛客网习题——通过C++实现

一、目标 实现下面4道练习题增强C代码能力。 1.求123...n_牛客题霸_牛客网 (nowcoder.com) 2.计算日期到天数转换_牛客题霸_牛客网 (nowcoder.com) 3.日期差值_牛客题霸_牛客网 (nowcoder.com) 4.打印日期_牛客题霸_牛客网 (nowcoder.com) 二、对目标的实现 1.求123...n_…

杰发科技AC7840——CAN通信简介(8)_通过波特率和时钟计算SEG_1/SEG_2/SJW/PRESC

通过公式计算 * 波特率和采样点计算公式&#xff1a;* tSeg1 (S_SEG_1 2); tSeg2 (S_SEG_2 1).* BandRate (SCR_CLK / (S_PRESC 1) / ((S_SEG_1 2) (S_SEG_2 1))), SCR_CLK 为CAN 模块源时钟* SamplePoint (tSeg1 / (tSeg1 tSeg2)). {0x0D, 0x04, 0x04, 0x3B},…

[创业之路-140] :生产 - 生产流程概述

目录 前言&#xff1a; 一、生产流程的基本框架 二、生产流程的关键要素 前言&#xff1a; 生产流程是一个广泛的概念&#xff0c;它涵盖了从原材料投入到成品产出的全过程。 这个过程在不同行业和领域中有所不同&#xff0c;但通常都包括一系列有序的步骤和环节。 以下是…

WIN 10 添加右键菜单(VSCode 打开当前目录)

WIN 10 添加右键菜单&#xff08;VSCode 打开当前目录&#xff09; 前言最终效果操作步骤 前言 每次打开代码都需要先打开 VSCode&#xff0c;再选择最近打开的项目或者浏览打开项目&#xff0c;感觉比较难找。所以自己添加了右键命令。 最终效果 操作步骤 cmd 打开注册表 找…