Ubuntu系统安装CH340驱动

news2024/11/24 6:39:15

 今天在使用USB转UART模块连接设备时发现我的Ubuntu虚拟机无法识别USB设备,这个模块使用的CH340芯片,在Windows主机中可以识别到串口并连接,所以初步判断为虚拟机中缺少ch340驱动。实际上自Linux内核版本2.6.24起,Linux主线内核已内置ch341串行驱动。其位置在:drivers/usb/serial/ch341.c,但是内置驱动无法保持更新,驱动官方建议客户安装使用新的驱动。

安装驱动 

在安装前先查看下内核版本,有些内核版本可能与下载的驱动文件存在不兼容现象:

uname -r

这里我的内核版本是 6.8.0-39-generic

6.8.0-39-generic

随后在官网下载CH340的驱动文件压缩包: 

压缩包下载地址:CH341SER_LINUX.ZIP - 南京沁恒微电子股份有限公司 (wch.cn) 

我的Ubuntu虚拟机是带图形显示的版本,无头模式的系统可以使用FTP或者SSH的方式把下载好的压缩包上传到服务器或虚拟机,也可以尝试下其他方式:

下载完成后cd到压缩包所在的路径,在终端输入命令将压缩包解压缩到/usr/local/src文件夹:

sudo unzip CH341SER_LINUX.ZIP -d /usr/local/src

文件解压后可以看到文件夹内有一个markdown的说明文档和driver文件夹,driver文件夹内存放着ch341的.c文件与.h、Makefile文件,其中Makefile文件主要用于自动化编译和构建程序。

driver文件夹内容如下: 

 编译驱动文件

随后在终端切换到解压后的驱动目录: 

cd /usr/local/src/CH341SER_LINUX/driver

输入make命令构建文件:

sudo make

 这里有可能会报错,因为CH341.C文件中在定义ch341_tty_write函数时与我的内核版本(6.8.0-39-generic)不兼容:

make -C /lib/modules/6.8.0-39-generic/build  M=/usr/local/src/CH341SER_LINUX/driver  
make[1]: 进入目录“/usr/src/linux-headers-6.8.0-39-generic”
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0
  You are using:           gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0
  CC [M]  /usr/local/src/CH341SER_LINUX/driver/ch341.o
/usr/local/src/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 ‘int (*)(struct tty_struct *, const unsigned char *, int)’ [-Werror=incompatible-pointer-types]
 1460 |         .write = ch341_tty_write,
      |                  ^~~~~~~~~~~~~~~
/usr/local/src/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:/usr/local/src/CH341SER_LINUX/driver/ch341.o] 错误 1
make[2]: *** [/usr/src/linux-headers-6.8.0-39-generic/Makefile:1926:/usr/local/src/CH341SER_LINUX/driver] 错误 2
make[1]: *** [Makefile:240:__sub-make] 错误 2
make[1]: 离开目录“/usr/src/linux-headers-6.8.0-39-generic”
make: *** [Makefile:5:default] 错误 2

使用Vim修改下ch341.c文件,这里我的Ubuntu系统并非实际的生产环境,如果是生产环境还得考虑一些其他因素

sudo vi /usr/local/src/CH341SER_LINUX/driver/ch341.c

找到 ch341_tty_write 函数,将函数定义修改一下,原函数定义如下:

int ch341_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)

 修改后的函数定义为:

ssize_t ch341_tty_write(struct tty_struct *tty, const unsigned char *buf, size_t count)

原代码中,count被定义为int类型修改后count被定义为size_t类型。使用size_t作为count的类型,更明确地表示count应该是一个非负整数,表示要处理的数据量的大小。最后函数返回类型是ssize_t,是一个允许函数返回负值以表示错误或特殊情况的有符号类型。

 再次输入make构建命令后构建成功:

 使用modprobe加载模块,modprobe可以自动处理内核模块

sudo modprobe ch341

 使用lsmod命令查看是否加载成功,这个命令可以显示已加载到内核中的模块列表:

lsmod

 模块加载成功:

输入命令让驱动永久生效: 

sudo make install
查看串口设备信息及端口号  

使用lsusb命令查看USB连接设备,可以显示本机USB设备列表及其详细信息: 

