RTL8812AU+RTL8811AU 2.4Ghz/5Ghz WiFi
The below RTL8811 USB WiFi adapter provides both 2.4Ghz and 5GHz support, this device is available from multiple vendors and can even be assembled onto a mPCIe to USB adapter. The RTL8811 chipset uses the same driver support for the RTL8812 device which there is an easy to use driver installation method.
Here's the procedure we used to configure the WiFi card, this process was fairly straight-forward thanks to a open source git-hub page maintaining support for the chipset.
root@raspberrypi:~# apt-get update root@raspberrypi:~# apt-get install raspberrypi-kernel-headers build-essential libncurses5-dev bc python git root@raspberrypi:~# wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source root@raspberrypi:~# chmod +x rpi-source root@raspberrypi:~# ./rpi-source
That last step may argue a few times you haven't installed something, if so run the prompted command to install the missing component and re-run rpi-source. When that's finished complete do :
root@raspberrypi:~# git clone https://github.com/gnab/rtl8812au.git root@raspberrypi:~# cd rtl8812au/
We need to change the target platform from x86 to RPi so edit the make file and make 2 changes on lines 53 and 59 :
root@raspberrypi:~/rtl8812au# vim Makefile
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ARM_RPI = y
Then we can kick off the installer that will compile and install the kernel module for the WiFi card :
root@raspberrypi:~/rtl8812au# chmod +x install.sh root@raspberrypi:~/rtl8812au# ./install.sh
After this is done you can activate module live and check it's loaded AOK :
root@raspberrypi:~/rtl8812au# dmesg | tail -10 [ 9.285294] . [ 9.288177] sd 0:0:0:0: [sda] Attached SCSI removable disk [ 1807.734429] 8812au: loading out-of-tree module taints kernel. [ 1807.909864] usbcore: registered new interface driver rtl8812au [ 1808.764543] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 1808.767782] RTL871X: indicate disassoc [ 1808.769839] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 1808.770117] RTL871X: set bssid:00:00:00:00:00:00 [ 1808.770931] RTL871X: set ssid [gxffffffc6isQxffffffffJxffffffec)ͺxffffffabxfffffff2xfffffffbxffffffe3F|xffffffc2Txfffffff8xffffffe8xffffffe7xffffff8dvZ.c3xffffff9fɚxffffff8b] fw_state=0x00000008 [ 1814.973488] RTL871X: nolinked power save enter
Next let's find the local 5Ghz network :
root@raspberrypi:~# iwlist wlan0 scanning wlan0 Scan completed : Cell 05 - Address: 60:38:E0:D8:C5:DA ESSID:"dd-wrt" Protocol:IEEE 802.11bgn Mode:Master Frequency:2.437 GHz (Channel 6) Encryption key:on Bit Rates:144 Mb/s Extra:rsn_ie=30140100000fac040100000fac040100000fac020c00 IE: IEEE 802.11i/WPA2 Version 1 Group Cipher : CCMP Pairwise Ciphers (1) : CCMP Authentication Suites (1) : PSK Quality=0/100 Signal level=93/100 Cell 06 - Address: 1C:BD:B9:BE:6B:EC ESSID:"dd-wrt" Protocol:IEEE 802.11bgn Mode:Master Frequency:2.437 GHz (Channel 6) Encryption key:on Bit Rates:72 Mb/s Extra:rsn_ie=30140100000fac040100000fac040100000fac020000 IE: IEEE 802.11i/WPA2 Version 1 Group Cipher : CCMP Pairwise Ciphers (1) : CCMP Authentication Suites (1) : PSK Quality=0/100 Signal level=57/100 Cell 12 - Address: 60:38:E0:D8:C5:D9 ESSID:"dd-wrtAC" Protocol:IEEE 802.11AC Mode:Master Frequency:5.24 GHz (Channel 48) Encryption key:on Bit Rates:780 Mb/s Extra:rsn_ie=30140100000fac040100000fac040100000fac020c00 IE: IEEE 802.11i/WPA2 Version 1 Group Cipher : CCMP Pairwise Ciphers (1) : CCMP Authentication Suites (1) : PSK Quality=0/100 Signal level=75/100
Enter the target network ESSID (and password when prompted) to generate the wpa authentication details for connecting :
root@raspberrypi:~# wpa_passphrase dd-wrtAC network={ ssid="dd-wrtAC" #psk="xxxxxxxx" psk=4265dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }
Then add these generated details to the file below
root@raspberrypi:~# cat /etc/wpa_supplicant/wpa_supplicant.conf ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="dd-wrtAC" #psk="xxxxxxxx" psk=4265dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }
Next we'll restart the wlan interface :
root@raspberrypi:~# ifdown wlan0 root@raspberrypi:~# ifup wlan0
You may get an error message when doing that :
ioctl[SIOCSIWAP]: Operation not permitted ioctl[SIOCSIWENCODEEXT]: Invalid argument ioctl[SIOCSIWENCODEEXT]: Invalid argument
This just appears to be a debug message or some sort and can be ignored. We should now be attached to the local 5Ghz network :
root@raspberrypi:~# iwconfig lo no wireless extensions. wlan0 IEEE 802.11AC ESSID:"dd-wrtAC" Nickname:"" Mode:Managed Frequency:5.24 GHz Access Point: 60:38:E0:D8:C5:D9 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=100/100 Signal level=80/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 eth0 no wireless extensions. root@raspberrypi:~/rtl8812au# ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr cc:95:d7:4c:d1:de inet addr:192.168.1.148 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::6a9a:209:fc1b:f023/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:119 errors:0 dropped:4 overruns:0 frame:0 TX packets:41 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:16567 (16.1 KiB) TX bytes:8927 (8.7 KiB)
After disconnecting the Ethernet we can test the wlan card is able to ping out to a website AOK:
root@raspberrypi:~# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default DD-WRT 0.0.0.0 UG 303 0 0 wlan0 192.168.1.0 * 255.255.255.0 U 303 0 0 wlan0 root@raspberrypi:~# ping www.google.com PING www.google.com (216.58.211.164) 56(84) bytes of data. 64 bytes from dub08s01-in-f164.1e100.net (216.58.211.164): icmp_seq=1 ttl=56 time=36.9 ms 64 bytes from dub08s01-in-f164.1e100.net (216.58.211.164): icmp_seq=2 ttl=56 time=37.0 ms 64 bytes from dub08s01-in-f164.1e100.net (216.58.211.164): icmp_seq=3 ttl=56 time=36.5 ms 64 bytes from dub08s01-in-f164.1e100.net (216.58.211.164): icmp_seq=4 ttl=56 time=35.8 ms 64 bytes from dub08s01-in-f164.1e100.net (216.58.211.164): icmp_seq=5 ttl=56 time=35.6 ms 64 bytes from dub08s01-in-f164.1e100.net (216.58.211.164): icmp_seq=6 ttl=56 time=35.8 ms ^C --- www.google.com ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5007ms rtt min/avg/max/mdev = 35.624/36.314/37.016/0.570 ms
We suspect that once the module (8812au.ko) has been built just this file can be copied over to the second unit (assuming that is running the same kernel version) ala the line in install.sh :
cp 8812au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless
We haven't gone as far as to test out DKMS as per the github page ( https://github.com/gnab/rtl8812au/ ) but expect that would also work.