記錄一下如何使用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