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


你可能感兴趣的:(android)