[RK3399] 添加调试RTL8822cs驱动

1 篇文章 0 订阅
1 篇文章 0 订阅

RK3399添加8822cs模块驱动

WIFI调试:
1.修改WIFI配置的dts:  rk3399-xxxx.dtsi

    wireless-wlan {
        compatible = "wlan-platdata";
        rockchip,grf = <&grf>;
        wifi_chip_type = "rtl8822cs";
        sdio_vref = <1800>;
        WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>; /* GPIO0_a3 */
        status = "okay";
    };
    
    
2.添加驱动
    将供应商提供的驱动放在目录:kernel\drivers\net\wireless\rockchip_wlan\
    修改当前目录下makefile:
    obj-$(CONFIG_RTL8822CS)    += rtl8822cs/
    
    修改kconfig:
    source "drivers/net/wireless/rockchip_wlan/rtl8822cs/Kconfig"
    
    修改rtl8822cs/makefile:
    CONFIG_PLATFORM_I386_PC=n
    CONFIG_PLATFORM_ARM_RK3188=y
    
    make ARCH=arm64 menuconfig 添加勾选
       Device Drivers  --->  
       [*] Network device support  --->  
        [*]   Wireless LAN  --->    
        [*]   Rockchip Wireless LAN support  --->  
        <M>   Realtek 8822C SDIO WiFi  
        