lsusb

这里可以看到连接到了一个CH340设备

 输入以下命令可以显示特定USB设备的详细信息和树状结构显示USB设备层次

lsusb -v -d 1a86:7523 // 刚才检查出来的设备ID号
lsusb -t

 

 

 输入命令列出所有以 /dev/ttyUSB 开头的设备文件

ls /dev/ttyUSB*

这里可以看到USB串行设备的端口号了

官方说明文件

 以下内容全部为官方的说明文件:

针对USB转UART芯片ch340、ch341等的USB串行驱动。事实上,自Linux内核版本2.6.24起,Linux主线内核已内置ch341串行驱动。其位置在:drivers/usb/serial/ch341.c,遗憾的是,内置驱动无法保持更新。我们建议客户使用此驱动。

  1. 打开“终端
  2. 切换到“driver”目录
  3. 使用“make”编译驱动,如果成功,你将看到模块“ch341.ko
  4. 输入“sudo make load”或“sudo insmod ch341.ko”动态加载驱动
  5. 输入“sudo make unload”或“sudo rmmod ch341.ko”卸载驱动
  6. 输入“sudo make install”使驱动永久生效
  7. 输入“sudo make uninstall”移除驱动
  8. 你可以参考以下链接获取uart应用程序,你可以使用gcc或交叉编译工具cross-gcc进行编译
    GitHub - WCHSoftGroup/tty_uart: linux tty uart application

在驱动工作之前,你应确保USB设备已插入并正常工作,你可以使用shell命令“lsusb”或“dmesg”进行确认,这些设备的USB VID为[1a86],你可以在“ch341.c”中定义的id表中查看所有ID。

如果设备工作正常,驱动将在/dev目录下创建名为“ttyCH341USBx”的tty设备。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生-Docker安全-容器逃逸系统内核漏洞(解决docker.com无法访问)

云原生-Docker安全-容器逃逸&系统内核漏洞 细节部分在权限提升章节会详解,常用: CVE-2016-5195 CVE-2019-16884 CVE-2021-3493 CVE-2021-22555 CVE-2022-0492 CVE-2022-0847 CVE-2022-23222 云原生-Docker安全-容器逃逸&docker版本漏洞 CVE…

基于Java的医院急诊系统

TOC springboot327基于Java的医院急诊系统 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的广泛…

【中等】 猿人学web第一届 第7题 动态字体,随风漂移

文章目录 获取字体文件映射关系获取页面英雄排序python 代码 这道题是 动态字体文件加密,找出动态字体文件中对应数字相同规律即可 数据接口 https://match.yuanrenxue.cn/api/match/7 数据接口没有加密值 cookie字段也没有 获取字体文件映射关系 多次观察 字体文件…

2.2 Oracle与SQL Server简介

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

仿Muduo库实现高并发服务器——事件监控Poller模块

Poller模块在整个项目的使用 下面代码是对I/O复用接口函数的基本使用。 回顾上篇文章:事件监控管理模块 这个模块是将触发事件的描述符,给到外面,让外面去做对应的处理。 #define MAX_EPOLLEVENTS 1024 class Poller {private:int _epfd;s…

三级_网络技术_18_路由器的配置及使用

1.在Cisco路由器上用于永久保存路由器的开机诊断程序、引导程序和操作系统软件的存储器是()。 Flash NVRAM RAM ROM 2.在Cisco路由器中主要用来永久保存路由器的开机诊断程序、引导程序和操作系统,以完成路由器初始化进程的存储器是()。 RAM Disk Flash RO…

Linux平台使用OPUS对Audio PCM数据进行编解码

1)Audio编解码入门级小知识,分享给将要学习或者正在学习Audio编解码开发的同学。 2)内容属于原创,若转载,请说明出处。 3)提供相关问题有偿答疑和支持。 Opus编码是一个开源的音频编码格式,具…

ArduPilot二次开发零基础教程

文章目录 前言一、概述二、开发环境搭建三、多旋翼MAVROS自主控制接口四、无人船(车)MAVROS自主控制接口五、二次开发基础六、控制LED灯七、自定义串口驱动八、Guided控制接口九、输出自定义PWM信号十、添加自定义MAVLINK消息和QGC通信十一、自定义日志十…

