记录一下如何使用wpa_cli来进行wifi调试。
1、启动WLAN
(1)加载驱动
打开wifi的时候会加载驱动,关闭则会卸载wifi驱动。手动调试的时候,先调用insmod/rmmod命令加载/卸载指定的wifi驱动。
再调用iwconfig可以看到驱动是否加载成功,如下,可以看到wlan0已经有了,则驱动加载成功。
// ifconfig -a 查看 //tmp # ifconfig -a lo Link encap:Local Loopback LOOPBACK MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) sit0 Link encap:IPv6-in-IPv4 NOARP MTU:1480 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) wlan0 Link encap:Ethernet HWaddr 00:00:00:00:00:00 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
(2)打开wlan0
ifconfig wlan0 up
2、启动wpa_supplicant
命令如下:可以参考下自己init.xxx.rc是如何配置的,参数可能会不一样。
wpa_supplicant –iwlan0 –Dnl80211 –c 配置文件 &
-i:指定网口;
-D:指定驱动类型;
-c:指定了wpa_supplicant的配置文件。
例如
RDA 512C方案:
wpa_supplicant_8 -iwlan0 -Dwext -c/etc/wpa_supplicant.conf &
配置文件为/etc/wifi/wpa_supplicant.conf,-d参数是打开wpa_supplicant的打印。
配置文件如下:
update_config=1 ctrl_interface=/data/misc/wifi/sockets eapol_version=1 ap_scan=1 fast_reauth=1
ps:如果运行不起来,在已经加载驱动,也已up wlan0的情况下,很可能是/data/misc/wifi/sockets的权限不足,导致无法创建wlan0 socket。
确保wpa_supplicant已经运行起来。
3、启动wpa_cli进入交互模式
wpa_cli -i网口 -p socket所在路径
例如像我刚才那么调用的话,则用下面命令启动:
wpa_cli -iwlan0 -p /data/misc/wifi/sockets/
RDA在/bin目录运行:
wpa_cli_8
进入如下界面则已经可以正常调试了。
/bin # wpa_cli_8 -i wlan0 wpa_cli v0.8.x Copyright (c) 2004-2011, Jouni Malinen <j@w1.fi> and contributors This program is free software. You can distribute it and/or modify it under the terms of the GNU General Public License version 2. Alternatively, this software may be distributed under the terms of the BSD license. See README and COPYING for more details. Selected interface 'wlan0' Interactive mode >
如果一直显示如果出现“Could not connect to wpa_supplicant - re-trying”,那表示 wpa_cli 不能和wpa_supplicant 建立 socket 连接,这时要检查 wpa_supplicant 进程是否还在,还有socket所在路径wlan0是否存在(在我的例子是/data/misc/wifi/sockets/wlan0)。
4、扫描ap
输入scan命令
> scan OK >SCANNING, suspend MSDU transmission ... SYNC - BBP R4 to 20MHz.l MT7601_ChipSwitchChannel: SwitchChannel#1(RF=15, 1T) MT7601_ChipSwitchChannel: SwitchChannel#2(RF=15, 1T) MT7601_ChipSwitchChannel: SwitchChannel#3(RF=15, 1T) SYNC - End of SCAN, restore to 20MHz channel 1, Total BSS[24] SCAN done, resume MSDU transmission ... CNTL - All roaming failed, restore to channel 1, Total BSS[24] ===>rt_ioctl_giwscan. 24(24) BSS returned, data->length = 4082 <3>CTRL-EVENT-SCAN-RESULTS <3>WPS-AP-AVAILABLE TSSI = 0x4F temperature = 0xFFFFFFFB PacketType = 0xBD tx_11g_rate: b Channel PWR + MCS PWR = 22000 TargetPower: 0x2428f(148111) tssi_m_dc: 78 TssiLinear0: 79 TssiDC0: 1 tssi_offset: 0 tssi_offset<<9: 0 TssiSlope: 128 tssi_db: 1209 CurrentPower: 154752 PowerDiff: -6641 final PowerDiff: -2(0xfffffffe) MAC 13b4: 0xc9540029 MT7601AsicTemperatureCompensation::Disable PLL Lock Protect.
查看scan_result结果:
> scan_results bssid / channel / signal level / quality /flags / ssid 20:6b:e7:f2:7a:50 1 -51 99/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] KAHUNA 34:96:72:f1:11:9a 6 -51 99/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] Panelmate b8:f8:83:35:21:e6 6 -51 99/100 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] TP-LINK_YSKJ 0a:d4:0c:c4:be:59 1 -33 100/100 [WPA2-PSK-CCMP][ESS] A_Clair_Cl d4:6a:a8:96:60:40 5 -51 99/100 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] ChinaNet-Rg9G 50:bd:5f:1c:a1:04 11 -61 73/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] kitking_____ fc:3d:93:b4:01:3a 1 -57 83/100 [WPA2-PSK-CCMP][ESS] Xiaomi_Lee 30:fc:68:ed:f4:d9 11 -63 68/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_F4D9 d0:c7:c0:1b:b8:a6 11 -65 63/100 [WPA2-PSK-CCMP][ESS] bc:46:99:e2:b4:b4 1 -65 63/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_B4B4 8c:a6:df:40:35:26 11 -67 57/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_3526 60:b6:17:4d:c8:c8 13 -63 68/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] ChinaNet-PDU9 c4:c7:55:0f:78:43 1 -63 68/100 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] ChinaNet-VUEP a8:6b:7c:41:64:81 1 -69 52/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] jinghua 06:69:68:99:48:d1 6 -69 52/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TPGuest_guest f0:b4:29:d3:68:4f 7 -65 63/100 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] Kitking_01A f4:83:cd:f9:fb:2b 1 -71 47/100 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] TP-LINK_FB2B 24:69:68:99:48:d1 6 -71 47/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_XU b0:e2:e5:c8:4d:fa 7 -67 57/100 [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] ChinaNet-UZah 02:0e:5e:29:77:ce 1 -71 47/100 [WPA2-PSK-TKIP+CCMP][ESS] 60:bb:0c:46:7f:8c 1 -75 37/100 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] ChinaNet-TwnA fa:8f:ca:7e:49:e2 6 -37 100/100 [ESS] Cast-Kitking.m f2:b4:29:d1:68:4f 7 -63 68/100 [WPS][ESS] ____________WiFi_684E 8c:f2:28:68:3c:9e 1 -75 37/100 [ESS] MERCURY_3C9E
5、连接
从扫描结果看KAHUNA这个热点是信号最强的。我们选择连接这个ap。
> add_network 0 > set_network 0 ssid "KAHUNA" OK > set_network 0 key_mgmt WPA-PSK OK > set_network 0 psk "aa6396aa" OK > set_network 0 pairwise CCMP OK > set_network 0 group CCMP OK > set_network 0 proto WPA2 OK > enable_network 0 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>Trying to associate with d4:61:2e:a2:b9:e5 (SSID='HUAWEI G9 Youth' freq=2437 MHz) <3>CTRL-EVENT-STATE-CHANGE id=-1 state=5 BSSID=00:00:00:00:00:00 SSID= <3>CTRL-EVENT-STATE-CHANGE id=1 state=6 BSSID=00:00:00:00:00:00 SSID=HUAWEI G9 Youth <3>Associated with d4:61:2e:a2:b9:e5 <3>CTRL-EVENT-STATE-CHANGE id=1 state=7 BSSID=d4:61:2e:a2:b9:e5 SSID=HUAWEI G9 Youth <3>CTRL-EVENT-STATE-CHANGE id=1 state=8 BSSID=d4:61:2e:a2:b9:e5 SSID=HUAWEI G9 Youth <3>WPA: Key negotiation completed with d4:61:2e:a2:b9:e5 [PTK=CCMP GTK=CCMP] <3>CTRL-EVENT-CONNECTED - Connection to d4:61:2e:a2:b9:e5 completed (auth) [id=1 id_str=] <3>CTRL-EVENT-STATE-CHANGE id=1 state=9 BSSID=d4:61:2e:a2:b9:e5 SSID=HUAWEI G9 Youth
步骤如下:
(1)“add_network”,这里返回网络ID 为 1。
(2) 配置网络的 SSID,执行 set_network 1 ssid AP 的 SSID。
(3)配置网络的加密方式和密码。
(4)启动网络,执行“enable_network 0”。
(5)收到“CTRL-EVENT-CONNECTED”表示连接成功。
6、分配IP
此时已经连接上ap,dhcp分配一个IP即可。
输入 q 退出 wpa_cli,执行命令:udhcpc -i wlan0
此时已经可以ping通了,在Android系统里,还需要设置DNS这些,在Android里,这些流程会有netd来完成,这里就不说了。
简单描述交互模式如下:
insmod mt7601Usta.ko
ifconfig wlan0 up
wpa_supplicant_8 -iwlan0 -Dwext -c/etc/wpa_supplicant.conf &
交互模式:
wpa_cli_8 -i wlan0
1)add_network//添加网络
2)scan //搜索网络
3)scan_result //显示搜索结果
4)set_net 0 ssid "xxxx" //热点名字
5)set_net 0 psk "xxxxx" //热点密码
6)select_net 0
7)退出交互模式 q
完成以上应该可以连上,但是还没有分配ip
8)动态分配IP
udhcpc -i wlan0