目录
一、前言
在Android系统中,Wi-Fi系统的框架和流程涉及多个组件和技术,包括Wi-Fi管理服务(WifiManager)、Wi-Fi驱动、硬件接口等。其中,服务部分主要包括WifiService
,它负责处理来自应用层的请求和与硬件通信。以下是对Android Wi-Fi系统框架和启动流程的详细解释。
二、系统架构层次
1、应用层
通过WifiManager
API与系统交互。WifiManager
是Android提供给应用层的一个接口,用于管理和控制Wi-Fi设备。它是通过Context.getSystemService(Context.WIFI_SERVICE)
获取的。主要包括
-
扫描可用的Wi-Fi网络
-
连接到指定的Wi-Fi网络
-
获取当前连接的Wi-Fi网络信息
-
控制Wi-Fi开关
2、Framework层
WifiService
:系统服务入口WifiConnectivityManager
:网络选择策略WifiScanner
:扫描控制
3、HAL层
android.hardware.wifi的接口定义。
Android Wi-Fi系统通过硬件抽象层(HAL)与Wi-Fi芯片进行交互。硬件接口通常位于hardware/libhardware/modules/wifi/
目录下。主要包括如下功能:
-
提供统一的API接口
-
实现具体的Wi-Fi操作
-
与内核驱动通信
4、驱动层
Android使用Linux内核的Wi-Fi驱动,通过net/wireless/cfg80211.c
实现。这个驱动负责与硬件交互,管理Wi-Fi设备的状态和数据传输。主要功能:
-
驱动加载
-
硬件初始化
-
数据包的发送和接收
-
事件处理(如连接、断开等)
三、Wi-Fi 目录树结构
frameworks/base/services/core/java/com/android/server/wifi/
├── WifiServiceImpl.java # Wi-Fi服务入口
├── WifiSettingsStore.java # Wi-Fi状态存储
├── WifiConnectivityManager.java # 网络选择逻辑
├── WifiNative.java # JNI与底层交互接口
external/wpa_supplicant_8/ # 开源wpa_supplicant实现
hardware/interfaces/wifi/1.*/ # HAL层接口定义
packages/apps/Settings/src/com/android/settings/wifi/ # 系统设置中的Wi-Fi界面
四、系统流程
以下是Android Wi-Fi系统的主要工作流程:
1、应用层请求
应用通过WifiManager
接口请求扫描可用的Wi-Fi网络
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
List<ScanResult> scanResults = wifiManager.getScanResults();
2、Wi-Fi管理服务处理
WifiManager
将请求转发给WifiStateMachine
,后者负责与硬件交互。
3、硬件交互
硬件接口(如HAL)通过内核驱动与Wi-Fi芯片通信,执行具体的Wi-Fi操作。
4、数据处理与事件通知
-
硬件接口将扫描结果返回给
WifiStateMachine
。 -
WifiStateMachine
处理这些结果,并通过回调或广播通知应用层。
5.连接管理
- 应用请求连接到指定的Wi-Fi网络。
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); wifiManager.connectToNetwork(networkId, null);
WifiStateMachine
处理连接请求,并与硬件接口通信以建立连接。