硬件:imx6q

操作系统:Android4.4.2

本次修改基于厂商提供的RTL8723BU_WiFi_linux_v4.3.16_14189.20150519_BTCOEX2015119-5844包

下载链接:http://download.csdn.net/detail/bhj1119/9761769

一 修改记录:
1.配置linux内核
(1)Networking support --->Wireless下增加802.11 协议栈的支持
--- Wireless                                                                                                                         
<M>   cfg80211 - wireless configuration API
[*]     nl80211 testmode command   
[*]     enable developer warnings                                                                                                     
[*]     cfg80211 regulatory debugging 
[*]     enable powersave by default
[ ]     cfg80211 DebugFS entries
[ ]     use statically compiled regulatory rules database  
[*]     cfg80211 wireless extensions compatibility
  [*]   Wireless extensions sysfs files 
-*-   Common routines for IEEE802.11 drivers
[ ]   lib80211 debugging messages  
[*]   Allow reconnect while already connected 
<M>   Generic IEEE 802.11 Networking Stack (mac80211)  
[ ]   PID controller based rate control algorithm  
[*]   Minstrel
[*]     Minstrel 802.11n support  
     Default rate control algorithm (Minstrel)  --->  
[*]   Enable mac80211 mesh networking (pre-802.11s) support 
  [*]   Enable LED triggers  
[ ]   Export mac80211 internals in DebugFS
[ ]   Select mac80211 debugging features  ---> 
(2) 配置Device Drivers  --->USB support  ---><*>   USB Wireless Device Management support 支持WIFI

2.将RTL8723BU_WiFi_linux_v4.3.16_14189.20150519_BTCOEX2015119-5844/driver下的压缩包拷贝到ANDROID_SDK/kernel_imx/drivers/net/wireless下,解压,修改其Makefile,编译wifi驱动模块,修改内容如下:
CONFIG_PLATFORM_IMX6Q = y

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
ARCH := arm
CROSS_COMPILE := XXX/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
KSRC := XXX/kernel_imx//
MODULE_NAME := 8723bu
endif
如果(1)中选项没有选上,会导致加载wifi模块时报如下错误:
rtl8723bu: no symbol version for cfg80211_ready_on_channel
rtl8723bu: Unknown symbol cfg80211_ready_on_channel (err -22)
rtl8723bu: Unknown symbol odm_SwAntDetectInit (err 0)
rtl8723bu: no symbol version for __ieee80211_get_channel
rtl8723bu: Unknown symbol __ieee80211_get_channel (err -22)
rtl8723bu: no symbol version for cfg80211_roamed
rtl8723bu: Unknown symbol cfg80211_roamed (err -22)
rtl8723bu: no symbol version for wiphy_register
rtl8723bu: Unknown symbol wiphy_register (err -22)
原因就是:编译WiFi模块时会去KSRC所指的路径下找相应的库,若果相关的编译选项没有选上会导致某些库缺失,从而导致编出来的WiFi模块不完整。
上述是由于编译内核时内有勾选80211协议栈导致。

3.用厂商提供的hardware/realtek 替换hardware/realtek
4.用厂商提供的wpa_supplicant_8_kk_4.4_rtw_r12456.20141003替换ANDROID_SDK/extern/wpa_supplicant_8,并修改文件夹的名字为wpa_supplicant_8。
5.hardware/libhardware_legacy/wifi/Android.mk 
修改内容如下:
--- Android.mk  (版本 170)
+++ Android.mk  (工作副本)
@@ -49,15 +49,21 @@
LOCAL_CFLAGS += -DWIFI_DRIVER_FW_PATH_PARAM=\"$(WIFI_DRIVER_FW_PATH_PARAM)\"
endif

