原因
看了挺多东西,折腾了一段时间,发现问题有以下几种
- Ubuntu22.04自带的ch34x驱动版本过老,使用ls /lib/modules/$(uname -r)/kernel/drivers/usb/serial命令查看Ubutnu自带驱动,找到ch341.ko发现是2013年的,先把旧驱动删除sudo rm ch341.ko
- brltty进程占用了串口
- 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