鉴于笔记本网卡老化严重,信号太差,于是最近在京东上买了一个睿因(Wavlink)的 USB 无线网卡,WL-WN688A2 1200M 双频5g千兆 USB3.0 无线网卡,看官网上对这款产品的介绍,感觉还蛮高级的玩意,所以顺便学习了点无线网卡的知识,然后在自己的 Ubuntu 下成功安装其驱动并开始使用起来了。在此记录下。

wavlink.jpg

一、无线网卡基础知识

1.1 什么是 5G WiFi?

WiFi 技术从诞生到现在已经经历了五代的升级:从 a -> b -> g -> n 到 ac,第五代 WiFi 技术 IEEE 802.11ac 由于工作频率是 5GHz,所以叫做 5G WiFi 。如下图所示:

wifi-tech.png

相应的,目前最流行的是第四代,工作频率在 2.4GHz,所以叫做 2.4G WiFi。不过要注意的是,并不是工作频率在 5GHz 就是这里说的 5G WiFi,从上图中可以看到,第一代和第四代 WiFi 技术也有用到 5GHz 的频率,严格来说,这两种都不算 5G WiFi,只有第五代 802.11ac 才算是 5G WiFi。有些厂商经常吹嘘自己的网卡是 5G 网卡,实际上只是第四代的 802.11n,和第五代的区别还是很大的。百度上可以搜到 2.4G 和 5G WiFi 的区别

1.2 什么是双频?

这款无线网卡号称 AC1200 双频无线网卡,AC 好理解,上面解释了第五代 WiFi 技术就是 IEEE 802.11ac,1200 自然是指 1200Mbps 的传输速度。那双频是什么意思呢?

从上面的内容中我们可以看出 2.4G 和 5G 的很多区别,其实,对于用户感知来说,最重要区别只有两个:传输速率和距离。2.4G 传输速度比 5G 慢,但是传输距离远,穿墙能力强。而 5G 的最大优势则是近距离传输速度很快,适合看电影玩游戏。如下图(图片来自 Wavlin 广告)。

dual-hz.png

所谓双频,就是集 2.4G 和 5G 于一身,一张网卡,两个频段,既可以满足长距离传输的要求(2.4G),也可以满足传输速度的要求(5G)。其实这里厂商耍了一个滑头,它所宣称的 1200Mbps 传输速度,是双频合在一起的速度,2.4G 的速度是 300Mbps,5G 的速度是 867Mbps,加起来 1167Mbps,比 1200 还少了 33 呢。

另外,广告里宣称网卡还使用了 MIMO 架构CCA 空闲信道检测技术 来充分提升网卡的无线性能和稳定性,听起来还挺牛逼的,这些东西有时间再研究研究。

1.3 什么是 USB3.0 ?

和 WiFi 技术一样,USB 技术也经过二十年的发展,经历了三代,从 1996 年提出 USB1.0 规范开始,当时的传输速度只有 1.5Mbps,然后升级到 USB1.1,速度 12Mbps,到后来演变到 USB2.0,速度也升至 480Mbps,再到最新的 USB3.0 理论速度直接达到了 5Gbps,最新一代的 USB3.1 甚至达到了 10Gbps。

延伸:如何区分 USB2.0 和 USB3.0 插口

二、安装网卡驱动

做完功课之后,就开始无线网卡之旅了。无论是有线网卡还是无线网卡,大多数情况下,在使用之前都必须得安装好网卡驱动,随着 Wavlink 包装的有一个光盘,附带有网卡驱动,但是却是 Windows 系统的。所以在使用这个无线网卡之前,还得学习下如何在 Linux 系统下安装网卡驱动。

其实,无线网卡驱动的安装相当简单,可以分成下面两个步骤:

2.1 确定无线网卡的芯片类型

在安装驱动之前,我们首先需要确定无线网卡的芯片类型,这里有两个概念很容易混淆,品牌名和芯片名。有些人可能会说,我的无线网卡是 TP-LINK 的,要在哪里下载 TP-LINK 的网卡驱动呢?这个问题其实很难回答,在确定你的芯片类型之前,具体要安装什么样的驱动也是不能确定的。一般来说,买无线网卡的时候,产品说明书上会告诉你网卡的芯片信息,是 Atheros,还是 Realtek,还是 Broadcom 或者其他的什么芯片。

譬如,我买的这款无线网卡,产品文档上明确的写了:瑞昱 RTL8812AU 芯片,兼容主流操作系统。很显然芯片类型是 Realtek 的。

