4wpa_supplicant适配层 -- 详解

原创 2012年03月25日 17:41:38


是 通用的wpa_supplicant的 封装,在Android中 作为 WiFi部分的 硬件抽象层来使用。wpa_supplicant适配层 主要用于 与wpa_supplicant守护进程 的 通信,以提供给Android框架使用,实现了 加载、控制 和 消息监控等功能。          

1、当java层调用 loadDriver时, 它实际上是通过JNI来调用Native函数, JNI->android_net_wifi_loadDriver -> wifi_load_driver。
在wifi_load_driver函数中,它将首先通过system property -- wlan.driver.status 的状态来判断驱动是否已经加载。如果没有加载,将会加载该驱动

2、当java层调用startSupplicant时,它实际上是通过JNI调用到wifi_start_supplicant函数,在wifi_start_supplicant函数里,首先确定wpa supplicant的配置文件存在,如果不存在,将默认配置文件拷贝到相应目录下,下面是配置文件的默认路径和工作路径:
static const char SUPP_CONFIG_TEMPLATE[]= "/system/etc/wifi/wpa_supplicant.conf";
static const char SUPP_CONFIG_FILE[]    = "/data/misc/wifi/wpa_supplicant.conf";
然后,调用control_supplicant函数, 如果这时wpa_supplicant还没有启动, 将会启动wpa_supplicant.


           hardware/libhardware_legacy/wifi/wifi.c------------------------>wpa_supplicant适配器层
int wifi_load_driver(){
//for build in driver, do nothing
//for .ko driver, insmod/load firmware...
}
int wifi_start_supplicant(){
     property_set("ctl.start", "wpa_supplicant");
} 

//适配层的构成非常的简单,除了一些加载 和 连接 的接口,它最重要的部分是以下两个接口:
    //int wifi_command(const char *command, char *reply, size_t *reply_len);
    //int wifi_wait_for_event(char *buf, size_t len); 
    //wifi_command()发送命令给wpa_supplicant进程,并返回结果 
    //wifi_wait_for_event()接受wpa_supplicant上报的事件

-->
root/init.rc
service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -d -c /data/misc/wifi/wpa_supplicant.conf-------------------->启动 wpa_supplicant程序
   socket wpa_wlan0 dgram 0666 wifi wifi
   group system wifi
   disabled
   oneshot

3、 java层通过connectToSupplicant调用wifi_connect_to_supplicant函数,在该函数中,将通过wpa_ctrl_open函数分别创建 两个AF_UNIX地址族 和 数据报方式的socket,一个是ctrl_conn, 用于向wpa_supplicant发送命令并接收response, 另一个是monitor_conn, 它一直阻塞等待从wpa_supplicant过来的event。最后,通过monitor_conn向wpa_supplicant发送命令ATTACH,用于将自己的socket信息注册到wpa_supplicant, 由于socket是数据报方式的,这一步是必须的,对于存在于wpa_supplicant的服务器端,它是所有客户端共享的,由于它需要主动向monitor_conn客户端发送事件,所以它必须先记录下该客户端的详细信息,wpa_supplicant就可以将EVENT发向该socket。在完成上面这些操作后,java层会通过jni方式调用函数android_net_wifi_waitForEvent(应该是起一个线程,在线程里调用),该函数会调用wifi_wait_for_event,在wifi_wait_for_event函数里,会阻塞接收从wpa_supplicant模块传来的事件,一旦wpa_supplicant模块有事件发,wifi_wait_for_event接收到后,会将包含事件的buf通过函数参数的方式回传到java层,java收到事件后,再继续调用wifi_wait_for_event函数进行阻塞等待接收,从而完成一个循环。

4. 以上的流程完成以后,WIFI java layer 调用的WIFI native api 就和wpa_supplicant进程就建立了联系,WIFI java layer就可以向wpa_supplicant发送命令和接收response, 并且wpa_supplicant也可以主动向WIFI java layer发送事件了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

wifi.c中函数分析: :::int wifi_connect_to_supplicant()

/* Make sure supplicant is running */ 查看属性,保存在supp_status 判断是否运行:否返回-1     if (!property_get(SU...

android_wifi读书笔记之4-HAL层分析

本文为读书笔记,整理自网络文献和源码 4 HAL层分析 Hardware/libhardware_legacy/wifi/wifi.c 这个文件主要是实现驱动的加载和卸载,wpa_supplic...
  • joqian
  • joqian
  • 2014年05月27日 13:32
  • 1456

wpa_supplicant demo 分析

Wpa_gui是一个基于Wpa_supplicant的无线连接管理工具,可以简单的认为是由wpa_supplicant+Qt的一个小型软件,它可以运行在linux,Windows及Unix操作系统下,...
  • eydwyz
  • eydwyz
  • 2017年04月13日 22:30
  • 228

wpa_supplicant和udhcpc测试

测试1: 当把wpa_supplicant和udhcpc线程启动起来后,使用ifconfig ra0 down 让卸载掉网卡,wpa线程会打印以下的调试信息, Failed to initiate...

wpa_supplicant无线网络配置

目前可以使用wireless-tools或wpa_supplicant工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。 wpa_supplicant是一个较好...

Android4.4 wpa_supplicant深入分析之初识wpa_supplicant

本文主要分析wpa_supplicant_8,主要有三个子目录: hostapd:当手机进入Soft AP模式时,手机将扮演AP的角色,需要hostapd来提供AP的功能。这就是wifi热点的实现。 ...

Android wifi探究一:初步认识wpa_supplicant与wifi框架梳理

平时和wifi打交道还算比较多吧,wifi出了问题就只能找大神解决,这是件很令人伤感的事情。所以就想自己分析下android源码中wifi的框架,以后wifi出了问题,自己也能尝试的解一解。分析过程必...

wpa_supplicant软件架构分析

1.    PF_INET socket接口,主要用于向kernel 发送ioctl命令,控制并获取相应信息。 2.    PF_NETLINK socket接口,主要用于接收kernel发送上来的...

wpa_supplicant软件架构分析

1. 启动命令wpa supplicant 在启动时,启动命令可以带有很多参数,目前我们的启动命令如下:wpa_supplicant /system/bin/wpa_supplicant -Dwext...
  • fxfzz
  • fxfzz
  • 2011年02月10日 09:57
  • 18190

wpa_supplicant适配层 -- 详解

适配层是 通用的wpa_supplicant的 封装,在Android中 作为 WiFi部分的 硬件抽象层来使用。wpa_supplicant适配层 主要用于 与wpa_supplicant守护进...
  • hbk320
  • hbk320
  • 2015年07月26日 22:29
  • 841
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4wpa_supplicant适配层 -- 详解
举报原因:
原因补充:

(最多只允许输入30个字)