3.添加芯片类型枚举:
    kernel/net/rfkill/rfkill-wlan.c
    在int get_wifi_chip_type(void)添加

    } else if (strcmp(wifi_chip_type_string, "rtl8822cs") == 0) {
        type = WIFI_RTL8822CS;

    kernel/include/linux/rfkill-wlan.h
    添加芯片枚举:
    enum {
    WIFI_RK901,
    WIFI_RK903,
    WIFI_AP6181,
    WIFI_AP6210,
    WIFI_AP6XXX_SERIES,
    WIFI_RTL8188EU,
    WIFI_RTL8192DU,
    WIFI_RTL8723AS,
    WIFI_RTL8723BS,
    WIFI_RTL8822CS,
    WIFI_RTL8812AU,
    WIFI_RTL8822CS,
    WIFI_RTL_SERIES,
    WIFI_ESP8089,
    TYPE_MAX,
    };
    
4.    然后编译内核 编译出8822cs.ko


5.上层VID PID加进去,命令查看后调整正确。
cat /sys/bus/sdio/devices/mmc2:0001:1/uevent
DRIVER=rtl88x2cs
SDIO_CLASS=07
SDIO_ID=024C:C822
MODALIAS=sdio:c07v024CdC822
    这一步如果devices目录下没有节点 可以检查下硬件。

添加:    \hardware\libhardware_legacy\wifi\rk_wifi_ctrl.c
static wifi_device supported_wifi_devices[] = {

 +   {"RTL8822CS",   "024c:c822"},
    {"RTL8188FU",    "0bda:f179"},
    {"RTL8822BU",    "0bda:b82c"},
    {"RTL8189ES",    "024c:8179"},
    
    
          ALOGD("PCIE WIFI identify sucess");
     else {
            ALOGD("maybe there is no usb wifi or sdio or pcie wifi,set default wifi module Brocom APXXX");
-           strcpy(recoginze_wifi_chip, "APXXX");
+           strcpy(recoginze_wifi_chip, "RTL8822CS");
            identify_sucess = 1 ;
                }
        }


diff --git a/wifi/wifi.c b/wifi/wifi.c
index 04da01c..73d0f5d 100755
--- a/wifi/wifi.c
+++ b/wifi/wifi.c
@@ -95,6 +95,7 @@ extern int ifc_down(const char *name);
 #define RTL8192DU_DRIVER_MODULE_PATH "/system/lib/modules/8192du.ko" 
 #define RTL8812AU_DRIVER_MODULE_PATH "/system/lib/modules/8812au.ko" 
 #define RTL8822BE_DRIVER_MODULE_PATH "/system/lib/modules/8822be.ko" 
+#define RTL8822CS_DRIVER_MODULE_PATH "/system/lib/modules/8822cs.ko" 
 #define SSV6051_DRIVER_MODULE_PATH   "/system/lib/modules/ssv6051.ko" 
 #define ESP8089_DRIVER_MODULE_PATH   "/system/lib/modules/esp8089.ko" 
 #define BCM_DRIVER_MODULE_PATH       "/system/lib/modules/bcmdhd.ko" 
@@ -112,6 +113,7 @@ extern int ifc_down(const char *name);
 #define RTL8189FS_DRIVER_MODULE_NAME "8189fs" 
 #define RTL8192DU_DRIVER_MODULE_NAME "8192du" 
 #define RTL8812AU_DRIVER_MODULE_NAME "8812au" 
+#define RTL8812AU_DRIVER_MODULE_NAME "8822cs" 
 #define SSV6051_DRIVER_MODULE_NAME      "ssv6051" 
 #define ESP8089_DRIVER_MODULE_NAME      "esp8089" 
 #define BCM_DRIVER_MODULE_NAME       "bcmdhd" 
@@ -206,6 +208,7 @@ wifi_ko_file_name module_list[] =
        {"RTL8189ES", RTL8189ES_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        {"RTL8723BS", RTL8723BS_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        {"RTL8723CS", RTL8723CS_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
+       {"RTL8822CS", RTL8822CS_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        {"RTL8723DS", RTL8723DS_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        {"RTL8812AU", RTL8812AU_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        {"RTL8189FS", RTL8189FS_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        
        
蓝牙调试:
替换供应商给的./hardware/realtek/rtkbt目录
在替换:rtl8822cs_config rtl8822cs_fw 两个文件

整体make 编译一下烧录


调试命令:
            cat /sys/bus/sdio/devices/mmc2:0001:1/uevent         //可查看SDIO设备ID  
            cat /sys/kernel/debug/mmcx/ios                         //可查看WIFI_sdio 相关信息
            logcat | grep WifiHW                                //查看WIFI加载信息
            
            
    WIFI 芯片识别流程
1. 开机对 wifi 模块上电,并自动进行扫描 sdio 操作。
2. 系统启动打开 wifi 操作时, 分别对系统 sys/bus/sdio(sdio wifi), sys/bus/usb(usb wifi),
sys/bus/pic (pcie wifi )文件系统下的 uevent 进行读取。
3. 获取到 wifi 芯片 vid pid 加载相应的 wifi ko 驱动。
4. 识别到 wifi 类型后加载不同的 wpa_supplicant 参数启动 wifi。        

        
        

    
    

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
RK3566是一款高性能的64位四核芯片,可提供丰富的接口和功能,广泛应用于各种嵌入式系统中。而RTL8211F是一款高集成度的Gigabit以太网PHY芯片,用于处理以太网通信。 要调试RK3566与RTL8211F的驱动,首先需要确保硬件连接正确。RTL8211F芯片通过PHY接口与RK3566芯片连接,需要将各个引脚正确连接,确保通信能够正常进行。 其次,需要加载正确的驱动程序。在RK3566的系统中,需要加载相应的网卡驱动程序,以支持与RTL8211F的通信。可以通过在系统中运行lspci命令来确认网卡设备的驱动程序是否正确加载。 接下来,可以通过网络配置工具来设置与RTL8211F的通信参数。在Linux系统中,可以使用ifconfig命令或者网络管理工具,如NetworkManager来配置网络接口。可以设置IP地址、子网掩码、网关等参数,确保RK3566能够与RTL8211F正常通信。 调试过程中,还可以使用网络诊断工具来检查网络连接是否正常。例如,可以使用ping命令来测试RK3566与另一个设备之间的连通性。如果ping命令成功返回,则表示网络连接正常。 最后,还可以使用网络分析工具来进行包的抓取和分析,以进一步调试和排查可能出现的问题。例如,可以使用Wireshark对网络数据包进行抓取和分析,以确认数据包的发送和接收情况。 总之,调试RK3566与RTL8211F的驱动需要确保硬件连接正确、加载正确的驱动程序、配置正确的网络参数,并使用网络诊断工具和分析工具进行进一步的调试和排查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值