RTL8821CU
简介
接口类型:USB
Wi-Fi + Bluetooth 二合一

📌 一、硬件

📌 二、移植代码

1. 创建源码

https://github.com/brektrou/rtl8821CU 代码克隆到$PROJECT_TOP/kernel/drivers/net/wireless/rockchip_wlan/ 下,文件夹命名为rtl8821cu

2. 修改相关代码

2.1. 修改Makefile

$PROJECT_TOP/kernel/drivers/net/wireless/rockchip_wlan/Makefile

@@ -6,6 +6,7 @@ obj-$(CONFIG_RTL8189FS) += rtl8189fs/
 obj-$(CONFIG_RTL8723CS)        += rtl8723cs/
 obj-$(CONFIG_RTL8723DS)        += rtl8723ds/
 obj-$(CONFIG_RTL8821CS) += rtl8821cs/
+obj-$(CONFIG_RTL8821CU) += rtl8821cu/
 obj-$(CONFIG_RTL8822BS) += rtl8822bs/
 obj-$(CONFIG_MVL88W8977)       += mvl88w8977/
 obj-$(CONFIG_WL_ROCKCHIP)      += rkwifi/rk_wifi_config.o

$PROJECT_TOP/kernel/drivers/net/wireless/rockchip_wlan/rtl8821cu/Makefile

@@ -81,9 +81,9 @@ CONFIG_RTW_DEBUG = y
 # please refer to "How_to_set_driver_debug_log_level.doc" to set the available level.
 CONFIG_RTW_LOG_LEVEL = 3
 ######################## Wake On Lan ##########################
-CONFIG_WOWLAN = n
+CONFIG_WOWLAN = y
 CONFIG_WAKEUP_TYPE = 0x7 #bit2: deauth, bit1: unicast, bit0: magic pkt.
-CONFIG_GPIO_WAKEUP = n
+CONFIG_GPIO_WAKEUP = y
 CONFIG_WAKEUP_GPIO_IDX = default
 CONFIG_HIGH_ACTIVE_DEV2HST = n
 ######### only for USB #########
@@ -96,7 +96,7 @@ CONFIG_RTW_SDIO_PM_KEEP_POWER = y
 ###################### MP HW TX MODE FOR VHT #######################
 CONFIG_MP_VHT_HW_TX_MODE = y
 ###################### Platform Related #######################
-CONFIG_PLATFORM_I386_PC = y
+CONFIG_PLATFORM_I386_PC = n
 CONFIG_PLATFORM_ARM_RPI = n
 CONFIG_PLATFORM_ARM64_RPI = n
 CONFIG_PLATFORM_ANDROID_X86 = n
@@ -123,7 +123,7 @@ CONFIG_PLATFORM_ARM_TCC8920_JB42 = n
 CONFIG_PLATFORM_ARM_TCC8930_JB42 = n
 CONFIG_PLATFORM_ARM_RK2818 = n
 CONFIG_PLATFORM_ARM_RK3066 = n
-CONFIG_PLATFORM_ARM_RK3188 = n
+CONFIG_PLATFORM_ARM_RK3188 = y
 CONFIG_PLATFORM_ARM_URBETTER = n
 CONFIG_PLATFORM_ARM_TI_PANDA = n
 CONFIG_PLATFORM_MIPS_JZ4760 = n
@@ -989,7 +989,7 @@ EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/system/etc/wifi/wifi_efuse_8189e.map\"
 else ifeq ($(MODULE_NAME), 8723bs)
 EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/system/etc/wifi/wifi_efuse_8723bs.map\"
 else
-EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/system/etc/wifi/wifi_efuse_$(MODULE_NAME).map\"
+EXTRA_CFLAGS += -DEFUSE_MAP_PATH=\"/vendor/etc/firmware/wifi_efuse_$(MODULE_NAME).map\"
 endif
 
 #WIFIMAC_PATH
@@ -1578,14 +1578,15 @@ EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFO
 # default setting for Android 4.1, 4.2, 4.3, 4.4
 EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
 EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_RESUME_IN_WORKQUEUE
 # default setting for Power control
-EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
+# EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
 EXTRA_CFLAGS += -DRTW_SUPPORT_PLATFORM_SHUTDOWN
 # default setting for Special function
 ARCH := arm
 CROSS_COMPILE := /home/android_sdk/Rockchip/Rk3188/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/
arm-eabi-
 KSRC := /home/android_sdk/Rockchip/Rk3188/kernel
-MODULE_NAME := wlan
+MODULE_NAME := 8821cu
 endif
 
 ifeq ($(CONFIG_PLATFORM_ARM_RK3066), y)

2.2. 修改Kconfig

$PROJECT_TOP/kernel/drivers/net/wireless/rockchip_wlan/Kconfig

