RTL8723BU WiFi—蓝牙 模块移植
硬件: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—蓝牙 模块移植相关推荐
- iMX6ULL RTL8723BU WiFi蓝牙模块
iMX6ULL RTL8723BU WiFi蓝牙模块 1. 介绍 2. 配置Linux内核 2.1 配置支持USB 设备 2.2 配置支持WiFi设备 2.3 配置支持IEEE 802.11 2.4 ...
- 超高性价比WiFi蓝牙模块大合集
无线技术的不断成熟,对物联网的发展起着至关重要的作用,实现"万物互联.物物互联"变得更加轻松.安全.蓝牙技术和WiFi技术都属于无线通信网络标准,可以实现无线段距离联络,并且都工作 ...
- Qualcomm QCA9379无线WiFi/蓝牙模块芯片参数介绍
QCA9379将先进的2x2双频802.11acMU-MIMO WiFi蓝牙4.2结合在一块高性能.小形状的片上系统(SoC)中.支持增强的WiFi/Bluetooth与蓝牙专用(第三个)天线共存. ...
- RK35XX系列(RK3568)移植 AP62XX (ap6256)wifi 蓝牙模块
Ubuntu:22.04 wsl SOC:RK3568 模块:AP6256 首先我的wifi模块VDDIO 是由VCCIO4 提供的1.8V电压,设备树要配 贴上我的dts //*********** ...
- RTL8723BU wifi 及 热点移植和测试
基于realtek RTL8723DU/RTL8723BU "RTL8723BU_WiFi_linux_v4.4.2_18635_BTCOEX20151228-664a.20161006& ...
- WIFI/蓝牙模块 RLT8723bu 扫描蓝牙设备出现信号断链问题
前言: BUG情况简述 安装测试apk-->nRF Master Control Panel.apk 发现测试信号强弱时候,竟然出现信号断链问题,情况如下图: 1.查看模块版本信息: # cat ...
- RK3288 Android5.1 RTL8723DS WIFI/BT模块移植 以及AP6XXX模块与RTL8723DS模块做兼容
一.rk3288 android5.1 rtl8723ds移植 瑞芯微对RK3288 Android7.1的SDK已经集成了RTL8723DS的模块并做了wifi模块的兼容,但是android5.1并 ...
- AP6212WIFI蓝牙模块移植过程
一.AP6212模块简介 特性 802.11b/g/n single-band radio Bluetooth V4.0(HS)with integrated Class 1.5PAandLow En ...
- 智能物联网有哪些应用场景?_串口WiFi模块,蓝牙模块,WiFi+蓝牙组合模块
文章目录 前言 一.智能家居 二.智能交通 三.智慧农业 四.智能制造 五.智慧物流 六.智慧能源 七.智能医疗 八.智能安防 九.智慧建筑 十.智能零售 无线模块及应用方案 前言 物联网从萌芽到彷徨 ...
最新文章
- Java 计算学生的考试成绩
- 简化软件产品的实际步骤
- linkbot 中文教程系列 linkbot破解教程
- android教程1009无标题,Android ActionBarActivity设置全屏无标题实现方法总结_Android_脚本之家...
- 人与自然蠓的故事-上好像以前播过!
- 管理新语:会议与问题的关系
- SHELL中函数的写法、调用、参数、返回值代码范例
- hdu 二分图最大匹配问题 (hdu 1083)
- Linux网络操作系统及应用教程(项目式)项目四
- PCB Layout
- 对称密码 -- 工作模式总结 GCM CCM OCB
- 波形发生器c语言编程,C语言_源代码-波形发生器_程序清单.doc
- CITA v0.15 Release
- 2014阿里巴巴实习生招聘-研发工程师笔试题/网络编程小结
- 三星手机大量死机!我反编译折腾半天后,发现竟然一个汉字引发的....
- 一张图解决为什么校外访问不了学校购买的中国知网
- 电脑安装android4.0虚拟机,尝鲜Android 4.0 PC端虚拟机安装指南
- 360浏览器怎么导入html,360浏览器收藏夹导入/导出方法详解
- 【面试技巧】你对我们公司了解多少
- iOS 获取网络时间