Android WiFi子系统深度解析:初始化、连接与WPS流程

需积分: 10 4 下载量 195 浏览量 更新于2024-09-09 1 收藏 163KB DOC 举报
"这篇文档是关于Android WiFi子系统的学习总结,涵盖了从系统初始化到连接AP,查找AP,配置AP以及分配IP的整个流程,并重点介绍了WPS(Wi-Fi Protected Setup)流程。文中还提到了与WiFi硬件抽象层(HAL)以及wpa_supplicant的交互,同时提供了大量的测试分析代码用于跟踪调试。" Android WiFi子系统是Android操作系统中的一个重要组成部分,它负责处理无线网络的连接和管理。以下是对WiFi流程的详细说明: **初始化** 初始化阶段主要由SystemServer中的ConnectivityService开始,它在构造函数中启动WPS(Wi-Fi Protected Setup)并创建WifiMonitor来监控网络事件。WifiTracker通过WifiMonitor接收wait_for_event返回的事件,而WifiService则负责启动或关闭WPS,并向WPS发送控制命令。 **连接AP** 当用户尝试连接到一个AP(接入点)时,这个过程通常由wifisetting发起,通过AIDL调用wifiservice的setwifienable方法。这会触发加载启动WPS,启动Monitor等一系列操作。 **查找AP** 查找AP是通过调用Wifiservice的StartScan方法发起SCAN命令,然后等待wait_for_event返回扫描结果。一旦扫描完成,发现的AP信息将被返回给调用者。 **配置AP** 配置AP首先检查Wifiservice的LIST_NETWORK,看是否已存在相同的网络配置。如果不存在,就通过ADD_NETWORK添加新的网络配置,并获取对应的网络ID。接着,通过ENABLE_NETWORK启用网络,WPS开始尝试连接到指定的AP。 **分配IP** 当WPS成功连接到AP后,WifiMonitor会监听到该事件,并调用wifiStateTacker的notifyStateChange。接着,发送EVENT_DHCP_START广播启动DHCP服务,以便从AP处获取IP地址和其他网络配置。 **WPS流程** WPS是一个简化Wi-Fi设备设置的机制,它通过一个中间件与WiFiHAL层交互。中间件向上通过socket与HAL通信,处理wifi_cmd操作和event事件的返回;向下通过netlink与驱动程序交互,根据命令操作驱动并接收事件;同时,它还负责密码认证。 WiFiHAL层是Android与无线网卡驱动之间的接口,通过wpa_cli操作接口(本地socket封装)与WPS进行交互。WPS内部使用eloop机制来处理与上层和驱动的交互。 总结来说,Android WiFi子系统是一个复杂的网络管理框架,涉及多个层次的交互,从应用程序层的设置指令,到WiFi服务的处理,再到硬件驱动的通信,最后实现网络连接和配置。深入理解这一流程对于Android开发者尤其是无线网络相关的开发者至关重要。