Loading...
首页专栏正文

Hi3516A-WiFi使用

ezreal_cs 发布于 2020-06-16 15:55:52 浏览 2440 点赞 0 收藏 0

Hi3516A-WiFi使用

[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 加载驱动

  1. 加载驱动

    insmod cfg80211.ko 
    insmod rtl8188eu.ko 
  2. 查看驱动是否加载成功

    ifconfig -a

    如果看到有一个 wlan0 网口,那说明驱动已经初始化成功,WiFi 设备可用。

  3. 启动网卡

    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 等协议。

  1. 启动 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步骤

  1. 启动 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。

  2. 扫描

    在“>”后执行“scan”命令,收到“CTRL-EVENT-SCAN-RESULTS”后再执行“scan_results”,会获得扫描结果。

  3. 连接

    在“>”后执行“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”表示连接成功

  4. 获取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 3600

default.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

*本文仅代表作者观点,不代表易百纳技术社区立场。系作者授权易百纳技术社区发表,未经许可不得转载。

打赏
打赏作者
ezreal_cs
您的支持将鼓励我继续创作!
金额:
¥1 ¥5 ¥10 ¥50 ¥100
支付方式:
微信支付
支付宝支付
微信支付
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

易百纳技术社区
确定要删除此文章、专栏、评论吗?
确定
取消
易百纳技术社区