-ifeq ($(BOARD_WLAN_DEVICE),UNITE)
-  LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../external/wpa_supplicant_ath/wpa_supplicant/src/common
-  LOCAL_SRC_FILES += wifi/wifi_unite.c
-else ifeq ($(BOARD_WLAN_VENDOR), INTEL)
-  LOCAL_SRC_FILES += wifi/wifi_intel.c
-  LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../external/wpa_supplicant_8/src/common
+#ifeq ($(BOARD_WLAN_DEVICE),UNITE)
+#  LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../external/wpa_supplicant_ath/wpa_supplicant/src/common
+#  LOCAL_SRC_FILES += wifi/wifi_unite.c
+#else ifeq ($(BOARD_WLAN_VENDOR), INTEL)
+#  LOCAL_SRC_FILES += wifi/wifi_intel.c
+#  LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../external/wpa_supplicant_8/src/common
+#else
+#  LOCAL_SRC_FILES += wifi/wifi.c
+#  LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../external/wpa_supplicant_8/src/common
+#endif
+
+ifeq ($(BOARD_WIFI_VENDOR), realtek)
+LOCAL_SRC_FILES += ../realtek/wlan/libhardware_legacy/wifi/wifi_realtek.c
else
-  LOCAL_SRC_FILES += wifi/wifi.c
-  LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../external/wpa_supplicant_8/src/common
+LOCAL_SRC_FILES += wifi/wifi.c
endif

6.修改device/fsl/sabresd_6dq/BoardConfig.mk
修改内容如下:
--- BoardConfig.mk      (版本 170)
+++ BoardConfig.mk      (工作副本)
@@ -26,6 +26,33 @@
TARGET_BOOTLOADER_BOARD_NAME := SABRESD
PRODUCT_MODEL := SABRESD-MX6DQ

+
+BOARD_WIFI_VENDOR := realtek
+ifeq ($(BOARD_WIFI_VENDOR), realtek)
+WPA_SUPPLICANT_VERSION := VER_0_8_X
+BOARD_WPA_SUPPLICANT_DRIVER := NL80211
+CONFIG_DRIVER_WEXT :=y
+BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_rtl
+BOARD_HOSTAPD_DRIVER := NL80211
+BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_rtl
+#BOARD_WLAN_DEVICE := rtl8192cu
+#BOARD_WLAN_DEVICE := rtl8192du
+#BOARD_WLAN_DEVICE := rtl8192ce
+#BOARD_WLAN_DEVICE := rtl8192de
+#BOARD_WLAN_DEVICE := rtl8723as
+#BOARD_WLAN_DEVICE := rtl8723au
+#BOARD_WLAN_DEVICE := rtl8189es
+#BOARD_WLAN_DEVICE := rtl8723bs
+BOARD_WLAN_DEVICE := rtl8723bu
+WIFI_DRIVER_MODULE_NAME := "8723bu"
+WIFI_DRIVER_MODULE_PATH := "/system/lib/modules/8723bu.ko"
+WIFI_DRIVER_MODULE_ARG := "ifname=wlan0 if2name=p2p0"
+WIFI_FIRMWARE_LOADER := ""
+WIFI_DRIVER_FW_PATH_STA := ""
+WIFI_DRIVER_FW_PATH_AP := ""
+WIFI_DRIVER_FW_PATH_P2P := ""
+WIFI_DRIVER_FW_PATH_PARAM := ""
+else
# UNITE is a virtual device support both atheros and realtek wifi(ar6103 and rtl8723as)
BOARD_WLAN_DEVICE            := UNITE
WPA_SUPPLICANT_VERSION       := VER_0_8_UNITE
@@ -39,6 +66,7 @@
BOARD_WPA_SUPPLICANT_PRIVATE_LIB_QCOM       := lib_driver_cmd_qcwcn
BOARD_HOSTAPD_PRIVATE_LIB_RTL               := lib_driver_cmd_rtl
BOARD_WPA_SUPPLICANT_PRIVATE_LIB_RTL        := lib_driver_cmd_rtl
+endif
#for intel vendor
ifeq ($(BOARD_WLAN_VENDOR),INTEL)
BOARD_HOSTAPD_PRIVATE_LIB                := private_lib_driver_cmd
@@ -118,3 +146,4 @@
fs_use \
untrusted_app.te \
genfs_contexts

上述步骤完成后,到根目录下执行make 编译整个系统。
二 测试
1.安装cfg80211.ko,8723bu.ko依赖此模块,缺省会报如下错误:

8723bu: Unknown symbol cfg80211_ready_on_channel (err 0)
8723bu: Unknown symbol __ieee80211_get_channel (err 0)
8723bu: Unknown symbol cfg80211_roamed (err 0)
8723bu: Unknown symbol wiphy_register (err 0)
8723bu: Unknown symbol cfg80211_disconnected (err 0)
8723bu: Unknown symbol cfg80211_new_sta (err 0)
8723bu: Unknown symbol cfg80211_connect_result (err 0)
8723bu: Unknown symbol cfg80211_inform_bss_frame (err 0)

