位置: 编程技术 - 正文
推荐整理分享Android WiFi--系统架构(安卓wifimanager详解),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:android wifi direct,android/data/wifipwd,android wifi架构,android wifi direct,android.net.wifi,android.net.wifi,android wifi direct,android wifi direct,内容如对您有帮助,希望把文章链接给更多的朋友!
原文链接请参考: 系统架构
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_supplicant1) 读取配置文件 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); }
Android:wpa_supplicant决定选择哪种驱动 1,main函数的入口:external/wpa_supplicant_8/wpa_supplicant/main.c2,init.rc中通过参数指定要加载哪个驱动3,wpa_supplicant中加载驱动的原理main.c:main()--wpa_supplicant.c:wp
Android Studio新手入门教程 新手安装完AndroidStudio后,需要配置JDK和SDK的路径。进入到AS中File--OtherSettings--DefaultProjectStructure中,如图:将JDK的安装路径和SDK的路径复制上去。(JDK最
Android之Notification-android学习之旅(二) notification常用于下拉式的消息推送。Notification的构成Nitification的实例1.新建一个Builder,要选Notification.compat包。2.然后用builder来设置nitification的属性。代
标签: 安卓wifimanager详解
本文链接地址:https://www.jiuchutong.com/biancheng/374551.html 转载请保留说明!下一篇:Android:wpa_supplicant决定选择哪种驱动
友情链接: 武汉网站建设