Ubuntu16.04编译rtl8811cu的网卡驱动,总是失败

包含网卡/无线网的网络问题和ADSL/校园网/宽带拨号支持及代理/共享等网络使用问题
回复
ChineseAStar
帖子: 5
注册时间: 2020-12-30 22:34
系统: Ubuntu16.04

Ubuntu16.04编译rtl8811cu的网卡驱动,总是失败

#1

帖子 ChineseAStar » 2020-12-30 22:50

设备:
新组了一台式机,买了个tplink的wdn5200h的无线网卡。
内核版本:
试了好几个内核版本:5.4、5.8、5.9、5.10。都是各自的最新版。
驱动代码:
试了几个
https://github.com/brektrou/rtl8821CU
https://github.com/mbrysa/rtl8821CU.git
https://github.com/maxhw/rtl8821CU.git
错误:
DKMS make.log for rtl8821CU-5.4.1 for kernel 5.9.16-050916-generic (x86_64)
2020年 12月 30日 星期三 22:21:20 CST
make ARCH=x86_64 CROSS_COMPILE= -C /lib/modules/5.9.16-050916-generic/build M=/var/lib/dkms/rtl8821CU/5.4.1/build modules
make[1]: Entering directory '/usr/src/linux-headers-5.9.16-050916-generic'
CC [M] /var/lib/dkms/rtl8821CU/5.4.1/build/core/rtw_cmd.o
In file included from <command-line>:0:0:
./arch/x86/include/asm/segment.h: In function ‘vdso_read_cpunode’:
././include/linux/compiler_types.h:245:24: error: expected ‘(’ before ‘__inline’
#define asm_inline asm __inline
^
./arch/x86/include/asm/alternative.h:240:2: note: in expansion of macro ‘asm_inline’
asm_inline volatile (ALTERNATIVE(oldinstr, newinstr, feature) \
^
./arch/x86/include/asm/segment.h:266:2: note: in expansion of macro ‘alternative_io’
alternative_io ("lsl %[seg],%[p]",
^
In file included from ./arch/x86/include/asm/bitops.h:17:0,
from ./include/linux/bitops.h:29,
from ./include/linux/kernel.h:12,
from ./include/linux/list.h:9,
from ./include/linux/module.h:12,
from /var/lib/dkms/rtl8821CU/5.4.1/build/include/basic_types.h:76,
from /var/lib/dkms/rtl8821CU/5.4.1/build/include/drv_types.h:26,
from /var/lib/dkms/rtl8821CU/5.4.1/build/core/rtw_cmd.c:17:
./arch/x86/include/asm/alternative.h:108:2: error: expected identifier or ‘(’ before string constant
"# ALT: oldnstr\n" \
^
./arch/x86/include/asm/alternative.h:159:2: note: in expansion of macro ‘OLDINSTR’
OLDINSTR(oldinstr, 1) \
^
......................................................................................
^
./include/asm-generic/bug.h:94:19: note: in expansion of macro ‘__WARN_FLAGS’
#define __WARN() __WARN_FLAGS(BUGFLAG_TAINT(TAINT_WARN))
^
./include/asm-generic/bug.h:121:3: note: in expansion of macro ‘__WARN’
__WARN(); \
^
/var/lib/dkms/rtl8821CU/5.4.1/build/include/osdep_service.h:473:32: note: in expansion of macro ‘WARN_ON’
#define rtw_warn_on(condition) WARN_ON(condition)
^
/var/lib/dkms/rtl8821CU/5.4.1/build/core/rtw_cmd.c:4853:4: note: in expansion of macro ‘rtw_warn_on’
rtw_warn_on(1);
^
scripts/Makefile.build:283: recipe for target '/var/lib/dkms/rtl8821CU/5.4.1/build/core/rtw_cmd.o' failed
make[2]: *** [/var/lib/dkms/rtl8821CU/5.4.1/build/core/rtw_cmd.o] Error 1
Makefile:1787: recipe for target '/var/lib/dkms/rtl8821CU/5.4.1/build' failed
make[1]: *** [/var/lib/dkms/rtl8821CU/5.4.1/build] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.9.16-050916-generic'
Makefile:2215: recipe for target 'modules' failed
make: *** [modules] Error 2
总共7千多行,就只放了开头和结尾。
问题:
对着方面不是很懂,试了2、3天没有头绪,有没有大佬给个答案。
头像
astolia
论坛版主
帖子: 6542
注册时间: 2008-09-18 13:11

Re: Ubuntu16.04编译rtl8811cu的网卡驱动,总是失败

#2

帖子 astolia » 2020-12-31 12:17

gcc版本低了,不认识从5.4内核开始使用的 #define asm_inline asm __inline这种写法。
16.04我记得最初版是4.4内核,最终版是4.15内核,如果没有特别的需要,用旧版内核就可以编译了。
也可以升级gcc,或者自己把文件中的#define asm_inline asm __inline改成#define asm_inline asm凑合一下
ChineseAStar
帖子: 5
注册时间: 2020-12-30 22:34
系统: Ubuntu16.04

Re: Ubuntu16.04编译rtl8811cu的网卡驱动,总是失败

#3

帖子 ChineseAStar » 2020-12-31 14:49

astolia 写了: 2020-12-31 12:17 gcc版本低了,不认识从5.4内核开始使用的 #define asm_inline asm __inline这种写法。
16.04我记得最初版是4.4内核,最终版是4.15内核,如果没有特别的需要,用旧版内核就可以编译了。
也可以升级gcc,或者自己把文件中的#define asm_inline asm __inline改成#define asm_inline asm凑合一下
谢谢,应该是这个原因。我换成ubuntu18.04版本编译就通过了,之前为了方便升级的内核版本呢太高了。
回复