记录一下如何使用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: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 B) TX bytes: (0.0 B) sit0 Link encap:IPv6-in-IPv4
NOARP MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 B) TX bytes: (0.0 B) wlan0 Link encap:Ethernet HWaddr :::::
BROADCAST MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 B) TX bytes: (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..x
Copyright (c) -, 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 . 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#(RF=, 1T)
MT7601_ChipSwitchChannel: SwitchChannel#(RF=, 1T)
MT7601_ChipSwitchChannel: SwitchChannel#(RF=, 1T)
SYNC - End of SCAN, restore to 20MHz channel , Total BSS[]
SCAN done, resume MSDU transmission ...
CNTL - All roaming failed, restore to channel , Total BSS[]
===>rt_ioctl_giwscan. () BSS returned, data->length =
<>CTRL-EVENT-SCAN-RESULTS
<>WPS-AP-AVAILABLE
TSSI = 0x4F
temperature = 0xFFFFFFFB
PacketType = 0xBD
tx_11g_rate: b
Channel PWR + MCS PWR =
TargetPower: 0x2428f()
tssi_m_dc:
TssiLinear0:
TssiDC0:
tssi_offset:
tssi_offset<<:
TssiSlope:
tssi_db:
CurrentPower:
PowerDiff: -
final PowerDiff: -(0xfffffffe)
MAC 13b4: 0xc9540029
MT7601AsicTemperatureCompensation::Disable PLL Lock Protect.
查看scan_result结果:
> scan_results
bssid / channel / signal level / quality /flags / ssid
:6b:e7:f2:7a: - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] KAHUNA
:::f1::9a - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] Panelmate
b8:f8::::e6 - / [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] TP-LINK_YSKJ
0a:d4:0c:c4:be: - / [WPA2-PSK-CCMP][ESS] A_Clair_Cl
d4:6a:a8::: - / [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] ChinaNet-Rg9G
:bd:5f:1c:a1: - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] kitking_____
fc:3d::b4::3a - / [WPA2-PSK-CCMP][ESS] Xiaomi_Lee
:fc::ed:f4:d9 - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_F4D9
d0:c7:c0:1b:b8:a6 - / [WPA2-PSK-CCMP][ESS]
bc:::e2:b4:b4 - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_B4B4
8c:a6:df::: - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_3526
:b6::4d:c8:c8 - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] ChinaNet-PDU9
c4:c7::0f:: - / [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] ChinaNet-VUEP
a8:6b:7c::: - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] jinghua
:::::d1 - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TPGuest_guest
f0:b4::d3::4f - / [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] Kitking_01A
f4::cd:f9:fb:2b - / [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] TP-LINK_FB2B
:::::d1 - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_XU
b0:e2:e5:c8:4d:fa - / [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] ChinaNet-UZah
:0e:5e:::ce - / [WPA2-PSK-TKIP+CCMP][ESS]
:bb:0c::7f:8c - / [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] ChinaNet-TwnA
fa:8f:ca:7e::e2 - / [ESS] Cast-Kitking.m
f2:b4::d1::4f - / [WPS][ESS] ____________WiFi_684E
8c:f2:::3c:9e - / [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

最新文章

  1. 移动端css知识总结--字体,毛玻璃效果,input和disabled
  2. Node.js学习笔记
  3. sharedUserId
  4. java web.xml配置详解
  5. U盘启动盘 安装双系统 详细教程
  6. Game of Life I &amp; II
  7. iOS开发中的内存分配(堆和栈)
  8. jquery 判断元素是否隐藏
  9. .NET程序的编译和运行
  10. 【转】object标签和embed标签
  11. 【桌面程序搞界面再也不怕了】:迅雷BOLT入门(一)开篇 附程序和源码
  12. Matlab中plot函数参数解析
  13. Android 实现切换主题皮肤功能(类似于众多app中的 夜间模式,主题包等)
  14. N - Tram - poj1847(简单最短路)
  15. 常用的bat命令
  16. 工欲善其事必先利其器---SQL在线可视化模型设计,(还可学习拖拽知识)
  17. VCMI Mods list
  18. Bloom Filter的基本原理和变种
  19. 微信小程序开发入门
  20. 强化学习读书笔记 - 02 - 多臂老O虎O机问题

热门文章

  1. Java第三次实验要求
  2. angular 资源路径问题
  3. meta标签多种用法
  4. MySQL 下优化SQL语句的一些经验
  5. ubuntu下调试ffmpeg程序出现undefined reference to pthread_once ,undefined reference to uncompress错误
  6. 最新研发的基于Java的高速开发平台
  7. Python实战之自己主动化评论
  8. ORACLE 查看表结构
  9. 转_【大话IT】你离大数据架构师有多远?
  10. windows常用快捷键(转载)