imx6ull wifi网卡移植
rtl8723bu 是一款常用的 wifi 模组,一般情况 wifi 模组作为网卡要么使用 SDIO 接口,要么使用 USB 接口,此处 rtl8723bu 使用 USB 接口,一下内容是针对 usb接口下的wifi网卡移植流程。
驱动源码修改
rtl8723bu 驱动源码解压后放到 Linux 内核 drivers/net/wireless 目录,重命名为 rtl8723bu。
makefile 修改
- 修改 rtl8723bu 下顶层 makefile 文件如下:
# 修改顶层路径
#export TopDIR ?= $(shell pwd)
export TopDIR ?= $(shell pwd)/drivers/net/wireless/rtl8723bu
# 增加 IMX6ULL 平台
###################### Platform Related #######################
CONFIG_PLATFORM_IMX6ULL=y
CONFIG_PLATFORM_I386_PC = n
# 增加 IMX6ULL 平台相关编译参数
ifeq ($(CONFIG_PLATFORM_I386_PC), y)
....
endif
ifeq ($(CONFIG_PLATFORM_IMX6ULL), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS+= -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
EXTRA_CFLAGS += -DCONFIG_P2P_IPS
ARCH := arm
CROSS_COMPILE := arm-linux-gnueabihf-
KSRC := /home/ubuuntu/share/imx6ull/linux-imx-4.1.5
MODULE_NAME := 8723bu
endif
- 修改 drivers/net/wireless/Makefile 用于编译,修改如下:
obj-$(CONFIG_RTL8723BU) += rtl8723bu/
Kconfig 修改
修改 drivers/net/wireless/Kconfig 用于图形化配置,修改如下:
# 在文件尾部增加
source "drivers/net/wireless/rtl8723bu/Kconfig"
内核配置修改
使用图形化配置界面配置如下选项:
make menuconfig
# usb配置
Device Drivers --->
-> [*] USB support
-> <*> Support for Host-side USB
-> <*> EHCI HCD (USB 2.0) support
-> <*> ChipIdea Highspeed Dual Role Controller
-> [*] ChipIdea device controller
-> [*] ChipIdea host controller
# wifi配置
Device Drivers --->
-> [*] Network device support
-> [*] Wireless LAN
-> <*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
-> [*] Support downloading firmware images with Host AP driver
-> [*] Support for non-volatile firmware download
-> <*> Realtek 8723B USB WiFi
# IEEE 802.11配置
[*] Networking support --->
-> -*- Wireless --->
-> <*> cfg80211 - wireless configuration API
-> [*] cfg80211 wireless extensions compatibility
-> <*> Generic IEEE 802.11 Networking Stack (mac80211)
图形化配置完成后在 .config 中增加 CONFIG_RFKILL=y ,然后重新编译内核并烧录
make imx_topeet_emmc_mfg_defconfig
make -j16
烧录启动后,出现如上打印,表示驱动移植正常,ifconfig -a 后出现 wlan0 和 wlan1,wlan0用于station模式,wlan1用于AP模式
ifconfig -a
wireless tools 移植
wireless tools 是 Linux 下无线WIFI 的管理工具集合,使用这个工具可以进行如下操作:
-
iwconfig:设置无线网络相关参数
-
iwlist:扫描当前无线网络信息,获取 WIFI热点
-
iwspy:获取每个节点链接的质量
解压 wireless-tools.zip 后将源码拷贝到编译内核的 ubuntu 环境下进行交叉编译,目录不限,然后打开Makefile 文件修改文件中的CC、AR 和RANLIB 这三个变量:
## Compiler to use (modify this for cross compile).
CC = arm-linux-gnueabihf-gcc
## Other tools you need to modify for cross compile (static lib only).
AR = arm-linux-gnueabihf-ar
RANLIB = arm-linux-gnueabihf-ranlib
然后使用如下命令进行编译:
make clean
make -j8
然后在将 iwlist、iwconfig、iwspy、iwpriv、ifrename 这5 个工具通过 tftp 拷贝到开发板上的 /usr/bin,另外把依赖的动态库 libiw.so.29 拷贝到开发板上的 /usr/lib 中。
先通过如下命令开启无线网卡:
# 查看可用无线网卡
iw dev
# 开启/关闭网卡
ifconfig wlan0 up/down
ifconfig wlan1 up/down
# 检查无线网卡的状态
ip link show wlwan0
ip link show wlwan0
然后输入就可以正常使用 iw* 系列工具了。
还有一种更简单的移植工具的方法,就是在通过 buildtools 工具制作根文件系统时直接在第三方库中选择 wireless-tools 工具,这种方式什么都不用修改,而且也避免了 tftp 拷贝到根目录的麻烦
wpa_supplicant 移植
wpa_supplicant 是一个连接、配置WIFI的工具,它主要包含 wpa_supplicant 与 wpa_cli 两个程序,pa_supplicant 是核心程序,它和 wpa_cli 的关系就是服务和客户端的关系,后台运行 wpa_supplicant,使用 wpa_cli 来搜索、设置、和连接网络。
- 手动编译
一个是自己下载软件包和相关依赖,使用编译内核的编译链进行编译,编译通过后把相关的软件和动态库想办法拷贝到开发板上的相关目录(比较麻烦,而且每次重新编译内核后又需要重新拷贝)。
- buildtools 编译
通过 buildtools 工具制作根文件系统时直接在第三方库中选择 wpa_supplicant 工具,这种方式什么都不用修改,只要保证网络是通的 就好,而且也避免了 tftp 拷贝到根目录的麻烦;
wifi 联网测试
iw 工具对于不是使用 WEP 加密的AP是无法连接的,所以需要使用 wpa_supplicant 工具进行网络连接。
配置 AP 的 SSID 和 psk
在开发板Linux 的 ** /etc** 目录下创建一个 wpa_supplicant.conf,并填写AP信息
vi /etc/wpa_supplicant.conf
填写如下内容:
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="TP-LINK_187A"
psk="12345678"
}
在开发板 Linux 环境下创建一个 /var/run/wpa_supplicant 目录,启动 wpa_supplicant 工具是会在此目录存放无线网卡信息:
mkdir /var/run/wpa_supplicant -p
无线网卡测试
# 启动 wlan0 网卡
ifconfig wlan0 up
# 连接 AP
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf &
# 申请IP地址
udhcpc -i wlan0
# 连接测试
ping www.baidu.com
# 扫描周围热点
wpa_cli -i wlan0 scan
wpa_cli -i wlan0 scan_result
📎rtl8723BU_WiFi_linux_v5.2.17.1_26947.20180307_COEX20180201-6f52.tar.gz.zip
📎wireless-tools.zip