2.安装8723bu.ko模块,两个模块都安装好之后,执行netcfg,会看到多出wlan0和p2p0设备节点,他们是8723bu驱动创建出来的,放到sys/class/net/下。

lo       UP                                   127.0.0.1/8   0x00000049 00:00:00:00:00:00
can0     DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
can1     DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
eth0     UP                                     0.0.0.0/0   0x00001043 1e:ed:19:27:1a:b3
wlan0    DOWN                                   0.0.0.0/0   0x00001002 7c:c7:09:30:c5:4d
p2p0     DOWN                                   0.0.0.0/0   0x00001002 7e:c7:09:30:c5:4d

3.执行ifconfig wlan0 up,打开wlan0

4.执行system/bin/wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wifi/wpa_supplicant.conf,启动wpa_supplicant进程。
启动过程报如下错误:
E/wpa_supplicant( 3251): mkdir[ctrl_interface=wlan0]: Permission denied
E/wpa_supplicant( 3251): Failed to initialize control interface 'wlan0'.
E/wpa_supplicant( 3251): You may have another wpa_supplicant process already running or the file was
E/wpa_supplicant( 3251): left by an unclean termination of wpa_supplicant in which case you will need
E/wpa_supplicant( 3251): to manually remove this file before starting wpa_supplicant again.
错误原因:wpa_supplicant进程运行时的配置文件wpa_supplicant.conf文件中的ctrl_interface的路径不对,没有匹配成功,导致进程启动失败。原来ctrl_interface的路径是/var/run/wpa_supplicant,把ctrl_interface改成/data/misc/wifi/wpa_supplicant就可以了。
ctrl_interface在哪里?在工程下的external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant.conf中。
深入分析:
wpa_supplicant_init_iface函数分析
init_iface初始化的第一个工作是解析运行时配置文件。其中,wpa_s->confname的值为“/data/misc/wifi/wpa_supplicant.conf”,解析函数是wpa_config_read。
wpa_s->ctrl_iface = wpa_supplicant_ctrl_iface_init(wpa_s);  
    if (wpa_s->ctrl_iface == NULL) {  
        wpa_printf(MSG_ERROR,  
                   "Failed to initialize control interface '%s'.\n"  
                   "You may have another wpa_supplicant process "  
                   "already running or the file was\n"  
                   "left by an unclean termination of wpa_supplicant "  
                   "in which case you will need\n"  
                   "to manually remove this file before starting "  
                   "wpa_supplicant again.\n",  
                   wpa_s->conf->ctrl_interface);  
          return -1;  
    }

如果是linux系统,可能没有wpa_supplicant工具,可参考wpa_supplicant-2.6交叉编译  ,移植此工具。
5.执行system/bin/wpa_cli -p/data/misc/wifi/wpa_supplicant,配置并连接wifi热点。
Could not connect to wpa_supplicant: wlan0 - re-trying

wpa_cli v2.0-devel-4.4.2_rtw_r12456.20141003
Copyright (c) 2004-2013, Jouni Malinen <j@w1.fi> and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.

Selected interface 'wlan0'

Interactive mode

