RK3399 移植WIFI RTL8822cs

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容