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

hardware\libhardware_legacy\wifi\rk_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. 第一次開機 跑 system\core\drmservice\drmservice.c 加載 ko
5.1. kernel\drivers\net\wireless\rockchip_wlan\rkwifi\rk_wifi_config.c
int chip = get_wifi_chip_type(); 加載wifi、bt固件
5.2. 識別wifi型號get_wifi_chip_type kernel\net\rfkill\rfkill-wlan.c
這里看dts 未定義則默認 WIFI_AP6210
---> #include <linux/rfkill-wlan.h> wifi型號
5.3. 最后這里加載 kernel\drivers\net\wireless\rockchip_wlan\rkwifi\bcmdhd\dhd_linux.c
extern int rkwifi_set_firmware(char *fw, char *nvram);
rkwifi_set_firmware(firmware, nvram);

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM