正基WiFi模块STA模式基本操作示例(2)

接上一篇文章!
4. STA 模式基本操作示例
4-1 加载驱动
步骤 1. 加载驱动。
ap6181/ap6212/ap6212a/ap6214a/ap6255
himm 0x100d0004 0x1
himm 0x12098034 0x10101070
insmod cfg80211.ko
insmod bcmdhd.ko firmware_path=/etc/firmware/fw_bcm40181a2.bin
nvram_path=/etc/firmware/nvram.txt dhd_oob_gpio_base=0x1214d000
dhd_oob_gpio_num=0 dhd_oob_irq_num=76 sdio_slot=1
himm 0x12098034 0x10101050
himm 0x12098034 0x10101070

第一行命令是给 SDIO 控制器上电,地址为 WiFi 模块对接的 SDIO 端口所对应的控制器地址;第二行是将 WL_REG_ON 拉高给 WiFi 上电,WL_REG_ON 连接的GPIO 不同,地址和值也不同,上例 WL_REG_ON 连接在 PER_EN1 上,请根据用户指南修改;第四行命令是加载 WiFi 驱动,其中:
− dhd_oob_gpio_base 和 dhd_oob_gpio_num 是配置 OOB 管脚,上例为
GPIO13_0,oob_gpio_base=0x1214d000 设置 GPIO13 的基地址,基地址从用户指南中查找,dhd_oob_gpio_num 设置偏移为 0;
− dhd_oob_irq_num 为 OOB GPIO 的中断号,请从用户指南中查找;
− sdio_slot 是 WiFi 对接的 SDIO 端口号。
第五、六行是将 WL_REG_ON 拉底再拉高,复位 WiFi。
步骤 2. 查看驱动是否加载成功。
执行 shell 命令:
iwconfig
如果看到有一个 wlan0 网口,那说明驱动已经初始化成功,WiFi 设备可用。
图3-1 iwconfig 执行结果
在这里插入图片描述
步骤 3. 启动 WiFi 网口。
执行 shell 命令:
ifconfig wlan0 up
执行完后,WiFi 是可用状态,可以进行扫描和连接操作了。
----结束
3.2 扫描 AP
执行 shell 命令:
iwlist wlan0 scan
图3-2 扫描 AP 执行结果
在这里插入图片描述
扫描到的 AP 会以“Cell xx”的形式显示,一个 AP 对应一个“Cell xx”。
每个 AP 的信息包括: 
Address:MAC 地址。
ESSID:AP 的名称,即 SSID。 
Protocol:IEEE80211 协议,11b/g/n。 
Frequency:信道。 
认证加密信息:WEP、WPA-PSK、WPA2-PSK、WPA、WPA2。  Quality:信号质量,该数据有些 WiFi 显示得不准确,可以忽略。  Signal Level:信号强度,数字越大,信号强度越高,WiFi 芯片不同,显示的方式有些区别,有的是以 xx/100 类型显示,有的是以 xx dBm 显示。
上述信息并不是所有 WiFi 都是以这种格式显示,WiFi 不同显示的格式也不一样。

注意
使用 iwlist 进行扫描时,iwlist 不会等驱动扫描完所有信道才返回扫描结果,所以经常会出现有些 AP 没有搜出来的情况,尤其是MT7601U,由于在每个信道上停留的时间较长,所以第一次扫描时,只能搜到 1~2 个信道里的 AP。

3.3 连接 AP
连接 AP 是通过 wpa_supplicant 进程进行的。wpa_supplicant 是开源代码,Linux、Android 都是采用它负责 WiFi 的连接过程,它包含了 WEP、WPA/WPA2、WPAPSK/WPA2-PSK、WAPI、WPS、P2P、EAP 等协议。
步骤 1. 启动 wpa_supplicant 进程。
执行 shell 命令:
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 进程,可以增加wpa_supplicant 的打印级别,从 log 看出现什么问题,如:
wpa_supplicant –iwlan0 –Dnl80211 c/etc/Wireless/wpa_supplicant.conf –ddd &
步骤 2. 启动 wpa_cli 进程。
执行 shell 命令:
wpa_cli –iwlan0 –p/var/wpa_supplicant
执行成功会出现“>”符号。
如果出现“Could not connect to wpa_supplicant - re-trying”,那表示 wpa_cli 不能和wpa_supplicant 建立 socket 连接,这时要检查 wpa_supplicant 进程是否还在,再看是否有/var/wpa_supplicant/wlan0,然后检查 wpa_supplicant.conf 文件中是否是
ctrl_interface=/var/wpa_supplicant。
步骤 3. 扫描。
在“>”后执行“scan”命令,收到“CTRL-EVENT-SCAN-RESULTS”后再执行 “scan_results”,会获得扫描结果。
图3-3 wpa_cli 扫描 AP 结果
在这里插入图片描述
步骤 4. 连接。
连接 OPEN 方式的 AP:
a. 在“>”后执行 add_network,假如返回网络 ID 为 0。
b. 配置网络的 SSID,执行 set_network 0 ssid“AP 的 SSID”。
c. 配置网络的加密方式,执行 set_network 0 key_mgmt NONE。
d. 启动网络,执行 select_network 0。
e. 收到 CTRL-EVENT-CONNECTED 表示连接成功。
图3-4 连接 AP
在这里插入图片描述
连接 WPA-PSK/WPA2-PSK 方式的 AP:
在“>”后执行 add_network,假如返回网络 ID 为 0。
 配置网络的 SSID,执行 set_network 0 ssid“AP 的 SSID”。
 配置网络的加密方式,执行 set_network 0 psk“AP 的密码”。  启动网络,执行 select_network 0。
 收到 CTRL-EVENT-CONNECTED 表示连接成功。
 Broadcom 的 WiFi 还可以通过 wl 工具进行扫描和连接,连接方法请参考 sample 和wl 的 help 信息。
步骤 5. 获取 IP 地址。
输入 q 退出 wpa_cli,执行 shell 命令:
udhcpc –i wlan0
配置了 IP 地址后,可以 ping 网关看是否能 ping 通。
----结束
3.4 卸载驱动
ap6181/ap6212/ap6212a/ap6214a/ap6255
ifconfig wlan0 down
rmmod bcmdhd.ko
rmmod cfg80211.ko

4 .SoftAP 模式基本操作示例
4.1 检查 WiFi 设备、加载驱动
ap6181/ap6212/ap6212a/ap6214a/ap6255 用的 firmware 和 STA 模式不一样,如下:
himm 0x100d0004 0x1
himm 0x12098034 0x10101070
insmod cfg80211.ko
insmod bcmdhd.ko firmware_path=/etc/firmware/fw_bcm40181a2_apsta.bin
nvram_path=/etc/firmware/nvram.txt dhd_oob_gpio_base=0x1214d000
dhd_oob_gpio_num=0 dhd_oob_irq_num=76 sdio_slot=1
himm 0x12098034 0x10101050
himm 0x12098034 0x10101070
4.2 hostapd 配置和启动 SoftAP
配置 SoftAP 是通过 hostapd 进行的。hostapd 和 wpa_supplicant 类似,它包含了 AP 端的各种认证协议、连接流程,wpa_supplicant 是 STA 端的。
步骤 1. 修改 hostapd.conf 文件。
hostapd 进程需要使用 hostapd.conf 配置文件,在配置文件里设置 SSID、信道、加密方式等。配置文件的内容举例如下:
 OPEN
interface=wlan0
driver=nl80211
ctrl_interface=/var/hostapd
ssid=HisiAP
channel=6
hw_mode=g
ieee80211n=1
ht_capab=[SHORT-GI-20][SHORT-GI-40][HT40-]
 WPA2-PSK
interface=wlan0
driver=nl80211
ctrl_interface=/var/hostapd
ssid=HisiAP
channel=6
hw_mode=g
ieee80211n=1
ht_capab=[SHORT-GI-20][SHORT-GI-40][HT40-]
wpa=3
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
wpa_passphrase=12345678
hostapd 是开源代码,配置文件中的参数可以参考网络资源。
ht_capab 可以配置是否支持 40M 带宽,带有[SHORT-GI-40][HT40-]或者[SHORT-GI-
40][HT40+]即支持 40M 带宽。当 channel 小于 6 时,用[SHORT-GI-40][HT40+],当
channel 大于等于 6 时,用[SHORT-GI-40][HT40-]。
mt7601u、ap6181、ap6212、ap6212a、ap6214a、ap6255 的 SoftAP 模式不支持 40M 带 宽,所以 ht_capab 设置如下:
ht_capab=[SHORT-GI-20]
步骤 2. 启动 hostapd 进程。
执行 Shell 命令:
hostapd -e /etc/Wireless/entropy.bin /etc/Wireless/hostapd.conf &
执行完后,用 ps 命令查看一下 hostapd 进程是否存在,存在表示工作正常,用 STA 设 备可以搜索到 SoftAP。如果没有,可以增加 hostapd 的打印级别,从 log 看出现什么问题,如:
hostapd -e /etc/Wireless/entropy.bin –ddd /etc/Wireless/hostapd.conf &
----结束
Broadcom 的 WiFi 还可以通过 wl 工具进行配置,配置方法请参考 sample 和 wl 的 help信息。
4.3 开启 udhcpd
执行 Shell 命令:
ifconfig wlan0 192.168.1.1
busybox udhcpd –fS /etc/Wireless/udhcpd.conf
请确保/etc/Wireless/udhcpd.conf 文件存在,并且配置的网段为 192.168.1.x。执行完后, 用 STA 设备可以扫描和连接该 SoftAP,如果能成功连接且 ping 通网关表示此 AP 配置成功。
4.4 卸载驱动
卸载驱动的方法和 STA 模式一样。
4.5适配国家或区域
不同的国家或区域,采用的频率范围有些不同,比如 2.4GHz 频段,美国支持 1~11 信 道,中国和欧洲支持 1~13 信道,日本支持 1~14 信道。5GHz 频段也类似。WiFi 需要根据产品上市的国家或区域做相应的配置,以适用于该国家的频率范围。

原创文章 19 获赞 3 访问量 6018

猜你喜欢

转载自blog.csdn.net/ShiLianXin/article/details/105074876