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
📌 三、无线网络排查步骤
-
查看是否绑定rtl8821cu
dmesg | grep rtl
dmesg | grep usb -
检查接口是否创建
ip link show查看所有网络接口的底层信息
iw dev查看无线网卡及 Wi-Fi 相关信息
ifconfig -a查看所有接口详细信息 -
查看固件是否缺失
dmesg | grep -i firmware -
临时关闭 SELinux 检测(调试目的)
setenforce 0 -
手动启动wifi接口(如果接口在)
ifconfig wlan0 up
📁 四、附言
参考项目
https://github.com/brektrou/rtl8821CU