1.背景介绍
- Platform: Rockchip 3399
- OS: linux
- kernel: 4.19
- WIFI/BT模组: RTL8822CS
2.说明
具体的资料包由 WIFI模块厂商提供。
驱动:RTL8822CS_WiFi_linux_v5.12.1.1-0-gf673ce3_COEX20200922-1e1e.20210125.rar
3.编译内核和驱动
- 将厂商提供的驱动目录拷贝到 /kernel/drivers/net/wireless/rockchip_wlan/目录下,并重命名为rtl8822cs。
- 修改当前目录下的Makefile文件
增加 obj-$(CONFIG_RTL8822CS) += rtl8822cs/ - 修改当前目录下的Kconfig文件
增加source "drivers/net/wireless/rockchip_wlan/rtl8822cs/Kconfig" - 修改rtl8822cs/Kconfig
+++ b/kernel_4.19/drivers/net/wireless/rockchip_wlan/rtl8822cs/Kconfig
@@ -1,4 +1,4 @@
-config RTL8822BS
+config RTL8822CS
- 修改rtl8822cs/Makefile:
CONFIG_PLATFORM_I386_PC=n
CONFIG_PLATFORM_ARM_RK3399= y
ifeq ($(CONFIG_PLATFORM_ARM_RK3399), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_ROCKCHIPS
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
ifeq ($(CONFIG_SDIO_HCI), y)
EXTRA_CFLAGS += -DRTW_SUPPORT_PLATFORM_SHUTDOWN
endif
# 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 := 8822cs
endif
- dts中修改wifi_chip_type
wireless-wlan {
compatible = "wlan-platdata";
rockchip,grf = <&grf>;
- wifi_chip_type = "ap6398s";
+ wifi_chip_type = "rtl8822cs";
sdio_vref = <1800>;
pinctrl-0 = <&wlan_pen>;
- 然后编译驱动到内核,将生成的boot.img烧录到板子上
4.SDIO初始化异常问题
使用Rtl8822cs支持3.0模块时,初始化不过,异常log如下:
[ 1.951085] mmc0: error -5 whilst initialising SDIO card
解决方法:打上以下补丁:
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index 2046eff..6626752 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -646,7 +646,7 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
* try to init uhs card. sdio_read_cccr will take over this task
* to make sure which speed mode should work.
*/
- if (!powered_resume && (rocr & ocr & R4_18V_PRESENT)) {
+ /*if (!powered_resume && (rocr & ocr & R4_18V_PRESENT)) {
err = mmc_set_uhs_voltage(host, ocr_card);
if (err == -EAGAIN) {
mmc_sdio_resend_if_cond(host, card);
@@ -655,7 +655,10 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32
ocr, } else if (err) {
ocr &= ~R4_18V_PRESENT;
}
- }
+ }*/
+
+ ocr &= R4_18V_PRESENT;
/*
* For native busses: set card RCA and quit open drain mode
5. 拿掉p2p0 接口
-
按照上述配置后会出现p2p0 和 wlan02个接口。
image.png - 修改rtl8822cs/Makefile 如下:
CONFIG_AP_MODE = n
CONFIG_P2P = n
-EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE //delete this config
+++ b/kernel_4.19/drivers/net/wireless/rockchip_wlan/rtl8822cs/hal/hal_intf.c
@@ -899,7 +899,7 @@ s32 rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe)
#ifdef CONFIG_RTW_MGMT_QUEUE
if (MLME_IS_AP(padapter) || MLME_IS_MESH(padapter)) {
_enter_critical_bh(&pxmitpriv->lock, &irqL);
- ret = mgmt_xmitframe_enqueue_for_sleeping_sta(padapter, pmgntframe);
+ //ret = mgmt_xmitframe_enqueue_for_sleeping_sta(padapter, pmgntframe);
修改后重新编译,烧录到板子上结果如图:

image.jpeg
参考文档如下:
Rockchip_Developer_Guide_Linux_WIFI_BT_CN.pdf
Quick_Start_Guide_for_Station_Mode.pdf
Quick_Start_Guide_for_SoftAP.pdf
