前言
本文主要介绍如何在 Linux 系统里安装 RTL8812AU 无线 USB 网卡驱动,适用于 Debian、Ubuntu 18/19/20、Centos7/8,其中 Linux 的内核版本必须为大于等于 3.10。
检测系统是否正确识别 RTL8812AU 无线网卡
1 2 # lsusb | grep RTL8812AUBus 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
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# make dkms_install# dkms status8812au, 4.2.3, 5.4.0-42-generic, x86_64: installed # echo 8812au | sudo tee -a /etc/modules
若执行 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.hdefine DRIVERVERSION "v4.2.3" # vim MakefileDRIVER_VERSION = 4.2.3
若需要从 DKMS 中卸载网卡驱动,可以执行以下命令:
1 2 3 4 5 # cd rtl8812au# 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# 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 conNAME UUID TYPE DEVICE SBG6900AC fd0097f7-2c89-4a2b-bb8e-a23e5d197ac2 wifi wlp0s20u5
1 2 3 4 5 # nmcli dev wifiIN-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
参考资料