在官方Linux内核版本中自Kernel2.6以后就默认包含了对CH340/CH341芯片的驱动支持,并且能成功识别驱动。
用串口软件正常打开串口却无法收发,其实是芯片官方更新芯片版本,这时候只需要用芯片官网提供的新驱动进行替换即可使用。
经测试只有Jetson系列4.x内核正常识别却不可用,树莓派5.x内核、工控机5.x内核正常使用,应该是4.x内核驱动版本较老(由开源社区开发者提交)已不能满足使用需求了,因此我们需要用芯片官网提供的新驱动进行替换链接。
这里是CH34x驱动地址:http://www.wch.cn/download/CH341SER_LINUX_ZIP.html
驱动安装
- 卸载自带版本驱动
将系统/lib/modules/$(uname -r)/kernel/drivers/usb/serial/
位置下的ch341.ko
驱动剪切到其他目录下
- 下载新的驱动到linux系统里
- 解压驱动,进入驱动目录
unzip CH341SER_LINUX.ZIP cd CH341SER_LINUX
- 编译驱动
make
该骤务必确认make 之后的执行过程和结果,如果没有顺利生成 ko驱动文件,需要自行解决报错或者咨询 tech@wch.cn请求帮助。
-
加载驱动
sudo make load
重新拔插设备,会出现下图所示的信息,通过命令sudo dmesg | tail
可看到设备节点名称为 ttyUSB0,我们可以到 /dev 目录下进行查看,会发现设备文件 /dev/ttyUSB0
开机自加载驱动
可能重启驱动就不见了,因此如果希望系统可以启动时自动加载驱动,这时候首先把驱动放到Linux系统的驱动默认存放目录:/lib/modules/$(uname -r)/kernel/drivers/usb/serial/
,执行完此步操作以后,再执行 depmod 命令更新驱动依赖关系文件 modules.dep,这一步一定要执行。之后我们重启系统,就可以发现驱动会自动加载了。
sudo cp ch34x.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/
sudo depmod