RK3568 移植USB WIFI 方法

本文详细介绍了在RK3568和RK3588硬件平台上,如何针对Android11/12系统进行USBWiFi(rtl8822cu)驱动的移植和配置,包括修改DTS文件、添加驱动源码、更新kernel配置、修改android源码以及蓝牙设备节点的设置。此外,还提供了编译和测试驱动的步骤,确保WiFi功能正常工作。
摘要由CSDN通过智能技术生成

基本信息

硬件平台 : RK3568、RK3588

操作系统: Android11/12

一、硬件原理图

二、修改源码
步骤1:修改DTS

根据硬件可以,使用USB wifi,USB wifi 不需要配置wifi_chip_type,故配置为空,电源没有控制脚,暂时注释掉。

wireless_wlan: wireless-wlan {
compatible = "wlan-platdata";
rockchip,grf = <&grf>;
wifi_chip_type = "";   //rtl8822cu
#WIFI,vbat_gpio = <&gpio0 RK_PC1 GPIO_ACTIVE_LOW>; //V10 无电源控制脚
status = "okay";
};

步骤2 :添加驱动文件并修改相关文件,如下。

   驱动源码的获取,最好通过FAE获取对应android版本最新的源码,以减少在移植过程中不必要的麻烦。


 1、copy relteck提供的驱动代码 rtl88x2CU_WiFi_linux_v5.14.0.3-2-gba458274c.20220418_COEX20211210-2727.tar.gz 到
 kernel/drivers/net/wireless/rockchip_wlan/下面 ,

 2、解压,改目录名: 
  rtl88x2cu


 3、修改Kconfig and Makefile 
 
 文件:kernel/drivers/net/wireless/rockchip_wlan/Kconfig 
 添加
 source "drivers/net/wireless/rockchip_wlan/rtl88x2cu/Kconfig"
 

同时测试了rtl88x2bu。 


 文件:kernel/drivers/net/wireless/rockchip_wlan/Makefile
 添加
 obj-$(CONFIG_RTL8822CU) += rtl88x2cu/ 

 

 


 4、修改kernel配置文件 
 文件:arch/arm64/configs/rk3568_xx.config 
   CONFIG_RTL8822CU=m
 
5、修改Makefile 配置项

去掉x86选择,选择rk3188.

  
   注释掉 DRTW_ENABLE_WIFI_CONTROL_FUNC
  模块名 8822cu
     
    
    --3、添加android 11等配置项
    
     # CONFIG_RTW_ANDROID - 0: no Android, 4/5/6/7/8/9/10/11 : Android version
        CONFIG_RTW_ANDROID = 11

 

 

 

6、修改文件
   drivers/net/wireless/rockchip_wlan/rtl88x2cu/os_dep/linux/usb_intf.c

修改1、
    将          static int __init rtw_drv_entry(void)   {
    修改为    static int rtw_drv_entry(void)     {
修改2、
    将         static void __exit rtw_drv_halt(void)  {
  修改为     static void rtw_drv_halt(void)      {
    
修改3、注释掉模块的初始化和退出
//module_init(rtw_drv_entry);
//module_exit(rtw_drv_halt);

  修改4 ,增加rockchip接口函数

  在该文件末尾添加 完整代码 如下:


#ifdef CONFIG_INTEL_PROXIM
_adapter  *rtw_usb_get_sw_pointer(void)
{
    return rtw_sw_export;
}
EXPORT_SYMBOL(rtw_usb_get_sw_pointer);
#endif /* CONFIG_INTEL_PROXIM */


#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))
#include <linux/rfkill-wlan.h>
extern int get_wifi_chip_type(void);
#else
extern int rk29sdk_wifi_power(int on);
#endif

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))
int rockchip_wifi_init_module_rtkwifi(void)
#else
int rockchip_wifi_init_module(void)
#endif
{
#ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
    int type = get_wifi_chip_type();
    if (type < WIFI_AP6XXX_SERIES || type == WIFI_ESP8089) return 0;
#endif
    printk("\n");
    printk("=======================================================\n");
    printk("==== Launching Wi-Fi driver! (Powered by Rockchip) ====\n");
    printk("=======================================================\n");
    printk("Realtek 8822BU USB WiFi driver (Powered by Rockchip) init.\n");
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))
    //rockchip_wifi_power(1);      /* 因硬件上没有电源控制,去掉,如果硬件上有电源可以增加该项*/
#else
    rk29sdk_wifi_power(1);
#endif

    return rtw_drv_entry();
}

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))
void rockchip_wifi_exit_module_rtkwifi(void)
#else
void rockchip_wifi_exit_module(void)
#endif
{
#ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
    int type = get_wifi_chip_type();
    if (type < WIFI_AP6XXX_SERIES || type == WIFI_ESP8089) return;
#endif
    printk("\n");
    printk("=======================================================\n");
    printk("==== Dislaunching Wi-Fi driver! (Powered by Rockchip) ====\n");
    printk("=======================================================\n");
    printk("Realtek 8822BU USB WiFi driver (Powered by Rockchip) init.\n");
    rtw_drv_halt();
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))
    
    //rockchip_wifi_power(0); /* 因硬件上没有电源控制,去掉,如果硬件上有电源可以增加该项*/
