Android WiFi--系统架构

http://blog.csdn.net/myarrow/article/details/8129607

1. 系统架构
Android WiFi系统引入了wpa_supplicant,它的整个WiFi系统以wpa_supplicant为核心来定义上层用户接口和下层驱动接口。整个WiFi系统架构如下图所示:

一切尽在上图中,下面将对每部分进行详细分析。

1.1 WifiService
由SystemServer启动的时候生成的ConnecttivityService创建,负责启动关闭wpa_supplicant,启动和关闭WifiMonitor线程,把命令下发给wpa_supplicant以及更新WIFI的状态。

处理其它模块通过IWifiManager接口发送过来的远端WiFi操作。

1.2 WifiMonitor
负责从wpa_supplicant接收事件通知。

1.3 wpa_supplicant
1) 读取配置文件
2) 初始化配置参数,驱动函数
3) 让驱动scan当前所有的bssid
4) 检查扫描的参数是否和用户设置的相符
5) 如果相符,通知驱动进行权限和认证操作
6) 连上AP

1.4 Wifi驱动模块
厂商提供的source,主要进行load firware和kernel的wireless进行通信

1.5 Wifi电源管理模块
主要控制硬件的GPIO和上下电,让CPU和Wifi模组之间通过sdio接口或USB接口通信

1.6 Wifi工作步骤
1) Wifi启动
2) 开始扫描
3) 显示扫描的AP
4) 配置AP
5) 连接AP
6) 获取IP地址
7) 上网

1.7 Wifi模块代码
1) Wifi Settings应用程序
packages/apps/Settings/src/com/android/settings/wifi

2) Wifi Framework
frameworks/base/wifi/java/android/net/wifi (UI通过android.net.wifi package
发送命令给wifi.c)

frameworks/base/core/java/android/net(更高一级的网络管理)
frameworks/base/services/java/com/android/server

3) Wifi JNI
frameworks/base/core/jni/android_net_wifi_Wifi.cpp
4) Wifi Hardware (wifi管理库)
hardware/libhardware_legacy/wifi/wifi.c

5) wpa_supplicant(wifi tool)