1)> scan
OK
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=2 BSSID=00:00:00:00:00:00 SSID=
2)> scan_results
bssid / frequency / signal level / flags / ssid
78:eb:14:bd:f6:9e       2412    -58     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      B1412
bc:67:1c:41:29:4d       2437    -65     [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]       systec-cisco
e0:05:c5:23:fc:52       2452    -71     [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]
30:fc:68:0b:c9:f6       2437    -71     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      gsdq
ec:26:ca:53:ea:f1       2462    -72     [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] TP-LINK_EAF1
00:1f:f3:bf:d0:6f       2462    -73     [WPA2-PSK-CCMP][ESS]    tcs apple
d4:ee:07:29:9b:4a       2442    -73     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      Cherry&Filippo
24:69:68:16:a9:1e       2462    -74     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      \xe6\xb2\x83\xe7\x95\x89
fc:d7:33:8d:0a:36       2412    -74     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      dangyuanweixin
b0:c0:90:3a:24:a3       2422    -74     [WPA2-PSK-CCMP][ESS]    360\xe8\xa1\x8c\xe8\xbd\xa6\xe8\xae\xb0\xe5\xbd\x95\xe4\xbb\xaa-A3
c8:3a:35:1f:5f:88       2422    -80     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      wangzihao
c8:3a:35:06:a9:b0       2452    -82     [WPA-PSK-CCMP][ESS]     Tenda_06A9B0
00:3a:99:9b:9b:40       2417    -45     [WEP][ESS]      systec-AP
00:0c:43:30:50:a0       2437    -51     [ESS]   Wii-Link_3050A0
08:10:78:e1:27:a5       2412    -74     [ESS]   NETCORE_27A5
3)> add_network
0
4)> set_network 0 ssid "systec-cisco"
OK
5)> set_network 0 psk "XXX"
OK
6)> select_network 0
OK
<3>CTRL-EVENT-STATE-CHANGE id=0 state=3 BSSID=00:00:00:00:00:00 SSID=systec-cisco
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>Trying to associate with bc:67:1c:41:29:4d (SSID='systec-cisco' freq=2437 MHz)
<3>CTRL-EVENT-STATE-CHANGE id=0 state=5 BSSID=00:00:00:00:00:00 SSID=systec-cisco
<3>CTRL-EVENT-STATE-CHANGE id=0 state=6 BSSID=00:00:00:00:00:00 SSID=systec-cisco
<3>Associated with bc:67:1c:41:29:4d
<3>CTRL-EVENT-STATE-CHANGE id=0 state=7 BSSID=bc:67:1c:41:29:4d SSID=systec-cisco
<3>CTRL-EVENT-STATE-CHANGE id=0 state=8 BSSID=bc:67:1c:41:29:4d SSID=systec-cisco
<3>WPA: Key negotiation completed with bc:67:1c:41:29:4d [PTK=CCMP GTK=TKIP]
<3>CTRL-EVENT-CONNECTED - Connection to bc:67:1c:41:29:4d completed (auth) [id=0 id_str=]
<3>CTRL-EVENT-STATE-CHANGE id=0 state=9 BSSID=bc:67:1c:41:29:4d SSID=systec-cisco
7)enable_network 0
OK

查看链接状态:
> status
bssid=bc:67:1c:41:29:4d
ssid=systec-cisco
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
p2p_device_address=7c:c7:09:30:c5:4d
address=7c:c7:09:30:c5:4d
<3>CTRL-EVENT-STATE-CHANGE id=0 state=9 BSSID=bc:67:1c:41:29:4d SSID=systec-cisco
<3>CTRL-EVENT-CONNECTED - connection to bc:67:1c:41:29:4d completed (auth) [id=0 id_str=]

执行dhcpcd wlan0 分配IP,此时再netcfg查看,wlan0de ip 已经变成10.0.0.118
root@sabresd_6dq:/ # netcfg
lo       UP                                   127.0.0.1/8   0x00000049 00:00:00:00:00:00
can0     DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
can1     DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
eth0     UP                                     0.0.0.0/0   0x00001043 1e:ed:19:27:1a:b3
wlan0    UP                                  10.0.0.118/24  0x00001043 7c:c7:09:30:c5:4d
p2p0     DOWN                                   0.0.0.0/0   0x00001002 7e:c7:09:30:c5:4d

ping 一下看看通不通
root@sabresd_6dq:/ # ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=63 time=29.1 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=63 time=15.9 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=63 time=16.4 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=63 time=14.3 ms
64 bytes from 192.168.1.1: icmp_seq=5 ttl=63 time=14.0 ms
^C
--- 192.168.1.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 14.034/17.991/29.183/5.672 ms

至此wifi模块移植完毕,可以实现扫描,链接,分配IP

延伸阅读:关于SDIO接口WiFi模块的调试经验