#else
    rk29sdk_wifi_power(0);
#endif
}

#ifdef CONFIG_WIFI_BUILD_MODULE
module_init(rockchip_wifi_init_module_rtkwifi);
module_exit(rockchip_wifi_exit_module_rtkwifi);
#else
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))
#ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
late_initcall(rockchip_wifi_init_module_rtkwifi);
module_exit(rockchip_wifi_exit_module_rtkwifi);
#else
module_init(rockchip_wifi_init_module_rtkwifi);
module_exit(rockchip_wifi_exit_module_rtkwifi);
#endif
#else
#ifdef CONFIG_ANDROID_4_2
module_init(rockchip_wifi_init_module);
module_exit(rockchip_wifi_exit_module);
#else
EXPORT_SYMBOL(rockchip_wifi_init_module);
EXPORT_SYMBOL(rockchip_wifi_exit_module);
#endif
#endif
#endif

  
步骤3,android源码修改
路径: frameworks/opt/net/wifi/libwifi_hal/rk_wifi_ctrl.cpp 

wifi控制文件,主要添加设备型号的 PID VID,当系统启动时,查到有设备的VID,PID匹配时,即可加载对应的设备驱动。

在调试时,可以通过系统启动完成后,输入lsmod 查看相应的ko 是否加载,当加载成功,表明该文件修改成功。

static wifi_device supported_wifi_devices[] = {
        {"RTL8188EU",   "0bda:8179"},
        {"RTL8188EU",   "0bda:0179"},
        {"RTL8723BU",   "0bda:b720"},
        {"RTL8723BS",   "024c:b723"},
        {"RTL8822BS",   "024c:b822"},
        {"RTL8723CS",   "024c:b703"},
        {"RTL8723DS",   "024c:d723"},
        {"RTL8188FU",   "0bda:f179"},
        {"RTL8822BU",   "0bda:b82c"},
        {"RTL8189ES",   "024c:8179"},
        {"RTL8189FS",   "024c:f179"},
        {"RTL8192DU",   "0bda:8194"},
        {"RTL8812AU",   "0bda:8812"},
        {"RTL8821CS",   "024c:c821"},
        {"RTL8822CU",   "0bda:c82c"},  已经支持该芯片,不用添加
步骤4
路径:.frameworks\opt\net\wifi\libwifi_hal\wifi_hal_common.cpp

#define WIFI_MODULE_PATH                "/vendor/lib/modules/"

添加:

#define RTL8822CU_DRIVER_MODULE_PATH     WIFI_MODULE_PATH"8822cu.ko"
#define RTL8822CU_DRIVER_MODULE_NAME     "8822cu"

编译完成后,自动copy到目标位置

wifi_ko_file_name module_list[] =
{
  
        {"RTL8822CU", RTL8822CU_DRIVER_MODULE_NAME, RTL8822CU_DRIVER_MODULE_PATH, UNKKOWN_DRIVER_MODULE_ARG},
        
步骤5:修改加载设备节点
因源码基本上都是支持的SDIO wifi,所以bt都是通过串口实现,当USB WIFI/BT模块时,需要修改为rtkbt_dev

文件:hardware\realtek\rtkbt\vendor\etc\bluetooth\rtkbt.conf
#Indicate USB or UART driver bluetooth
+BtDeviceNode=/dev/rtkbt_dev
+#BtDeviceNode=?/dev/ttyS1:H5


步骤6:本机蓝牙设备名称:(默认为rk3566,更改为rk3568:)
文件:device\rockchip\rk356x\bluetooth\bdroid_buildcfg.h
+ //#define BTM_DEF_LOCAL_NAME "rk3566"
+ #define BTM_DEF_LOCAL_NAME "rk3568"  

步骤7:测试

android整体编译,烧录测试,在android界面打开wifi开关,可以看到搜索到热点,选择热点,输入密码即可实现联网工作。

参考资料 : 
Rockchip_Introduction_REALTEK_WIFI_Driver_Porting_CN&EN.pdf
Rockchip_Introduction_WIFI_Configuration_CN&EN.pdf
https://bbs.elecfans.com/jishu_2254463_1_1.html

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值