[TOC]
1 Wi-Fi模块简介
由于 Wi-Fi 厂商提供的软件包编译时需要的命令、步骤各不相同,并且每款 Wi-Fi 支持的模式(一般有四种模式,分别是:SoftAP、STA、DIRECT、CONCURRENT)也不同,操作时所需要的工具、命令也存在差异。通过 wifi_project 开发包能够很好的解决上述问题,可以方便调试不同型号的 Wi-Fi。用户使用它不仅可以方便、快速的生成不同型号 Wi-Fi 所需要的驱动、工具等,而且还能够直接增加新的 Wi-Fi 驱动或删除已有的驱动。
通常 Wi-Fi 有四种模式,不同的 Wi-Fi 设备可能支持其中一种或几种模式,四种模式如下 :
SoftAP:access point,一种将无线设备连接到一个网络的设备,可以理解为无线路由。 STA:station,无线设备客户端,必须连接上一个 AP 才能使用。 DIRECT:Wi-Fi 直连,也称 p2p 模式。 CONCURRENT:同时支持 AP、STA 两种模式。Hi3516AV100_wifi_project 开发包中支持五款 Wi-Fi,分别是 Atheros ar6302、 Realtek rtl8189es、Ampak ap6181(Broadcom BCM43362 模组)、 Realtek rtl8188eus 和 Mediatek mt7601u。其中 rtl8188eus 和 mt7601u 为 USB 接口,ar6302、 rtl8189es 和 ap6181 为 SDIO 接口。Hi3516AV100_wifi_project 开发包仅支持 SoftAP 和 STA 模式。
Hi3519V101_wifi_project 开发包中支持这几款 Wi-Fi,分别是 Realtek rtl8188ftv、Realtek rtl8188eus、Realtek rtl8189ftv、Mediatek mt7601u、Ampak ap6181(Broadcom BCM43362模组)、ap6212/ap6212a/ap6214a(Broadcom BCM43438 模组)和 ap6255(BroadcomBCM43455 模组)。其中 rtl8188ftv、rtl8188eus 和 mt7601u 为 USB 接口, rtl8189ftv、ap6181、ap6212、ap6212a、ap6214a、ap6255 为 SDIO 接口。Hi3519V101_wifi_project 开发包仅支持 SoftAP 和 STA 模式。
说明:本文以Hi3516AV100为例,未有特殊说明,Hi3559V100、Hi3556V100、Hi3516CV300、Hi3516AV200 、Hi3519V101和 Hi3516AV100完全一致。
2 内核配置
2.1 配置CFG80211
CFG80211 是内核中 WiFi 驱动和用户态进程的标准接口,在 CFG80211 出现之前是WEXT,现在越来越多的使用CFG80211,WiFi Direct 功能只有 CFG80211 才支持。进入 Network support->Wireless,设置 cfg80211和mac80211 为 M,如图 2-1 所示。
图2-1 CFG80211 配置
2.2 配置 Wireless Extension
WEXT 是内核中 WiFi 驱动和用户态进程的标准接口,调试工具 iwconfig、iwlist、iwpriv 需要使用该接口。如果没有配置改接口,有些驱动会有编译错误。
WEXT 在内核配置中没有单独的配置项,只能通过打开依赖它的配置项来间接打开。配置了 CFG80211 后,进入 Device Drivers->Network device support->WirelessLAN,设置 USB ZD1201 based Wireless device support 为 M。如图 2-2 所示。
图2-2 Wireless Extension 配置
如果找不到这项配置,需要先配置好 USB 再来配置该选项。
3 wifi_project开发包编译
3.1 修改Makefile
wifi_project 在编译前需要配置交叉编译环境,修改顶层 Makefile 中的WIFI_DEVICE、 CROSS_COMPILE 和 KERNEL。
交叉编译工具链
默认如下,无需修改
ARCH := arm
CROSS_COMPILE := arm-hisiv300-linux-
WIFI_DEVICE
修改为实际使用的Wi-Fi设备
WIFI_DEVICE := usb_rtl8188eus
KERNEL
编译 Wi-Fi 驱动时所指定的内核路径,在编译 Wi-Fi 驱动时,必须指定内核路径,注意内核一定要已经编译过的 。
如: KERNEL := /opt/Hi3516A_SDK_V1.0.5.0/osdrv/opensource/kernel/linux-3.4.y 配置完后就可以进行编译了,在 wifi_project 目录下执行 make all,会自动编译驱动和工具, make driver 只编译驱动, make tools 只编译工具。
生成的驱动放在 wifi_project/tmp/kmod 目录下,工具放在 wifi_project/tmp/tools 目录下,主要包括 iwconfig、 iwlist、 iwpriv、 wpa_cli、 wpa_supplicant、 hostapd 等。
3.2 错误解决
make driver时,出现*/work/hi3516a/git/kernel不存在,需要修改rtl8188EUS目录下的Makefile文件,
将KSRC := ~/work/hi3516a/git/kernel的路径更改为实际内核路径。
make tools时,出现
POD document had syntax errors at /usr/bin/pod2man line 68
.
make: *** [install_docs] 错误 255原因分析:这是由于OpenSSL 1.0.1e 与 perl5.18 不兼容。
打开/usr/bin/pod2man 注释掉 第68行 ,然后再编译即可。编译通过后可将文件修改回来。
4 载入文件
4.1 载入驱动文件
编译后驱动会生成在 wifi_project/out/kmod 目录下,拷贝所需的驱动到单板中。各个 WiFi 的驱动文件如下:
mt7601u
cfg80211.ko、mtprealloc.ko、mt7601Usta.ko
rtl8188ftv
cfg80211.ko、8188fu.ko
rtl8188eus
cfg80211.ko、8188eu.ko
rtl8189ftv
cfg80211.ko、8189fs.ko
ap6181/ap6212/ap6212a/ap6214a/ap6255
cfg80211.ko、bcmdhd.ko
cfg80211.ko 文件请在 kernel 的 net/wireless 目录下拷贝。
说明:驱动在单板上的目录不重要,比如可以放在/kmod 目录
4.2 载入工具
将 wifi_project/out/lib 目录下的 libnl-genl.so.2.0.0、libnl.so.2.0.0 拷贝到单板的/lib
目录。进入单板/lib 目录,创建这两个文件的软链接:
ln –s libnl-genl.so.2.0.0 libnl-genl.so.2
ln –s libnl.so.2.0.0 libnl.so.2拷贝 wifi_project/out/tools 目录下的 iwconfig、iwlist、iwpriv、iperf 拷贝到单板的
/usr/sbin 目录下。这几个是调试工具,实际使用时可以不用拷贝这几个文件。STA 模式需要将 wifi_project/tmp/tools 目录下的 wpa_supplicant、 wpa_cli 拷贝到单板的
/usr/sbin 目录下。 AP 模式需要将 wifi_project/tmp/tools 目录下的 hostapd 拷贝到单板的/usr/sbin
目录下4.3 wpa_supplicant.conf 文件
wpa_supplicant.conf 是启动 wpa_supplicant 进程时需要使用到的配置文件。可以在单板
上新建一个,目录不重要,比如放在/etc/wireless 目录下。文件内容如下: ctrl_interface=/var/run/wpa_supplicant update_config=1 network={ ssid=”CMCC” key_mgmt=WPA-PSK proto=RSN WPA WPA2 pairwise=TKIP CCMP group=TKIP CCMP psk=”12345678″ }此处设置了一个默认连接的账号CMCC和密码12345678。
4.4 hostapd.conf 文件
hostapd.conf 是启动 hostapd 进程时需要使用到的配置文件。可以在单板上新建一个,
目录不重要,比如放在/etc/wireless 目录下。文件内容请参考 hostapd 配置和启动
SoftAP。 interface=wlan0 ctrl_interface=/var/run/hostapd ssid=wifi_def_name channel=6 wpa=2 wpa_passphrase=87654321此处设置了wif_def_name的密码为87654321
5 STA模式连接操作
5.1 加载驱动
加载驱动
insmod cfg80211.ko insmod rtl8188eu.ko查看驱动是否加载成功
ifconfig -a如果看到有一个 wlan0 网口,那说明驱动已经初始化成功,WiFi 设备可用。
启动网卡
ifconfig wlan0 up执行完后,WiFi 是可用状态,可以进行扫描和连接操作了 。
5.2 扫描AP
iwlist wlan0 scan使用 iwlist 进行扫描时,iwlist 不会等驱动扫描完所有信道才返回扫描结果,所以经常
会出现有些 AP 没有搜出来的情况,尤其是 MT7601U,由于在每个信道上停留的时间
较长,所以第一次扫描时,只能搜到 1~2 个信道里的 AP。5.3 连接AP
连接 AP 是通过 wpa_supplicant 进程进行的。wpa_supplicant 是开源代码,Linux、
Android 都是采用它负责 WiFi 的连接过程,它包含了 WEP、WPA/WPA2、WPAPSK/WPA2-PSK、WAPI、WPS、P2P、EAP 等协议。启动 wpa_supplicant 进程 ;
wpa_supplicant –iwlan0 –Dnl80211 –c/etc/wireless/wpa_supplicant.conf&-iwlan0 表示使用 wlan0 网口;
-Dnl80211 表示使用 cfg80211 接口(用户态的接口是 libnl,内核中是 cfg80211),另外一个可选的是—Dwext,表示使用 wext 接口,mt7601u 需要使用-Dwext;
-c/etc/Wireless/wpa_supplicant.conf 是 wpa_supplicant 的配置文件,要保证该文件已经存在。
执行完后,用 ps 命令查看一下 wpa_supplicant 进程是否存在,存在表示工作正常。
若存在wpa_supplicant.conf中配置的默认wifi则会自动连接,可直接跳至第5步骤
启动 wpa_cli 进程
wpa_cli –iwlan0执行成功会出现“>”符号。
如果出现“Could not connect to wpa_supplicant – re-trying”,那表示 wpa_cli 不能和wpa_supplicant 建立 socket 连接,这时要检查 wpa_supplicant 进程是否还在,再看是否有/var/run/wpa_supplicant/wlan0,然后检查 wpa_supplicant.conf 文件中是否是ctrl_interface=/var/run/wpa_supplicant。扫描
在“>”后执行“scan”命令,收到“CTRL-EVENT-SCAN-RESULTS”后再执行“scan_results”,会获得扫描结果。
连接
在“>”后执行“add_network”,假如返回网络 ID 为 0。
配置网络的 SSID,执行 set_network 0 ssid “AP 的 SSID”
配置网络的加密方式,执行“set_network 0 psk “AP 的密码””。
(若无密码,执行“set_network 0 key_mgmt NONE”)
启动网络,执行“select_network 0”。
收到“CTRL-EVENT-CONNECTED”表示连接成功
获取IP地址
udhcpc –i wlan0具体配置见udhcpc的client使用
获取了 IP 地址后,可以 ping 网关看是否能 ping 通 。
6. SoftAP模式基本启动操作
6.1 加载驱动
加载驱动的方法和 STA 模式一样
6.2 启动SoftAP
hostapd /etc/wireless/hostapd.conf &执行完后,用 ps 命令查看一下hostapd进程是否存在,存在表示工作正常,用 STA 设备可以搜索到 SoftAP。
说明,此处使用的hostapd.conf是之前配置好的。
6.3 开启udhcpd的server
ifconfig wlan0 192.168.2.1 udhcpd –fS /etc/udhcpd.conf &请确保/etc/udhcpd.conf 文件存在,并且配置的网段为 192.168.2.x。执行完后,用 STA设备可以扫描和连接该 SoftAP,如果能成功连接且 ping 通网关表示此 AP 配置成功。
7. udhcpc
7.1 client使用
udhcpc命令可以自动获取ip并设置网关,但是若在没有/usr/share/udhcpc/default.script文件的情况下,着只能看到获取的IP以及租赁时间。
udhcpc -i wlan0成功的打印信息
Sending discover…
Sending select for 192.168.43.183…
Lease of 192.168.43.183 obtained, lease time 3600
Setting IP address 192.168.43.183 on wlan0
Deleting routers
route: SIOCDELRT: No such process
Adding router 192.168.43.1
Recreating /etc/resolv.conf
Adding DNS server 192.168.43.1没有default.script文件的打印信息
Sending discover…
Sending select for 192.168.43.183…
Lease of 192.168.43.183 obtained, lease time 3600default.script文件是将busybox中/busybox/examples/udhcp/simple.script文件复制过来即可。
7.2 server使用
使用uhdcpd前需要修改/etc/init.d/rcS,创建udhcpd.leases文件
mkdir -p /var/lib/misc touch /var/lib/misc/udhcpd.leases然后配置udhcpd.conf文件,udhcpd 唯一的命令行参数是一个可选的指定配置文件。如果没有指定配置文件,则udhcpd使用默认配置文件/etc/udhcpd.conf。
udhcpd.conf文件是将busybox中/busybox/examples/udhcp/udhcpd.conf文件复制过来,
修改地址池的网段为自己所需要的网段即可。
# The start and end of the IP lease block start 192.168.2.2 #default: 192.168.0.20 end 192.168.2.254 #default: 192.168.0.254运行udhcpd,默认后台运行
udhcpd免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:Hi3516A-WiFi使用 https://www.yhzz.com.cn/a/19948.html