android 总线 wifi设备,Android WiFi--系统架构

1. 系统架构

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

f9c5b3db85125aa2468e9474ee663535.png

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

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.cpp4) 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.c6) Wifi kernel       net/wireless     drivers/wlan_xxx       arch/arm/mach-xxx/wlan_pm.c

2. WifiService和wpa_supplicant启动流程

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

c84dabf363d81f915dc7d155cb438908.png

2.1 状态变化

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

初始状态:mInitialState

|

mDriverUnloadedState

|

mWaitForP2pDisableState

|

mDriverLoadingState(其enter中调用WifiNative.loadDriver)

• 启动wpa_supplicant的状态变化如下:

在DriverLoadedState状态的processMessage中调用WifiNative.startSupplicant

3. 生产时自动打开Wifi

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

/**

* 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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值