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);

  

原文地址:https://www.cnblogs.com/crushgirl/p/14028413.html