记录一下如何使用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

Linux wpa_cli 调试方法的更多相关文章

  1. Linux内核调试方法总结

    Linux内核调试方法总结 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2   ...

  2. Linux内核调试方法总结之反汇编

    Linux反汇编调试方法 Linux内核模块或者应用程序经常因为各种各样的原因而崩溃,一般情况下都会打印函数调用栈信息,那么,这种情况下,我们怎么去定位问题呢?本文档介绍了一种反汇编的方法辅助定位此类 ...

  3. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

  4. 【转】Linux内核调试方法总结

    目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_sta ...

  5. Linux内核调试方法【转】

    转自:http://www.cnblogs.com/shineshqw/articles/2359114.html kdb:只能在汇编代码级进行调试: 优点是不需要两台机器进行调试. gdb:在调试模 ...

  6. Linux内核调试方法总结之调试宏

    本文介绍的内核调试宏属于静态调试方法,通过调试宏主动触发oops从而打印出函数调用栈信息. 1) BUG_ON 查看bug处堆栈内容,主动制造oops Linux中BUG_ON,WARN_ON用于调试 ...

  7. Linux内核调试方法总结之栈帧

    栈帧 栈帧和指针可以说是C语言的精髓.栈帧是一种特殊的数据结构,在C语言函数调用时,栈帧用来保存当前函数的父一级函数的栈底指针,当前函数的局部变量以及被调用函数返回后下一条汇编指令的地址.如下图所示: ...

  8. Linux内核调试方法总结之序言

    本系列主要介绍Linux内核死机.异常重启类稳定性问题的调试方法. 在Linux系统中,一切皆为文件,而系统运行的载体,是一类特殊的文件,即进程.因此,我尝试从进程的角度分析Linux内核的死机.异常 ...

  9. Linux内核调试方法总结之ptrace

    ptrace [用途] 进程跟踪器,类似于gdb watch的调试方法 [原理][详细说明参考man ptrace帮助文档] ptrace系统调用主要是父进程用来观察和控制子进程的执行过程.检查并替换 ...

随机推荐

  1. h5调用手机照相机

    camera.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  2. SpringMVC:JSON

    @ResponseBody params="json":访问我这个方法的时候一定要有参数名为json 返回值Userjackson-all-1.9.0.jar @RequestMa ...

  3. 构造方法后面带:this()

    可以这么理解,有参数的构造函数需要执行无参构造函数中的代码,为了省去重复代码的编写,所以就继承了,先执行没参数的那个构造函数. 在this上“转到定义”(F12)就到第一个构造函数上去了.  

  4. allegro设置鼠标滚轮放大缩小

    allegro设置鼠标滚轮放大缩小 allegro16版本以增加可以通过鼠标滚轮进行PCB的放大缩小.具体方法如下: 首先在HOME路径下找到PCBENV文件夹,进入该文件夹打开ENV文件. 在ENV ...

  5. 启动app-inspector报Internal Server Error

    前言 应用工具app-inspector可以协助定位IOS版App的控件元素,然鹅启动时报Internal Server Error! 解决办法 一.找到XCTestWD项目 目录: /usr/loc ...

  6. JSP页面的编码设置(转载)

    1. pageEncoding:<%@ page pageEncoding="UTF-8"%> jsp页面编码: jsp文件本身的编码 2. contentType: ...

  7. SAP-ABAP系列 第二篇SAP ABAP开发基础

    第二章SAP ABAP开发基础 1.ABAP数据类型及定义 ABAP程序中共包含8种基本数据类型定义, 类型名称 描述 属性 C Character Text (字符类型) 默认长度=1,默认值 = ...

  8. 相似进程死掉Process com.midea.mmp2 died.

    此异常查到网上有一篇不错的文章例如以下: 08:56:03,273 INFO – 运行Do func=[GetSeqNo] keyNam=[keynam];KeyVal=[PRYPAYBILSYSTR ...

  9. iOS 优化方案浅析

    本文转载至 http://mobile.51cto.com/iphone-413256.htm Windows独特的注册表机制以及复杂的进程.内存管理,给了很多PC“优化”类软件极大的机遇,比如奇虎3 ...

  10. spring+mybatis多数据源,动态切换

    有时我们项目中需要配置多个数据源,不同的业务使用的数据库不同 实现思路:配置多个dataSource ,再配置多个sqlSessionFactory,和dataSource一一对应.重写SqlSess ...