RTL8723BU WiFi—蓝牙 模块移植相关推荐

  1. iMX6ULL RTL8723BU WiFi蓝牙模块

    iMX6ULL RTL8723BU WiFi蓝牙模块 1. 介绍 2. 配置Linux内核 2.1 配置支持USB 设备 2.2 配置支持WiFi设备 2.3 配置支持IEEE 802.11 2.4 ...

  2. 超高性价比WiFi蓝牙模块大合集

    无线技术的不断成熟,对物联网的发展起着至关重要的作用,实现"万物互联.物物互联"变得更加轻松.安全.蓝牙技术和WiFi技术都属于无线通信网络标准,可以实现无线段距离联络,并且都工作 ...

  3. Qualcomm QCA9379无线WiFi/蓝牙模块芯片参数介绍

    QCA9379将先进的2x2双频802.11acMU-MIMO WiFi蓝牙4.2结合在一块高性能.小形状的片上系统(SoC)中.支持增强的WiFi/Bluetooth与蓝牙专用(第三个)天线共存. ...

  4. RK35XX系列(RK3568)移植 AP62XX (ap6256)wifi 蓝牙模块

    Ubuntu:22.04 wsl SOC:RK3568 模块:AP6256 首先我的wifi模块VDDIO 是由VCCIO4 提供的1.8V电压,设备树要配 贴上我的dts //*********** ...

  5. RTL8723BU wifi 及 热点移植和测试

    基于realtek  RTL8723DU/RTL8723BU "RTL8723BU_WiFi_linux_v4.4.2_18635_BTCOEX20151228-664a.20161006& ...

  6. WIFI/蓝牙模块 RLT8723bu 扫描蓝牙设备出现信号断链问题

    前言: BUG情况简述 安装测试apk-->nRF Master Control Panel.apk 发现测试信号强弱时候,竟然出现信号断链问题,情况如下图: 1.查看模块版本信息: # cat ...

  7. RK3288 Android5.1 RTL8723DS WIFI/BT模块移植 以及AP6XXX模块与RTL8723DS模块做兼容

    一.rk3288 android5.1 rtl8723ds移植 瑞芯微对RK3288 Android7.1的SDK已经集成了RTL8723DS的模块并做了wifi模块的兼容,但是android5.1并 ...

  8. AP6212WIFI蓝牙模块移植过程

    一.AP6212模块简介 特性 802.11b/g/n single-band radio Bluetooth V4.0(HS)with integrated Class 1.5PAandLow En ...

  9. 智能物联网有哪些应用场景?_串口WiFi模块,蓝牙模块,WiFi+蓝牙组合模块

    文章目录 前言 一.智能家居 二.智能交通 三.智慧农业 四.智能制造 五.智慧物流 六.智慧能源 七.智能医疗 八.智能安防 九.智慧建筑 十.智能零售 无线模块及应用方案 前言 物联网从萌芽到彷徨 ...

最新文章

  1. Java 计算学生的考试成绩
  2. 简化软件产品的实际步骤
  3. linkbot 中文教程系列 linkbot破解教程
  4. android教程1009无标题,Android ActionBarActivity设置全屏无标题实现方法总结_Android_脚本之家...
  5. 人与自然蠓的故事-上好像以前播过!
  6. 管理新语:会议与问题的关系
  7. SHELL中函数的写法、调用、参数、返回值代码范例
  8. hdu 二分图最大匹配问题 (hdu 1083)
  9. Linux网络操作系统及应用教程(项目式)项目四
  10. PCB Layout
  11. 对称密码 -- 工作模式总结 GCM CCM OCB
  12. 波形发生器c语言编程,C语言_源代码-波形发生器_程序清单.doc
  13. CITA v0.15 Release
  14. 2014阿里巴巴实习生招聘-研发工程师笔试题/网络编程小结
  15. 三星手机大量死机!我反编译折腾半天后,发现竟然一个汉字引发的....
  16. 一张图解决为什么校外访问不了学校购买的中国知网
  17. 电脑安装android4.0虚拟机,尝鲜Android 4.0 PC端虚拟机安装指南
  18. 360浏览器怎么导入html,360浏览器收藏夹导入/导出方法详解
  19. 【面试技巧】你对我们公司了解多少
  20. iOS 获取网络时间

热门文章

  1. ArcBlock ⑫ 月报 | ABT 平台正式对外开放 2019年产品路线图亮相
  2. ildasm.exe 查看c# dll 信息,符号 、函数等等
  3. ddt python_python——ddt问题总结
  4. 使用 AirPlay 发送图片
  5. Windows装机必备搜索工具Search Everything
  6. PDMan 连接数据库报spawn xxxx ENOENT
  7. 企业信息化系统建设方案
  8. 记一次愚蠢的失误,centos cpu满载但单进程cpu占用很低
  9. JavaScript分页插件
  10. TIOBE 6月编程语言排行榜:C语言仍为榜首,Java紧随其后!