安装RTL8812AU驱动时出现编译错误该如何修复或避免?
编译失败的核心原因是你使用的rtl88x2BU驱动源码未适配5.11版本的Linux内核,内核4.15版本之后就废弃了原有init_timer接口、移除了struct timer_list的data成员,同时驱动自定义的宏和内核头文件定义冲突。
可按照如下步骤修复:
- 先删除当前目录下的旧驱动源码,避免残留配置干扰编译
- 打开驱动根目录的Makefile,确认
CONFIG_RTL8812BU = y配置已开启,在EXTRA_CFLAGS配置行的末尾添加如下参数,规避不必要的编译报错:-Wno-error=implicit-function-declaration -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT - 打开
include/osdep_service_linux.h,找到报错位置对应的timer初始化代码,替换为适配新旧内核的兼容写法:#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) timer_setup(ptimer, pfunc, 0); #else ptimer->data = (unsigned long)cntx; init_timer(ptimer); ptimer->function = pfunc; #endif - 打开
include/wifi.h,找到1014行的IEEE80211_MAX_AMPDU_BUF宏定义,添加条件判断避免重复定义:#ifndef IEEE80211_MAX_AMPDU_BUF #define IEEE80211_MAX_AMPDU_BUF 0x40 #endif - 依次执行如下命令完成编译安装:
make clean make sudo make install sudo modprobe 88x2bu
内容的提问来源于stack exchange,提问作者ASCII404
相关产品推荐
相关产品推荐

