Android的Wifi系统框架分析第一篇

一、Android Wifi框架图
Android的Wifi系统框架分析第一篇_第1张图片

二、Android Wifi源码结构

1 Wifi Settings层

代码目录:
packages/apps/Settings/src/com/android/settings/wifi/

主要的类:
WifiSettings.java 负责显示Wifi的设置界面
WifiEnabler.java 负责Wifi的开关逻辑
WifiDialog.java 负责Wifi的对话框
WifiInfo.java 表示Wifi的相关配置信息

2 Wifi Framework层

代码目录:
frameworks/base/wifi/Java/android/net/wifi/
frameworks/base/core/java/android/net/
frameworks/opt/net/wifi/service/java/com/android/server/wifi

主要的类:

WifiManager: 它是Wifi模块向外部应用透漏出来的接口,其它所有应用都可以通过WifiManager来操作Wifi的各项功能,但是WifiManager本身不具备处理请求的能力,而是把所有的请求转发给WifServiceImpl来处理。

WifiService: Java Framework中Wifi功能的总入口,负责Wifi功能的核心业务。它是服务器端的实现,作为Wifi部分的核心,处理实际的驱动加载、扫描、链接、断开等命令,以及底层上报的事件。对于主动的命令控制,WiFi是一个简单的封装,针对来自客户端的控制命令,调用相应的WifiNative底层实现。

WifiServiceImpl: 本身也不具备处理请求的能力,而是将请求分类后交给不同的处理者处理,比如WifiStateMachine。

WifiStateMachine: 它是一个复杂的状态机,维护了Wifi的启动、扫描、连接、断开等多个状态。它运行自己独有的线程中,拥有自己的消息队列。

WifiStateTracker: 除了负责WiFi的电源管理模式等功能外,其核心是WifiMonitor所实现的事件轮询机制,以及消息处理函数handleMessage()。

WifiMonitor: 专门负责接收来自Wpa_supplicant的事件,并将这些信息进行分类再交予StateMachine处理。

WifiNative: 一个接口类,主要是提供一些native方法用于wifi framework层和WPAS通信。WifiNative的主要实现都在wifi.c函数里,WifiNative不过是将其封装,供framework层调用。

特别注意:WifiService 和 WifiMonitor 是整个模块的核心。WifiService 负责启动关闭 wpa_supplicant、启动关闭 WifiMonitor 监视线程和把命令下发给 wpa_supplicant,而 WifiMonitor 则负责从 wpa_supplicant 接收事件通知。也就是说WifiService负责wifi整个流程的控制,而WifiMonitor负责监视底层的事件。

3 Wifi JNI层

代码目录:frameworks/base/core/jni/android_net_wifi_Wifi.cpp
android_net_wifi_Wifi.cpp就是典型jni接口,通过它可以直接调用Wifi的硬件抽象层。

4 Wifi Hardware层 (wifi管理库)

代码目录:hardware/libhardware_legacy/wifi/wifi.c

Wifi Hardware层也叫wpa_supplicant适配层,是通用wpa_supplicant的封装。wpa_supplicant适配层起着承上启下的作用,主要用于与wpa_supplicant守护进程的通信,以供给Wifi框架层使用。

5 wpa_supplicant层(wifi tool)

代码目录:external/wpa_supplicant/

wpa_supplicant是一个开源项目,已经移植到Linux、Windows以及其它嵌入式系统上。它是WPA(WiFi Protected Access的缩写,中文含义为WiFi网络安全存取)的应用层认证客户端,负责完成认证相关的登录、加密等工作。 该层是Wifi FrameWork层的基石,也叫Wifi服务层。

经过编译后主要结果是生成动态库libwpa_client.so和可执行程序wpa_supplicant。
(1) wpa_client (生成库libwpaclient.so)
external/wpa_supplicant_8/wpa_supplicant/src/common/wpa_ctrl.c
(2) wpa_server (生成守护进程wpa_supplicant)
external/wpa_supplicant_8/wpa_supplicant/main.c

6 Wifi kernel层

代码目录:kernel/drivers/net/wireless

你可能感兴趣的:(Android驱动开发,android,wifi,wpa_supplicant)