电子工坊

RTL8811CU/RTL8821CU USB网卡驱动安装 树莓派/工控机 Ubuntu18/20

尽管Raspberry Pi 4具有内置的双频WiFi,但是需要放到金属车体上,无法引出天线,所以需要一个网卡,在WIFI网卡中RTL8811cu是一款带5G的无线网卡,这款网卡有些缺点就是驱动需要编译安装,需要折腾(5G的USB网卡基本不免驱)。

本文使用RTL8811CU网卡和树莓派作为示例,基于UBUNTU18.04,内核4.19,其他设备安装方法大同小异。

更新软件包

sudo apt-get update
sudo apt-get upgrade

安装所需的包

安装编译包以及git

sudo apt-get install build-essential -y
sudo apt-get install bc -y
sudo apt install git -y

检查内核文件

apt search linux-headers-(uname -r)
ls -l /usr/src/linux-headers-(uname -r)

如果没有安装内核头文件,则需要安装

树莓派: 
sudo apt install raspberrypi-kernel-headers

其他:
sudo apt-get install linux-headers-$(uname -r)

可选,如需要使用DKMS进行编译和安装,但是博主未使用

sudo apt-get install dkms

注意内核版本

查看内核版本

uname -a

或者

getconf LONG_BIT

如果你的内核是”4.x及以下”或者是”5.x”版本请按照不同步骤执行

克隆编译包 (内核4.x)

mkdir -p ~/drive
cd ~/drive
git clone https://github.com/whitebatman2/rtl8821CU

克隆编译包 (内核5.x)

mkdir -p ~/drive
cd ~/drive
git clone https://github.com/brektrou/rtl8821CU

使用DKMS进行构建和安装(博主未使用)

DKMS是一个系统,当安装或更新新内核时,该系统将自动重新编译并安装内核模块。要使用DKMS,请安装dkms软件包。

博主未使用这种安装方式!

DRV_NAME=rtl8821CU
DRV_VERSION=5.2.5.3
sudo mkdir /usr/src/{DRV_NAME}-{DRV_VERSION}
git archive master | sudo tar -x -C /usr/src/{DRV_NAME}-{DRV_VERSION}
sudo dkms add -m {DRV_NAME} -v{DRV_VERSION}
sudo dkms build -m {DRV_NAME} -v{DRV_VERSION}
sudo dkms install -m {DRV_NAME} -v{DRV_VERSION}

在没有使用DKMS进行构建和安装

首先进入驱动包目录,并且编辑驱动程序配置

cd ~/drive/rtl8821CU
vim Makefile

假如您使用的是Raspberry Pi 4/3 64位,需要配置Makefile的设备类型,原本是:

内核4.x :
CONFIG_PLATFORM_I386_PC = y
CONFIG_PLATFORM_ARM_RPI = n
CONFIG_PLATFORM_ARM_RPI3 = n

内核5.x :
CONFIG_PLATFORM_I386_PC = y
CONFIG_PLATFORM_ARM_RPI = n
CONFIG_PLATFORM_ARM64_RPI = n

变更为

内核4.x :
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ARM_RPI = n
CONFIG_PLATFORM_ARM_RPI3 = y

内核5.x :
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ARM_RPI = n
CONFIG_PLATFORM_ARM64_RPI = y

如果您使用的是Raspberry Pi 4/3 32位,则变更为

内核4.x :
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ARM_RPI = y
CONFIG_PLATFORM_ARM_RPI3 = n

内核5.x :
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ARM_RPI = y
CONFIG_PLATFORM_ARM64_RPI = n


针对5.x内核驱动程序的ARM体系结构调整(解决5.x驱动程序的编译问题)
For AArch32 (例如树莓派32位)

sudo cp /lib/modules/(uname -r)/build/arch/arm/Makefile /lib/modules/(uname -r)/build/arch/arm/Makefile.(date +%Y%m%d%H%M)
sudo sed -i 's/-msoft-float//' /lib/modules/(uname -r)/build/arch/arm/Makefile
sudo ln -s /lib/modules/(uname -r)/build/arch/arm /lib/modules/(uname -r)/build/arch/armv7l

For AArch64 (例如树莓派64位)

sudo cp /lib/modules/(uname -r)/build/arch/arm64/Makefile /lib/modules/(uname -r)/build/arch/arm64/Makefile.(date +%Y%m%d%H%M)
sudo sed -i 's/-mgeneral-regs-only//' /lib/modules/(uname -r)/build/arch/arm64/Makefile

输入以下命令以安装驱动程序,可能需要几分钟:

make

编译完成后执行安装

sudo make install

如果你已成功安装了驱动程序,则可以使用以下命令检查

ls /lib/modules/$(uname -r)/kernel/drivers/net/wireless/8821cu*

如果以后要删除它,请执行以下操作:

sudo make uninstall

网卡使用 (店铺购买网卡不需要切换USB模式)

将USB-WIFI适配器插入设备,如果可以检测到WIFI,那么恭喜。如果没有检测到,也许需要通过以下步骤切换USB模式:
1. 通过以下方式找到您的usb-wifi-adapter设备ID,例如”0bda:1a2b”:

lsusb
  1. 需要先安装usb_modeswitch用于切换USB设备类型,假设设备ID是"0bda:1a2b"
sudo usb_modeswitch -KW -v 0bda -p 1a2b

  1. 使用iw命令查看网卡是否识别到新网卡
iw dev

设置自动启动识别 (店铺购买网卡不需要切换USB模式)

如果插入设备进入u盘或者其他模式,则需要切换为无线网卡模式
1. 编辑usb_modeswitch规则

sudo vim /lib/udev/rules.d/40-usb_modeswitch.rules
  1. 在最后结束行LABEL="modeswitch_rules_end"前面添加以下内容
# Realtek 8211CU Wifi AC USB
ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="usb_modeswitch '/%k'"