如果没有其他手段来得到网卡的芯片类型信息,可以使用 lsusb 命令来查看:

$ lsusb
Bus 002 Device 004: ID 04f2:b044 Chicony Electronics Co., Ltd Acer CrystalEye Webcam
Bus 002 Device 003: ID 0bda:8812 Realtek Semiconductor Corp. RTL8812AU 802.11a/b/g/n/ac WLAN Adapter
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

从第二行网卡的名称:RTL8812AU 802.11a/b/g/n/ac WLAN Adapter 中也能看出网卡是 RTL8812AU 芯片。

有时候很郁闷的是 lsusb 也看不到自己的网卡,这个时候也不知道是 usb 接口有问题,还是自己的网卡有问题,反正系统没有一点反应。如果出现这种情况,有一个小技巧可以使用,就是查看 /var/log/syslog 这个日志文件。先将 usb 无线网卡拔下,然后在终端中输入下面的命令:

$ sudo tail -f /var/log/syslog

然后再将网卡插入 usb 接口,这时如果不出意外,会出现大量的日志,像下面这样:

Jun 19 22:05:52 l-s kernel: [ 2836.763872] usb 2-1.2: new high-speed USB device number 5 using ehci-pci
Jun 19 22:05:53 l-s kernel: [ 2836.856752] usb 2-1.2: New USB device found, idVendor=0bda, idProduct=8812
Jun 19 22:05:53 l-s kernel: [ 2836.856758] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jun 19 22:05:53 l-s kernel: [ 2836.856762] usb 2-1.2: Product: 802.11n NIC
Jun 19 22:05:53 l-s kernel: [ 2836.856765] usb 2-1.2: Manufacturer: Realtek
Jun 19 22:05:53 l-s kernel: [ 2836.856768] usb 2-1.2: SerialNumber: 123456

如果出现日志,则说明网卡和 usb 接口都没有问题;如果没有出现任何日志,则说明网卡或 usb 接口坏了,可以换一个 usb 接口试试;如果出现一些报错信息,则 Google 之,在安装驱动之前,先将这些错误解决掉。

2.2 下载并安装驱动程序

无线网卡的官网,基本上都会提供驱动程序的下载,学会使用 Google 搜索。譬如我买的这款网卡产品名称是:睿因 WL-WN688A2,通过官网可以搜到该产品的很多文档:Download Drives And Manual ,其中就包括了 RTL8812AU 的驱动程序。

另外,我们已经知道了网卡的芯片类型是 Realtek ,也可以去 Realtek 的官网搜搜看。

但是不幸的是,官网提供的驱动程序,只支持到 Linux 内核版本 3.10,而我的 Ubuntu 16.04 内核版本是 4.4 ,自然编译都通不过。好在开源的世界里,从不缺少勇士,早就已经有人对官网的驱动程序进行改写了,使其支持最新的 Linux 系统。最后我选中了 github 上 gnab 的代码:Realtek 802.11n WLAN Adapter Linux driver

$ git clone https://github.com/gnab/rtl8812au.git
$ ./install.sh

代码中自带了安装脚本,使用 ./install.sh 即可安装。

2.3 附安装脚本

驱动程序的安装脚本挺简单的,贴上来学习一下。

#!/bin/bash

if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

make &&
cp 8812au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless &&
depmod &&
echo "
                       ***Success***
***Module will be activated automatically at next reboot***
" &&

while true; do
    read -p "Do you wish to activate the module now? (y/n)" yn
    case $yn in
        [Yy]* ) insmod 8812au.ko && echo "***Module activated***" && break;;
        [Nn]* ) exit;;
        * ) echo "Please answer yes or no.";;
    esac
done

首先使用 make 命令编译源码,生成驱动文件 8812au.ko 。
然后将其复制到 /lib/modules/$(uname -r)/kernel/drivers/net/wireless 目录下,并运行 depmod 命令,这一步可以使驱动在开机时自动加载。depmod 命令的用处是创建模块依赖关系的列表,生成一个 modules.dep 文件,系统启动时,modprobe 会根据该文件自动加载驱动以及驱动的依赖关系。

最后脚本提示用户是否立即启用,如果输入 yes 则执行 insmod 8812au.ko 命令,insmodmodprobe 命令一样,用来立即安装驱动。如果不出意外,无线网卡的指示灯就开始闪烁起来了。

可以通过 lsmod 命令确定驱动是否已经成功安装:

$ lsmod | grep 88
8812au                991232  0

要卸载驱动,使用 rmmod 命令。

扫描二维码,在手机上阅读!