RTL8723BU wifi 及 熱點移植和測試

基於realtek  RTL8723DU/RTL8723BU “RTL8723BU_WiFi_linux_v4.4.2_18635_BTCOEX20151228-664a.20161006” 官方驅動包,見附件。

1. 將driver文件拷貝到 /home/public/project/android/freescaleandroid5.1/kernel_imx/drivers/net/wireless/rtlwifi目錄,並修改Makefile文件

在 “Platform Related”中添加如下內容

CONFIG_PLATFORM_IMX6Q = y

並disable其他平臺

在 ARM ToolChain 配置部分添加如下內容

ifeq ($(CONFIG_PLATFORM_IMX6Q), y)

EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN

EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT -DCONFIG_PLATFORM_ANDROID -DCONFIG_ANDROID -DCONFIG_CONCURRENT_MODE -DCONFIG_RADIO_WORK

ARCH := arm

CROSS_COMPILE := $(KVER)//prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-

KSRC := $(KERNEL_BUILD_PATH)

MODULE_NAME := 8723bu

endif

在rtlwifi/Makefile文件中添加

obj-$(CONFIG_RTL8723BU)        += rtl8723bu/

在rtlwifi/Kconfig文件中添加

config RTL8723BU

    tristate "Realtek RTL8723B USB Wireless Network Adapter"

    select RTLWIFI

    select RTLWIFI_USB

    ---help---

    This is the driver for Realtek RTL8723BU 802.11n USB

    wireless network adapters.



    If you choose to build it as a module, it will be called rtl8723bu



menuconfig 配置RTL8723BU爲M

make 編譯內核生成8723bu.ko文件

2. 參考文件“Realtek_Wi-Fi_SDK_for_Android_L_5.x.pdf”移植wifi hal層及相應配置。

3. 拷貝wpa_supplicant_hostapd/wpa_supplicant_8_L_5.x_rtw_r16058.20151204目錄下的文件到freescaleandroid5.1/external目錄(備份系統自帶的此文件)。

編譯此文件,將會生成hostapd在system/bin/目錄下。

4. 拷貝“rtl_hostapd_2G.conf”文件到OUT目錄中的system/etc目錄下,並更名爲hostapd.conf。修改此文件如下幾處:

ctrl_interface=/data/misc/wifi/hostapd

driver=nl80211

具體修改方法可參考驅動包中的document/Quick_Start_Guide_for_SoftAP.pdf文件

5.啓動系統後,運行hostapd -d etc/hostapd.conf,可測試配置文件以及hostapd驅動是否可用。

運行hostapd -B etc/hostapd.conf,即可啓動進程。

6.修改freescaleandroid5.1/system/netd/server/SoftapController.cpp以適應系統設置中的“打開便攜式WLAN熱點”功能。

根據“static const char DRIVER_VENDOR_NAME[]  = "wlan.vendor";”此語句,需配置wlan.vendor屬性以適應不同的WIFI 模塊。

在freescaleandroid5.1/device/fsl/sabresd_6dq/init.rc文件中添加setprop wlan.vendor "realtek"

在SoftapController.cpp文件中的int SoftapController::startSoftap()函數中,由於始終無法進入到

if ((strcmp(driver_vendor, "realtek") == 0)) {

           ret = execl(HOSTAPD_BIN_FILE_RTL, HOSTAPD_BIN_FILE,

                       "-e", WIFI_ENTROPY_FILE,

                       HOSTAPD_CONF_FILE, (char *) NULL);

        }

中,所以在之前添加打印信息:ALOGE("DRIVER_VENDOR_NAME is %s ", driver_vendor);//added by lqy for debug

並開啓硬啓動:

else if (1){ //this part is added by lqy for rtk softap

       ret = execl(HOSTAPD_BIN_FILE, HOSTAPD_BIN_FILE,

                       "-e", WIFI_ENTROPY_FILE,

                       HOSTAPD_CONF_FILE, (char *) NULL);

       ALOGE("---lqy---");

    }

此方法不推薦使用。

2017.9.15  改善之前的問題和不足

1. 刪除之前在freescaleandroid5.1/device/fsl/sabresd_6dq/init.rc文件中添加的setprop wlan.vendor "realtek"信息

2. 在freescaleandroid5.1/device/fsl/imx6/imx6.mk文件中添加    wlan.vendor=realtek

添加位置如下:


# for property

PRODUCT_DEFAULT_PROPERTY_OVERRIDES := \

    persist.sys.usb.config=mtp \

    wifi.interface=wlan0 \

    ro.boot.btdev=realtek \

    wlan.vendor=realtek

3. 刪除之前在freescaleandroid5.1/system/netd/server/SoftapController.cpp文件中添加的


else if (1){ //this part is added by lqy for rtk softap

       ret = execl(HOSTAPD_BIN_FILE, HOSTAPD_BIN_FILE,

                       "-e", WIFI_ENTROPY_FILE,

                       HOSTAPD_CONF_FILE, (char *) NULL);

       ALOGE("---lqy---");

    }

4. 將上文中的49行修改爲

static const char HOSTAPD_BIN_FILE_RTL[]    = "/system/bin/hostapd";//lqy fixed static const char HOSTAPD_BIN_FILE_RTL[]    = "/system/bin/rtl_hostapd";

5. 可cd 進入freescaleandroid5.1/system/netd/server/目錄單獨“mm”編譯SoftapController.cpp

也可在根目錄下make

6. 更新系統卡中system/bin/netd文件和boot/uramdisk.img


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章