@@ -47,6 +47,7 @@ source "drivers/net/wireless/rockchip_wlan/rtl8189fs/Kconfig"
 source "drivers/net/wireless/rockchip_wlan/rtl8723cs/Kconfig"
 source "drivers/net/wireless/rockchip_wlan/rtl8723ds/Kconfig"
 source "drivers/net/wireless/rockchip_wlan/rtl8821cs/Kconfig"
+source "drivers/net/wireless/rockchip_wlan/rtl8821cu/Kconfig"
 source "drivers/net/wireless/rockchip_wlan/rtl8822bs/Kconfig"
 endif

2.3. 新增驱动定义

$PROJECT_TOP/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp

@@ -47,6 +47,7 @@ extern "C" int delete_module(const char *, unsigned int);
 #define RTL8812AU_DRIVER_MODULE_PATH    WIFI_MODULE_PATH"8812au.ko"
 #define RTL8822BE_DRIVER_MODULE_PATH    WIFI_MODULE_PATH"8822be.ko"
 #define RTL8821CS_DRIVER_MODULE_PATH     WIFI_MODULE_PATH"8821cs.ko"
+#define RTL8821CU_DRIVER_MODULE_PATH     WIFI_MODULE_PATH"8821cu.ko"
 #define RTL8822CU_DRIVER_MODULE_PATH     WIFI_MODULE_PATH"8822cu.ko"
 #define RTL8822CS_DRIVER_MODULE_PATH     WIFI_MODULE_PATH"8822cs.ko"
 #define SSV6051_DRIVER_MODULE_PATH      WIFI_MODULE_PATH"ssv6051.ko"
@@ -73,6 +74,7 @@ extern "C" int delete_module(const char *, unsigned int);
 #define RTL8812AU_DRIVER_MODULE_NAME    "8812au"
 #define RTL8822BE_DRIVER_MODULE_NAME    "8822be"
 #define RTL8821CS_DRIVER_MODULE_NAME    "8821cs"
+#define RTL8821CU_DRIVER_MODULE_NAME     "8821cu"
 #define RTL8822CU_DRIVER_MODULE_NAME     "8822cu"
 #define RTL8822CS_DRIVER_MODULE_NAME     "8822cs"
 #define SSV6051_DRIVER_MODULE_NAME      "ssv6051"
@@ -152,6 +154,7 @@ wifi_ko_file_name module_list[] =
        {"RTL8822BE", RTL8822BE_DRIVER_MODULE_NAME, RTL8822BE_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        {"RTL8821CS", RTL8821CS_DRIVER_MODULE_NAME, RTL8821CS_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        {"RTL8822CU", RTL8822CU_DRIVER_MODULE_NAME, RTL8822CU_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
+       {"RTL8821CU", RTL8821CU_DRIVER_MODULE_NAME, RTL8821CU_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
         {"RTL8822CS", RTL8822CS_DRIVER_MODULE_NAME, RTL8822CS_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        {"SSV6051",     SSV6051_DRIVER_MODULE_NAME,   SSV6051_DRIVER_MODULE_PATH, SSV6051_DRIVER_MODULE_ARG},
        {"ESP8089",     ESP8089_DRIVER_MODULE_NAME,   ESP8089_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},

2.4. 添加设备ID

$PROJECT_TOP/frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp

@@ -61,6 +61,7 @@ static wifi_device supported_wifi_devices[] = {
        {"RTL8192DU",   "0bda:8194"},
        {"RTL8812AU",   "0bda:8812"},
        {"RTL8821CS",   "024c:c821"},
+       {"RTL8821CU",   "0bda:c820"},  
         {"RTL8822CU",   "0bda:c82c"},
        {"RTL8822CS",   "024c:c822"},
        {"SSV6051",     "3030:3030"},

2.5. 打开内核配置参数

$PROJECT_TOP/kernel/configs/rockchip/android-11.config

@@ -267,4 +267,5 @@ CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
 CONFIG_DM_DEFAULT_KEY=y
 CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
 CONFIG_DRM_ICN_6211=y
-CONFIG_REALTEK_PHY=y
\ No newline at end of file
+CONFIG_REALTEK_PHY=y
+CONFIG_RTL8821CU=y

📌 三、无线网络排查步骤

  1. 查看是否绑定rtl8821cu
    dmesg | grep rtl
    dmesg | grep usb

  2. 检查接口是否创建
    ip link show查看所有网络接口的底层信息
    iw dev查看无线网卡及 Wi-Fi 相关信息
    ifconfig -a 查看所有接口详细信息

  3. 查看固件是否缺失
    dmesg | grep -i firmware

  4. 临时关闭 SELinux 检测(调试目的)
    setenforce 0

  5. 手动启动wifi接口(如果接口在)
    ifconfig wlan0 up

📁 四、附言

参考项目

https://github.com/brektrou/rtl8821CU

参考文章

RK3568-B2-ANDROID11-WIFI-RTL8821CU_rk平台rtl8821cu调试-CSDN博客