编译替换Linux系统自带的ch340驱动

系统自带驱动
在官方Linux内核版本中自Kernel2.6以后就默认包含了对CH340/CH341芯片的驱动支持了,但比较遗憾的是该自带驱动版本较老(由开源社区开发者提交)已不能满足使用需求了,因此我们需要用芯片官网(http://www.wch.cn/ WCH 沁恒)提供的新驱动进行替换链接。

系统的默认驱动目录为:
/lib/modules/$(uname -r)/kernel/drivers,
系统自带驱动的完整路径名:
/lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko.xz
(CentOS8.1 是ch341.ko.xz,网上资料一般是ch341.ko)

将系统自带驱动移动到别处备份

官网驱动下载
官网驱动下载地址:
http://www.wch.cn/download/CH341SER_LINUX_ZIP.html

解压后包含3个文件:
ch34x.c readme.txt Makefile

编译安装
安装编译工具
dnf group install "Development Tools"

安装操作
unzip CH341SER_LINUX.ZIP
cd CH341SER_LINUX/
make
sudo make load

编译错误处理
问题1
make[1]: *** /lib/modules/4.18.0-147.el8.x86_64/build: No such file or directory. Stop.

yum list | grep kernel-devel 查询kernel-devel包
uname –r 查询系统内核版本
yum install kernel-devel-4.18.0-147.el8.x86_64 安装内核版本匹配的kernel-devel包

问题2
Makefile:977: *** "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel". Stop.

根据提示,安装elfutils-libelf-devel包

yum install elfutils-libelf-devel

问题3
/home/softwares/CH341SER_LINUX/ch34x.c:591:2: error: unknown type name ‘wait_queue_t’;

在整个源码中,wait_queue_t 没有被使用过,所以直接在源码中注释掉即可。

//wait_queue_t wait;

问题4
/home/softwares/CH341SER_LINUX/ch34x.c:797:7: error: implicit declaration of function ‘signal_pending’;

引入头文件#include <linux/sched/signal.h>

include <linux/sched/signal.h>

开机自动加载驱动
cp ch34x.ko /lib/modules/4.18.0-147.el8.x86_64/kernel/drivers/usb/serial/
depmod
reboot

编译后的驱动

版权声明:
作者:RuyeNet
链接:https://www.iloveu.top/archives/122
来源:RuyeNet
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录