[MRCTF2020]套娃1

打开题目,查看源代码,有提示 有两层过滤 1.过滤"_"与"%5f" 。 这里要求的参数必须是"b_u_p_t"但是不能检测出"_"。这里看着很作弄人。其实这里要用到php里非法参数名的问题。可以参考一下博客 ?b.u.p.t2333…

探索Pandas的魔力:Python数据分析的终极武器

文章目录 探索Pandas的魔力:Python数据分析的终极武器背景:为何选择Pandas?引言:Pandas是什么?安装Pandas:一键安装的便捷基础函数:Pandas的五大法宝应用场景:Pandas的实战演练常见问…

浏览器调试工具-Chrome Dev Tools

浏览器调试模式下的各个调试工具是常用的工具集,能够帮助开发者理解、调试和优化网页。 1.打开方式 直接在浏览器中按下F12键右键点击页面上的任一元素,选择“检查”(Inspect)在浏览器右上角点击菜单按钮,选择“更多…

Redis:缓存击穿,缓存穿透,缓存雪崩

缓存穿透 缓存和数据库中都没有的数据,可用户还是源源不断的发起请求,导致每次请求都会到数据库,从而压垮数据库。 这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。 *** 解决方案** 对空值进行缓存标…

音乐生成模型应用

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

根据年月计算当月有哪几个周,及每周的起止日期

示例 传参数年、月,返回包含当月的所有周数、及周的起止日期,支持跨月 特殊情况请自行修改函数 console.log(getWeeksInMonth(2024, 9));返回如下 源码 源码以elementUI的周选择框的起止日期作为参考 function getWeeksInMonth(year, month) {// 计…

讲透一个强大算法模型,Transformer !!零基础入门到精通,收藏这一篇就够了

哈喽,我是cos大壮!~ **首先,官话:**Transformer 模型是由 Vaswani 等人在 2017 年提出的一种新型神经网络架构,用于解决序列到序列的任务,比如机器翻译、文本生成等。它的核心思想是通过「注意力机制」来捕…

冷知识:编程第一人是位伟大的女性

冷门智慧:阿达编程先驱的传奇人生揭秘在线播放免费听 - 喜马拉雅手机版欢迎收听由主播壹道徽为您带来的“冷门智慧:阿达编程先驱的传奇人生揭秘”精彩有声内容,该音频时长5分18秒,已被收听1062次,用户嘎嘎呗嘎嘎评价说…

关于msvcp120.dll丢失的解决方法的详细步骤教程,一步步教你修复丢失错误

msvcp120.dll是一个动态链接库文件(DLL),它是 Microsoft Visual C 2013 Redistributable 的一部分。这个文件对于运行使用 C 编写的多种Windows应用程序非常重要。以下解析将分为几个部分来详细探讨此文件的来源、功能、重要性及其可能遇到的…

暑期全新测评《黑神话悟空》显卡测试与录屏工具推荐:性能优化与屏幕捕捉技巧

随着《黑神话悟空》这款备受期待的游戏即将问世,玩家们不仅对游戏的画质和性能充满好奇,更希望能够记录下游戏中的每一个精彩瞬间。本文将为您提供一份全面的指南,不仅包括《黑神话悟空》在主流显卡上的帧数测试结果,画质选项的优…

Windows Server 使用Docke部署挂载问题(安装后无限重启崩溃迁移镜像到D盘打包镜像)

文章目录 前言一、问题:无限重启崩溃尝试:权限不足?解决:用Docker-Compose安装并挂载数据卷 二、问题:镜像磁盘默认挂载在C盘尝试:通过修改Docker修改镜像磁盘到D盘解决:通过修改docker的settin…

【OpenCV】window 下 VS Code 配置OpenCV

文章目录 前言直接使用OpenCV 编译好的库自己编译OpenCVVS Code 安装MinGW下载下载Cmake编译OpenCV VS Code 运行cv程序VSCode配置运行CV程序 参考文章 前言 在网上找了些资料,大致得出VS Code开发OpenCV的环境配置流程,如下 安装VS Code安装MinGW安装…