Android wifi调试技巧

来源:互联网 发布:tcl通讯待遇java 编辑:程序博客网 时间:2024/05/17 08:39
手动打开wifi,有时小机屏幕没有,或者不方便使用的情况下,要知道wifi是否ok,可以通过手工命令的
方式来判断wifi是否功能正常
有时不能确定wifi出异常(如打不开)时,是底层问题还是上层问题,可以用手工命令来打开判断
如果能手动打开,那说明问题就出在上层,手动都打不开,那就要查驱动是否正常了


1: iw工具的使用
先需要push到小机中,修改权限后就可以直接命令调用
如:
adb push iwlist /system/bin/
adb shell
chmod 777 /system/bin/iwlist

使用iw工具时必须确保wifi已经打开,wlan0节点已经生成
手工insmod ko,如果驱动更正常加载成功的话 proc/net/wireless下面会有wlan0节点
  cat /proc/net/wireless
可以看到wlan0是否有生成

驱动加载成功后,开启wifi
busybox ifconfig wlan0 up  -->开启wifi
busybox ifconfig wlan0 down  -->关闭wifi

wifi开启后就可以使用iw相关工具了
如 iwlist wlan0 scan 可以搜索ap,以及显示搜索到的ap的详细信息


2: 手动打开还可以通过wpa_supplicant来打开
  (参考博客: http://blog.csdn.net/wesleyluo/article/details/8104564)
(a): wpa_supplicant
android代码中的位置android\external\wpa_supplicant_8(目前使用的是08版本)
wpa_supplicant是一个开源的项目,用来兼容不同的网络类型,给网络设备驱动下命令,向上提供上层的调用接口,
向下通过命令来驱动网络设备

wpa_supplicant编译后会生成二个可执行文件
wpa_supplicant跟wpa_cli
其中wpa_cli作为客户端,方便调试操作的,wpa_supplicant作为守护进程,一直在后台运行
可以看到wpa_supplicant在系统起来时就已经执行起来了,
如init.sun8i.rc文件中
service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \    
-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \    
-O/data/misc/wifi/sockets \    
-e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0
    #   we will start as root and wpa_supplicant will switch to user wifi
    #   after setting up the capabilities required for WEXT
    #   user wifi
    #   group wifi inet keystore
    class main
    socket wpa_wlan0 dgram 660 wifi wifi
    disabled
    oneshot
具体后面所带参数的意义,如-c后面是wpa_supplicant执行所需要的配置文件,文件位置在/data/misc/wifi/wpa_supplicant.conf
-i是指操作的网络节点是wlan0
-D是网络接口类型,是wext类型还是nl80211,一般此时的android版本都会选择nl80211
/system/bin/logwrapper是指输出wpa_supplicant自身的打印信息
/system/bin/wpa_supplicant是指可执行文件的位置

(b):如何通过使用wpa_cli来启动wifi的相关操作
与前面的iw工具一样,必须得保证wifi已经正常打开
在adb shell下面输出 wpa_cli命令
就可以进入wpa_cli界面
此时输入h就可以看到wpa_cli的一些操作接口,如scan(扫描ap)  scan results(扫描结果等)
在此界面输入q退出wpa_cli

一般来说,android系统起来后,wpa_supplicant已经跑起来了
ps | grep "wpa*"
可以看到wpa_supplicant这个系统进程,后面我们直接通过wpa_cli进去后会发现,命令根本用不了。
此时如果我们要手工使用wpa_supplicant的话,必须先kill掉原先存在的wpa_supplicant这个后台进程,再重新手动开启
开启方法如下:
wpa_supplicant -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf -O/data/misc/wifi/sockets&
wpa_cli -iwlan0 -p/data/misc/wifi/sockets

再输入wpa_cli即可,即进入wpa_cli操作界面

"&"表示后台运行,wpa_supplicant与wpa_cli通过/data/misc/wifi/sockets进行通信
























1 0