zoukankan      html  css  js  c++  java
  • RK:RK3368 wifi bt compatible for android 5.1

    一,常用wifi型号 

    a.RelTek系列  AP系列

    wifi型号             接口     功能
    RTL8188EU       USB    单wifi+2.4g
    RTL8189FTV     SDIO   单wifi+2.4g
    RTL8189ETV     SDIO   单wifi+2.4g
    RTL8723BU       USB    wifi+bt+2.4g
    RTL8723BS       SDIO   wifi+bt+2.4g
    AP6181            SDIO   单wifi+2.4g
    AP6236            SDIO   wifi+bt+2.4g
    AP6255            SDIO   wifi+bt+2.4g+5g
    AP6330            SDIO   wifi+bt+2.4g+5g
    

    hardwarelibhardware_legacywifi k_wifi_ctrl.c

    static wifi_device supported_wifi_devices[] = {	
        {"RTL8188EU",  "0bda:8179"},
        {"RTL8188EU",  "0bda:0179"},
        {"RTL8723BU",  "0bda:b720"},
        {"RTL8723BS",  "024c:b723"},
        {"RTL8188FU",  "0bda:f179"},
        {"RTL8189ES",  "024c:8179"},
        {"RTL8189FS",  "024c:f179"},
        {"RTL8192DU",  "0bda:8194"},
        {"RTL8812AU",  "0bda:8812"},
        {"SSV6051",    "3030:3030"},
        {"ESP8089",    "6666:1111"},
        {"AP6354",     "02d0:4354"},
        {"AP6330",     "02d0:4330"},
        {"AP6255",     "02d0:a9bf"},
        {"AP6236",     "02d0:a9a6"},
        {"AP6181",     "02d0:a962"},
        {"AP6335",     "02d0:4335"}
    };

    二.Android5.1  移植说明

    内核修改说明:
    
    内核修改牵涉到四个部分:
     
    一. DTS以及config配置
     
    1.1 将AP6XXX系列的WIFI和RelTek系列WIFI驱动将build in方式修改为module方式,文件arch/arm64/configs/rockchip_defconfig添加如下内容。
     
    +CONFIG_BUILD_REALTEK_WIFI_MODULES=y
    +CONFIG_RTL8723BS=m
    +CONFIG_RTL8189ES=m
    +CONFIG_RTL8188FU=m
    +CONFIG_RTL8723BS_VQ0=m
    +CONFIG_RTL8723BU=m
    +CONFIG_RTL8189FS=m
    +CONFIG_RTL8188EU=m
    +CONFIG_RTL8812AU=m
    +CONFIG_ESP8089=m
    +CONFIG_RKWIFI=m
     
    1.2 rk3368-tb_8846.dts里面,无需配置WIFI芯片类型,SDIO CLK 配置为150M。
    
    --- a/arch/arm64/boot/dts/rk3368-tb_8846.dts
    +++ b/arch/arm64/boot/dts/rk3368-tb_8846.dts
    @@ -27,7 +27,7 @@
                      * rtl8188eu, rtl8723bs, rtl8723bu
                      * esp8089
                     */
    -                wifi_chip_type = "ap6335";
    +                wifi_chip_type = "";
     
                    sdio_vref = <1800>; //1800mv or 3300mv
     
    @@ -300,8 +300,8 @@
     };
     
     &sdio {
    -               clock-frequency = <50000000>;
    -               clock-freq-min-max = <200000 50000000>;
    +               clock-frequency = <150000000>;
    +               clock-freq-min-max = <200000 150000000>;
     
    二. SDIO部分
     
     该部分修改,兼容支持SDIO 3.0 和 SDIO 2.0的WIFI模块, 可以直接在内核根目录打rk3368_sdio_for_wifi_compatible.patch
     
     方法1: patch -p1 < rk3368_sdio_for_wifi_compatible.patch
     
     方法2:根据补丁文件夹kernel/drivers/mmc路径下源码对比修改。
     
    三. WIFI驱动部分
    
     WIFI驱动修改Kconfig和Makefile,加载方式修改为module. 将WIFI驱动目录drivers/net/wireless/rockchip_wlan下的WIFI驱动直接替换即可。
     
    四. rfkill-wlan.c中添加开机对模块上电并进行sdio扫描动作,详细见rfkill-wlan.c
    
    内核编译说明:
     
    1.WIFI驱动ko编译方法:
     
     进入内核目录,执行make ARCH=arm64 rockchip_defconfig &&  make ARCH=arm64 rk3368-tb_8846.img -j16 && make ARCH=arm64 modules -j16后,各个驱动目录下会生产相应的wifi ko文件。
    
    2. 编译WIFI 驱动ko文件与自动拷贝到android/vendor/rockchip/common/wifi/modules方法:
    
    目前由于WIFI驱动使用ko方式,不再build in 到内核,所以建议编译内核后,建议在编译android固件之前先编译make ARCH=arm64 modules -j16,将ko拷贝到android/vendor/rockchip/common/wifi/modulesmul 
     
    编译android固件前执行build_wifi_ko.sh编译KO,并拷贝到device/rockchip/common/wifi/modules目录,具体可以参考build_wifi_ko.sh
    
    
    ==================================================================================================================================================================== 
     Android 部分:
     
     1.目前wifi驱动已经编译好放到补丁device目录,将wifi ko文件放到android/vendor/rockchip/common/wifi/modules目录,编译到系统system/lib/modules目录。
     2.直接替换补丁hardware/libhardware_legacy/wifi/文件,该文件夹下源码实现wifi芯片自动识别功能,通过识别不同的WIFI芯片,加载不同的WIFI驱动。
     
    ====================================================================================================================================================================
     
     硬件说明:
     
    目前方案支持一套固件兼容AP系列和RelTek系列的WIFI,因此所有板子的设计,WIFI供电管教必须一致。
    AP系列是支持SDIO 3.0 ,因此硬件上WIFI IO电源必须为1.8V。 
    目前WIFI兼容方案可以兼容并且验证过的模块如下:
    AP6XXX系列:ap6330、AP6354、AP6335、
    EelTek WIFI系类:RTL8723BS、RTL8188FU、RTL8189ES、RTL8723BU、RTL8188EU、RTL8189FS 
    

     三.wifi 

    wifi 型号
    #define WIFI_CHIP_TYPE_PATH         "/sys/class/rkwifi/chip"
    #define WIFI_CHIP_TYPE_PATH         "/data/wifi_chip" 

     getWifiNameString

    import java.io.IOException;
    import java.io.BufferedReader;
    import java.io.FileReader;
    
        private String getWifiNameString(String path) 
        {
    			String defString = "AP6181";
    			try {
    				@SuppressWarnings("resource")
    				BufferedReader reader = new BufferedReader(new FileReader(path));
    				defString = reader.readLine();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			return defString;
        }
    
    	String wifiName = getWifiNameString("/data/wifi_chip");
            if (wifiName.contains("RTL8188EU")   

    四.RK Kernel 3.10 平台 BT 不工作异常排查  

    表现出的异常现象为:设置中打开 BT,一直显示正在打开,或者打开后自动关闭 

    需要通过以下几点排查:

    3.1.确认 BT_RFKILL  驱动是否加载成功

    [BT_RFKILL]: ap6335 device registered.
    

    驱动代码在:kernel/net/rfkill/rfkill-bt.c
    如果成功了 请检查确认蓝牙供电控制是否正常(以 rfkill0 为供电控制节点为例)

    echo 1 > /sys/class/rkfkill/rfkill0/state
    echo 0 > /sys/class/rfkill/rfkill0/state
    

    3.2. 确认UART  USB 接口是否打开    

    2.1 如果打开正常会有如下 logcat 打印:

    userial vendor open: opening /dev/ttyS0  

    注意:RTL8723AU/BU 使用的是 USB 接口,所以不使用这个接口,使用:/dev/rtk_btusb
    如果打开失败,需要确认:
    1) 是否存在这个节点;
    2) 是否有权限访问

    11-25 10:15:49.557 D/WifiHW  ( 1930): found device pid:vid : 0bda:b720
    11-25 10:15:49.557 D/WifiHW  ( 1930): wifi detectd return ret:0
    11-25 10:15:49.557 D/WifiHW  ( 1930): USB WIFI identify sucess
    11-25 10:15:49.557 D/WifiHW  ( 1930): check_wifi_chip_type_string: RTL8723BU
    11-25 10:15:49.557 D/bt_vendor( 1930): vendor_open load libbt-vendor_usb.so
    11-25 10:15:49.561 I/bt_vendor( 1930): alloc value 0xf3f0c301
    11-25 10:15:49.561 I/bt_vendor( 1930): init
    11-25 10:15:49.561 I/bt_hci  ( 1930): start_up bluetooth_rtk_h5_flag :0
    11-25 10:15:49.561 D/bt_vendor( 1930): op for 0
    11-25 10:15:49.561 D/bt_vendor( 1930): op for 0
    11-25 10:15:49.561 D/bt_hci  ( 1930): start_up starting async portion
    11-25 10:15:49.561 I/bt_hci  ( 1930): event_finish_startup
    11-25 10:15:49.561 I/bt_hci_h4( 1930): hal_open
    11-25 10:15:49.561 D/bt_vendor( 1930): op for 3
    11-25 10:15:49.561 I/bt_vendor( 1930): userial vendor open: opening /dev/rtk_btusb
    11-25 10:15:49.561 I/bt_vendor( 1930): device fd = 52 open
    11-25 10:15:49.562 D/bt_vendor( 1930): op for 1
    11-25 10:15:49.562 E/bt_vendor( 1930): Bt_vendor_rtk Op for BT_VND_OP_FW_CFG
    11-25 10:15:50.419 E/bt_vendor( 1930): Bt_vendor_rtk Download Fw Success
    11-25 10:15:50.419 I/bt_vendor( 1930): firmware callback
    11-25 10:15:50.419 I/bt_hci  ( 1930): firmware_config_callback
    11-25 10:15:50.420 I/bt_btu  ( 1930): btu_task pending for preload complete event
    11-25 10:15:50.420 I/bt_btu_task( 1930): Bluetooth chip preload is complete
    11-25 10:15:50.420 I/bt_btu  ( 1930): btu_task received preload complete event
    11-25 10:15:50.426 I/        ( 1930): BTE_InitTraceLevels -- TRC_HCI
    11-25 10:15:50.426 I/        ( 1930): BTE_InitTraceLevels -- TRC_L2CAP
    11-25 10:15:50.426 I/        ( 1930): BTE_InitTraceLevels -- TRC_RFCOMM
    11-25 10:15:50.426 I/        ( 1930): BTE_InitTraceLevels -- TRC_AVDT
    11-25 10:15:50.426 I/        ( 1930): BTE_InitTraceLevels -- TRC_AVRC
    11-25 10:15:50.426 I/        ( 1930): BTE_InitTraceLevels -- TRC_A2D
    11-25 10:15:50.426 I/        ( 1930): BTE_InitTraceLevels -- TRC_BNEP
    11-25 10:15:50.426 I/        ( 1930): BTE_InitTraceLevels -- TRC_BTM
    11-25 10:15:50.426 I/        ( 1930): BTE_InitTraceLevels -- TRC_GAP
    11-25 10:15:50.427 I/        ( 1930): BTE_InitTraceLevels -- TRC_PAN
    11-25 10:15:50.427 I/        ( 1930): BTE_InitTraceLevels -- TRC_SDP
    11-25 10:15:50.427 I/        ( 1930): BTE_InitTraceLevels -- TRC_GATT
    11-25 10:15:50.427 I/        ( 1930): BTE_InitTraceLevels -- TRC_SMP
    11-25 10:15:50.427 I/        ( 1930): BTE_InitTraceLevels -- TRC_BTAPP
    11-25 10:15:50.427 I/        ( 1930): BTE_InitTraceLevels -- TRC_BTIF
    11-25 10:15:50.488 E/rtk_parse( 1930): ERROR in sendto
    11-25 10:15:50.518 I/bt_btm_sec( 1930): BTM_SecRegister p_cb_info->p_le_callback == 0x0xf3e8a191
    11-25 10:15:50.518 I/bt_btm_sec( 1930): BTM_SecRegister btm_cb.api.p_le_callback = 0x0xf3e8a191
    11-25 10:15:50.540 I/bt_btif_storage( 1930): btif_storage_get_adapter_property service_mask:0x20000000
    11-25 10:15:50.541 D/BluetoothAdapterProperties( 1930): Address is:22:22:29:3C:1B:17
    11-25 10:15:50.543 D/BluetoothAdapterProperties( 1930): Name is: rk3368
    11-25 10:15:50.546 D/BluetoothAdapterProperties( 1930): Scan Mode:20
    11-25 10:15:50.546 D/BluetoothAdapterProperties( 1930): Discoverable Timeout:120
    

    五.bcmdhd固件加载 AP系列 wifi/bt
    5.0. 第一次开机 跑 systemcoredrmservicedrmservice.c 加载 ko
    5.1. kerneldrivers etwireless ockchip_wlan kwifi k_wifi_config.c
    int chip = get_wifi_chip_type(); 加载wifi、bt固件
    5.2. 识别wifi型号get_wifi_chip_type kernel et fkill fkill-wlan.c
    这里看dts 未定义则默认 WIFI_AP6210
    ---> #include <linux/rfkill-wlan.h> wifi型号
    5.3. 最后这里加载 kerneldrivers etwireless ockchip_wlan kwificmdhddhd_linux.c
    extern int rkwifi_set_firmware(char *fw, char *nvram);
    rkwifi_set_firmware(firmware, nvram);

      

  • 相关阅读:
    关闭 Window 之后,无法设置 Visibility,也无法调用 Show、ShowDialogor 或 WindowInteropHelper.EnsureHandle。
    WPF中的逻辑树和可视化树
    StopWatch
    【转】Oracle imp 总是不停地重复闪烁
    Ubuntu下借助URLOS实现快速安装DzzOffice企业办公套件
    linux下使用URLOS搭建nextcloud私有云盘系统
    在Debian下利用URLOS快速安装SqlServer2017
    使用URLOS 五分钟安装rTorrent (轻量级优秀BT/PT客户端)
    URLOS开发基础教程——docker容器的使用方法
    使用URLOS在linux系统中极速部署NFS共享存储服务
  • 原文地址:https://www.cnblogs.com/crushgirl/p/14028413.html
Copyright © 2011-2022 走看看