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发送事件了。

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

wpa_supplicant无线网络配置

家里用的是mecury的路由器,我的是rhel6.3-x64系统,设置无线路由上网 最简单的方法是 使用NetworkManager服务,如果不想使用的话,按照下面的方法也可以。 路由设置...
  • simeone18
  • simeone18
  • 2013年02月14日 13:42
  • 35734

Android系统wifi之p2p(wifi直连)配置文件权限导致应用不能使用wifi问题

========================= 一、问题描述 二、问题分析 三、问题解决
  • tankai19880619
  • tankai19880619
  • 2015年03月30日 14:22
  • 5277

WPA_Supplicant使用及配置

WPA_Supplicant这个工具的下载和移植都很简单。一般来说,移植
  • king523103
  • king523103
  • 2014年07月22日 17:48
  • 2586

5wpa_supplicant程序 --详解

目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。     wpa_supplica...
  • wh_19910525
  • wh_19910525
  • 2012年03月25日 15:14
  • 11722

wpa_supplicant.conf文件详解

Wpa_supplicant是linux系统下一个非常强大的无线网卡管理程序。google搜索到的它似乎不支持WPA2和AES,其实不然,参考它的文档可以发现,WPA2只是RSN的别名,而AES也是C...
  • yuanbinquan
  • yuanbinquan
  • 2016年04月19日 15:18
  • 1283

基于wpa_supplicant库的WIFI连接功能实现--应用层碎片式对象内存管理算法

最近笔者在开发一个基于wpa_supplicant库和QT的WIFI连接界面,就像现在智能手机中wifi的连接界面。到现在基本上算是开发完成了,遇到不少问题,发现网上关于wpa_supplicant命...
  • jy1075518049
  • jy1075518049
  • 2016年03月30日 15:14
  • 569

hostapd 与 wpa_supplicant详解

根據wiki說明, wpa_supplicant 是一個免費軟體實現了 IEEE 802.11i 管理控制 (在多平台上 Linux, FreeBSD, NetBSD, AROS, Microso...
  • qq_21949217
  • qq_21949217
  • 2015年03月21日 15:38
  • 3349

wpa_supplicant程序详解

目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。     wpa_supplicant...
  • u010506504
  • u010506504
  • 2014年12月16日 16:16
  • 845

wpa_supplicant移植、wpa_cli手动配网

一.下载源码 1. wpa_supplicant-0.7.3.tar.gz(注:openssl-0.9.8e中用到了wpa_supplicant-0.7.3提供的补丁) 2. openssl-0....
  • fangfangwenwen
  • fangfangwenwen
  • 2017年03月28日 08:47
  • 122

wpa_supplicant的移植和可能遇到的问题

在本周的最后一个工作日的最后一个小时里,一个困扰了我几天的问题在近乎绝望的调试中突然通过了!人生真是充满惊喜啊 本来已经接近放弃了,抱着最后一试的打算,居然成功了。阳光果然就在50米开外的拐...
  • ti_tantbx
  • ti_tantbx
  • 2011年12月03日 17:23
  • 31312
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4wpa_supplicant适配层 -- 详解
举报原因:
原因补充:

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