external/wpa_supplicant8
(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
net/wireless drivers/wlan_xxx arch/arm/mach-xxx/wlan_pm.c

2. WifiService和wpa_supplicant启动流程
WifiService和wpa_supplicant启动流程如下图所示:

2.1 状态变化
• 加载wifi驱动的状态变化流程如下:

初始状态:mInitialState

|
mDriverUnloadedState

|
mWaitForP2pDisableState

|
mDriverLoadingState(其enter中调用WifiNative.loadDriver)

• 启动wpa_supplicant的状态变化如下:
在DriverLoadedState状态的processMessage中调用WifiNative.startSupplicant

3. 生产时自动打开Wifi
在生产时, 默认Wifi是关闭的,如果需要默认打开,可修改wifiservice.java中的如下代码:

[cpp] view plaincopy
/**
* Check if Wi-Fi needs to be enabled and start
* if needed
*
* This function is used only at boot time
*/
public void checkAndStartWifi() {
mAirplaneModeOn.set(isAirplaneModeOn());
mPersistWifiState.set(getPersistedWifiState());
/* Start if Wi-Fi should be enabled or the saved state indicates Wi-Fi was on */
boolean wifiEnabled = shouldWifiBeEnabled() || testAndClearWifiSavedState();
Slog.i(TAG, "WifiService starting up with Wi-Fi " +
(wifiEnabled ? "enabled" : "disabled"));
setWifiEnabled(wifiEnabled); //强制设置为true

mWifiWatchdogStateMachine = WifiWatchdogStateMachine.
makeWifiWatchdogStateMachine(mContext);

}

时间: 2024-10-07 01:09:13

Android WiFi--系统架构的相关文章

Android的系统架构

Android的系统架构层分为四层: Application 主要是用于存放应用程序 Application FrameWord 支持应用层中的软件运行 Libraries+Android Runtime 系统库+安卓的运行环境 Linux Kernel 安卓底层是Linux内核,提供了各种驱动 转载请标明出处,谢谢!

Android之系统架构

Android 是Google开发的基于Linux平台的开源手机操作系统.它包括操作系统.用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍.Android采用WebKit浏览器引擎,具备触摸屏.高级图形显示和上网功能,用户能够在手机上查看电子邮件.搜索网址和观看视频节目等,比iPhone等其他手机更强调搜索功能,界面更强大,可以说是一种融入全部Web应用的单一平台.这里介绍Android的系统架构 android系统架构图 android的系统

Android面试题3之描写叙述下Android的系统架构

描写叙述下Android的系统架构: Android系统从下往上分为Linux内核层(linux kerner),执行库(runtime library),应用程序框架层,应用程序层 linuxkernel:负责硬件的驱动程序.网络.电源.系统安全以及内存管理等功能. libraries和 androidruntime:libraries:即c/c++函数库部分,大多数都是开放源码的函数库,比如webkit,该函数库负责 android网页浏览器的执行 applicationframework(

Android面试题3之描述下Android的系统架构

描述下Android的系统架构: Android系统从下往上分为Linux内核层(linux kerner),运行库(runtime library),应用程序框架层,应用程序层 linuxkernel:负责硬件的驱动程序.网络.电源.系统安全以及内存管理等功能. libraries和 androidruntime:libraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit,该函数库负责 android网页浏览器的运行 applicationframework(应

Android 安卓系统架构介绍

android系统架构   从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层.应用程序框架层.系统运行库层以及Linux内核层,分别介绍如下: 1)应用程序层 Android平台不仅仅是操作系统,也包含了许多应用程序,诸如SMS短信客户端程序.电话拨号程序.图片浏览器.Web浏览器等应用程序.这些应用程序都是       用Java语言编写的,并且这些应用程序都是可以被开发人员开发的其他应用程序所替换,这点不同于其他手机操作系统固化在系统内部的系统软件,更加灵活和

Android面试题 描述一下android的系统架构

android系统架构从下往上为linux内核层.运行库.应用程序框架层和应用程序层. Linux Kernel:负责硬件的驱动程序.网络.电源.系统安全以及内存管理等功能. Libraries和android Runntime: Libraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit(引擎),该函数库负责android网页浏览器的运行,例如标准的c函数库libc.openssl.sqlite等,当然也包括支持游戏开发2dsgl和3dopengles,在多媒体

Android传感器系统架构【转】

本文转载自:http://blog.csdn.net/qianjin0703/article/details/5942579 版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 体系结构 2. 数据结构 3. 四大函数 本文以重力感应器装置G-sensor为例探索Android的各层次结构. 1. 体系结构 Android的体系结构可分为4个层次. 第一层次  底层驱动层,包括标准Linux,Android核心驱动,Android相关设备驱动,G-sensor的设备驱动程序即存在于此 第

Android的系统架构——安卓运行库

安卓运行库会有以下两个重要概念: 1.核心库.核心库提供了Java语言API中的大多数功能,同时也包含Android的一些核心API.如android.OS.android.net.android.media等. 2.Dalvik虚拟机.Android程序不同于J2ME程序,每个Android应用都运行在 自己的进程上,享有Dalvik虚拟机为它分配的专有实例,并在该实例中执行.Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈 的虚拟机,并进行了内存资源使用的优化以及支持多

Android特性与系统架构

一.Android特性 应用程序框架支持组件的重用与替换 Dalvik 虚拟机专为移动设备优化 集成的浏览器基于开源的WebKit 引擎 优化的图形库包括定制的2D 图形库,基于OpenGL ES 1.0的3D 图形库 SQLite 用作结构化的数据存储 多媒体支持包括常见的音频.视频和静态图像格式(如MPEG4, H.264, MP3, AAC, AMR, JPG, PNG , GIF) GSM 电话技术(依赖于硬件) 蓝牙Bluetooth, EDGE, 3G, 和WiFi(依赖于硬件) 照

Android系统简介(中):系统架构

Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries  & Android Runtime.Linux  Kernel.每层提供不同的Service功能以供上层调用. 一:Linux Kernel(Linux 内核): 位于Android系统架构栈的底部,整个Android系统基于该层,最新的Android Kitkat 4.4基于Linux Kernel 3.8构建的.它提供的硬件设备抽象接口,以供其他架构层