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

本文主要是介绍解决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 kernelThe kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0You 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 kernelThe kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0You are using:           gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0CC [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 kernelThe kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0You are using:           gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0CC [M]  /home/donnel/CH341SER_LINUX/driver/ch341.oMODPOST /home/donnel/CH341SER_LINUX/driver/Module.symversCC [M]  /home/donnel/CH341SER_LINUX/driver/ch341.mod.oLD [M]  /home/donnel/CH341SER_LINUX/driver/ch341.koBTF [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 kernelThe kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0You 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 devicels /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

这篇关于解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097692

相关文章

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利,不是随便说说,诸葛亮六出祁山,连关中陇右的几座小城都攻不下来,行军山高路险,无法携带和建造攻城器械,是最难的,所以在汉中,无论从哪一方进攻,防守方都是一夫当关,万夫莫开;再加上千里运粮,根本不需要打,司马懿只需要坚守城池拼消耗就能不战而屈人之兵。 另一边,洛阳的虎牢关,一旦突破,洛阳就无险可守,这样的进军路线,才是顺势而为的用兵之道。 读历史的时候我们常常看到某一方势

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验