Android系统的Wi-Fi系统框架和详细启动流程

目录

一、前言

二、系统架构层次

‌1、应用层‌

‌2、Framework层‌

3‌、HAL层‌

‌4、驱动层‌

三、Wi-Fi 目录树结构

四、系统流程

1、应用层请求

2、Wi-Fi管理服务处理

3、硬件交互

4、数据处理与事件通知

5.连接管理

6.状态维护

五、WiFi启动流程及函数调用

1、系统启动时初始化

2、加载驱动

3.启动服务

4.用户操作 

5、处理广播

6、启动Supplicant 

7、启动DHCP

 8、连接网络

六、具体运用举例 

1. 添加依赖

2. 获取Wi-Fi管理服务

3. 扫描Wi-Fi网络

4. 获取扫描结果

5. 完整工作流程和函数调用关系


一、前言

        在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处理连接请求,并与硬件接口通信以建立连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好多渔鱼好多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值