Ubuntu22.04使用ch340的驱动问题

文章讲述了在Ubuntu22.04中遇到的ch34x驱动版本过老以及gcc版本过低的问题。作者从沁恒电子官网下载驱动,但发现不支持当前内核版本。为解决此问题,作者选择从源码构建适合内核版本的驱动,并升级gcc到12版本。经过编译和替换过程,最终成功解决了驱动不兼容的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因

看了挺多东西,折腾了一段时间,发现问题有以下几种

  1. Ubuntu22.04自带的ch34x驱动版本过老,使用ls /lib/modules/$(uname -r)/kernel/drivers/usb/serial命令查看Ubutnu自带驱动,找到ch341.ko发现是2013年的,先把旧驱动删除sudo rm ch341.ko
  2. brltty进程占用了串口
  3. gcc版本过低

解决

先到沁恒电子的官网下载驱动,下载完是这样子的。

但是!!!

官网的驱动包不支持我们版本的内核驱动,使用下面的命令查看内核版本,我的版本是5.19.0-43-generic

uname -r

到这里查看ch341的源码,并且复制到我们driver/ch341.c里面,把原有的代码完全替代

https://elixir.bootlin.com/linux/v5.15/source/drivers/usb/serial/ch341.c

我的版本是5.19.0-43-generic,所以是这样选的

然后在命令行运行

make -C /lib/modules/版本/build  M=/home/计算机名/CH341SER_LINUX/driver

这时候可能会出现gcc版本太低的问题,先看版本

gcc --version

确认已安装的 GCC 版本:

运行以下命令,列出系统上已安装的 GCC 版本:

ls /usr/bin/gcc*

下载gcc

直接搜自己想要的版本,这里是gcc12

手动更改默认编译器版本:

运行以下命令,更改默认的 gcc 编译器版本为你希望使用的版本:

sudo update-alternatives --set gcc /usr/bin/gcc-12

到目录下运行

sudo make load

这次报错了,别急,运行这段命令 (sakura和5.19.0-43-generic改成自己的)

sudo cp /home/sakura/CH341SER_LINUX/driver/ch341.ko  /lib/modules/5.19.0-43-generic/kernel/drivers/usb/serial
 

这段命令就是将make后输出的.ko文件复制到系统目录下

还有一个直接删除就好(盲人当我没说)

sudo apt remove brltty

使用lsmod和ls /dev/ttyUSB*查看是否识别到ttyusb0

### 安装 CH340 驱动Ubuntu 22.04 #### 准备工作 为了确保顺利安装CH340驱动,建议先更新系统软件包列表并升级已有的软件包到最新版本。这可以通过运行以下命令来完成: ```bash sudo apt update && sudo apt upgrade -y ``` #### 查看设备状态 在连接CH340硬件前,可以使用`lsusb`命令查看当前系统的USB设备情况;接着插上基于CH340的模块再次执行相同指令对比变化。 对于未加载正确驱动的情况,通常只会显示VID/PID信息而不会有对应的描述符[^3]。 #### 下载与编译驱动源码 前往指定仓库下载官方提供的CH34X系列驱动程序源文件,并按照如下步骤操作: 1. 获取必要的构建工具链以及依赖库: ```bash sudo apt install build-essential linux-headers-$(uname -r) dkms git wget ``` 2. 访问开源社区维护的存储库获取最新的驱动代码: ```bash cd /tmp/ git clone https://gitcode.com/Resource-Collection/2033b ch34x_driver cd ch34x_driver ``` 3. 编译内核模块: ```bash make clean make ``` 如果一切正常,则会在当前目录下生成名为`ch34x.ko`的目标文件。 #### 加载驱动至内存 通过下面两条命令临时将新编译好的驱动加入正在运行中的kernel环境中测试效果: ```bash sudo rmmod ch341 # 移除旧版可能存在的冲突项 sudo insmod ./ch34x.ko ``` 此时重新插入CH340转接器应该能够被识别为TTY端口而非原始的未知类型了。 #### 设置开机自动加载 为了让计算机每次启动都能应用此自定义驱动,需编辑/etc/modules-load.d/下的配置文档添加一行`ch34x`关键字实现持久化支持。 另外考虑到权限管理方面的问题,还需创建udev规则赋予普通用户访问串行接口的权利: ```bash echo "SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"1a86\", MODE=\"0666\"" | \ sudo tee /etc/udev/rules.d/99-ch34x.rules ``` 最后重启电脑使上述更改生效即可正常使用带有CH340控制器的产品啦!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值