Linux 安装 RTL8812AU 无线 USB 网卡驱动

前言

本文主要介绍如何在 Linux 系统里安装 RTL8812AU 无线 USB 网卡驱动,适用于 Debian、Ubuntu 18/19/20、Centos7/8,其中 Linux 的内核版本必须为大于等于 3.10。

检测系统是否正确识别 RTL8812AU 无线网卡

1
2
# lsusb | grep RTL8812AU
Bus 003 Device 008: ID 0bda:8812 Realtek Semiconductor Corp. RTL8812AU 802.11a/b/g/n/ac 2T2R DB WLAN Adapter

Ubuntu 18/19/20 手动安装 RTL8812AU 无线网卡驱动

1
2
# 系统环境
Linux Ubuntu-20 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 安装工具软件
# apt-get install -y git make

# 克隆源码
# git clone https://github.com/gnab/rtl8812au.git

# 进入源码目录
# cd rtl8812au

# 编译驱动
# make

# 安装驱动
# cp 8812au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless

# 更新模块依赖
# depmod

# 提示:执行完以上步骤后,正常情况下就可以在系统的设置面板里看到 RTL8812AU 无线 USB 网卡搜索到的 WiFi 列表;如果网卡驱动安装后不生效,可以尝试重启系统。

Ubuntu 18/19/20 通过 DKMS 安装 RTL8812AU 无线网卡驱动

当手动安装 RTL8812AU 无线网卡驱动后,如果 Linux 系统的内核版本升级了,那么 RTL8812AU 驱动就会失效,导致需要重新安装驱动才能正常使用无线网卡。为了解决 Linux 系统内核版本升级带来的问题,可以 通过 DKMS 自动重建并安装网卡驱动到新的内核中。值得注意的是,若通过 DKMS 安装网卡驱动,则无需再使用上面的方法手动安装网卡驱动了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装工具软件
# apt-get install -y git make build-essential dkms

# 克隆源码
# git clone https://github.com/gnab/rtl8812au.git

# 进入源码目录
# cd rtl8812au

# 将网卡驱动安装到DKMS(若命令执行出错,请看本文后面给出的解决办法)
# make dkms_install

# 查看DKMS是否正确安装网卡驱动
# dkms status
8812au, 4.2.3, 5.4.0-42-generic, x86_64: installed

# 配置系统引导时自动加载网卡驱动
# echo 8812au | sudo tee -a /etc/modules

# 提示:执行完以上步骤后,正常情况下就可以在系统的设置面板里看到 RTL8812AU 无线 USB 网卡搜索到的 WiFi 列表;如果网卡驱动安装后不生效,可以尝试重启系统。

若执行 make dkms_install 命令出现错误 Makefile:1085: *** unterminated call to function 'shell': missing ')'. Stop,此时可以更改 Makefile 的文件内容后,再次执行 make dkms_install 等命令。

1
2
3
4
5
6
7
8
9
10
11
12
# 进入源码目录
# cd rtl8812au

# 查看网卡驱动的版本号
# cat include/rtw_version.h
define DRIVERVERSION "v4.2.3"

# 编辑Makefile文件,手动指定网卡驱动的具体版本号
# vim Makefile
DRIVER_VERSION = 4.2.3

# 提示:即找到Makefile文件中的 DRIVER_VERSION = $(shell grep "#define DRIVERVERSION" include/rtw_version.h | awk '{print $$3}' | tr -d v\"),并将其修改为 DRIVER_VERSION = 4.2.3

若需要从 DKMS 中卸载网卡驱动,可以执行以下命令:

1
2
3
4
5
# 进入源码目录
# cd rtl8812au

# 通过DKMS卸载网卡驱动
# make dkms_remove

Centos 7/8 YUM 安装 RTL8812AU 无线网卡驱动

由于亲测在 Centos7 系统环境下,通过上述的方法(手动 + DKMS)安装 RTL8812AU 无线网卡的驱动后,无法使无线网卡正常工作,因此可以通过 YUM 包来安装对应的网卡驱动。

1
2
# 系统环境
Linux Centos-7 3.10.0-1160.6.1.el7.x86_64 #1 SMP Tue Nov 17 13:59:11 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
1
2
3
4
5
6
7
# 安装网卡驱动
# yum install kmod-rtl8812au

# 查看网卡驱动是否安装成功(正常情况下,需要将无线USB网卡插到电脑上才会显示具体的驱动信息)
# lsmod| grep "XX"
88XXau 2189305 0
cfg80211 710816 1 88XXau

可以使用以下常用的命令来判断 RTL8812AU 无线网卡是否正常工作,当然也可以在系统的设置面板里查看无线网卡的工作状态:

1
2
3
4
5
6
7
8
9
10
11
# ifconfig
wlp0s20u5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.117 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::bbf5:446d:e3ec:90fd prefixlen 64 scopeid 0x20
inet6 2606:a000:810c:9300:9c04:74bc:9909:73d prefixlen 64 scopeid 0x0
inet6 2606:a000:810c:9300::6 prefixlen 128 scopeid 0x0
ether c4:41:1e:5d:7f:98 txqueuelen 1000 (Ethernet)
RX packets 1480 bytes 999935 (976.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1724 bytes 484480 (473.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1
2
3
4
5
6
7
8
9
10
# iwconfig
wlp0s20u5 IEEE 802.11AC ESSID:"SBG6900AC" Nickname:"WIFI@REALTEK"
Mode:Managed Frequency:5.745 GHz Access Point: 5C:E3:0E:96:D7:A0
Bit Rate:174 Mb/s Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off
Encryption key:------- Security mode:open
Power Management:off
Link Quality=83/100 Signal level=36/100 Noise level=0/100
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
1
2
3
# nmcli con
NAME UUID TYPE DEVICE
SBG6900AC fd0097f7-2c89-4a2b-bb8e-a23e5d197ac2 wifi wlp0s20u5
1
2
3
4
5
# nmcli dev wifi
IN-USE SSID MODE CHAN RATE SIGNAL BARS SECURITY
TP-LINK_3BC402 Infra 6 270 Mbit/s 47 ▂▄__ --
Tenda_F73CF8 Infra 11 130 Mbit/s 37 ▂▄__ WPA1 WPA2
Tenda_58D840 Infra 10 130 Mbit/s 14 ▂___ WPA1 WPA2

参考资料