[RK3288][Android6.0] Wifi Service初始化流程小结
2017-05-04 17:08
609 查看
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
startOtherServices -> SystemServer.java
mSystemServiceManager.startService(WIFI_SERVICE_CLASS); -> WIFI_SERVICE_CLASS为 "com.android.server.wifi.WifiService"
WifiService -> WifiService.java
new WifiServiceImpl -> WifiServiceImpl.java
new WifiStateMachine -> WifiStateMachine.java
new NetworkInfo //代表网络设备的状态信息
INetworkManagementService.Stub.asInterface //连接NetworkManagementService,最终是让netd实现.
new WifiNative //用于和wap_supplicant交互,负责发送请求.
new WifiConfigStore //用于处理 /data/misc/wifi/wpa_supplicant.conf
new WifiMonitor //用于和wap_supplicant交互,负责接收事件.
new WifiInfo //存储无线网络的一些信息
new SupplicantStateTracker //跟踪wap_supplicant的状态
addState(mDefaultState);
...... //省略号表示添加N种状态,原理可自行分析android状态机.
setInitialState(mInitialState); //系统刚开始的状态是mInitialState,使用的时候会有大量的状态切换.
start -> StateMachine.java //启动状态机
smh.completeConstruction ->
sendMessageAtFrontOfQueue(obtainMessage(SM_INIT_CMD, mSmHandlerObj)); ->
handleMessage ->
invokeEnterMethods ->
enter -> WifiStateMachine.java //InitialState类中
WifiNative.stopHal ->
stopHalNative -> WifiNative.java
android_net_wifi_stopHal com_android_server_wifi_WifiNative.cpp //没做啥.
mWifiNative.unloadDriver -> /初始化的时候先不加载wifi driver.
android_net_wifi_unloadDriver -> com_android_server_wifi_WifiNative.cpp
wifi_unload_driver -> wifi.c
check_wifi_preload ->
open(WIFI_PRELOAD_INF, O_RDONLY); //去打开/sys/class/rkwifi/preload,能打开说明wifi driver被预加载了,kernel驱动默认开机会生成preload文件,由宏CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP控制.
property_set(DRIVER_PROP_NAME, "unloaded"); //设置property "wlan.driver.status"为unloaded
mWifiStateMachine.enableRssiPolling //使能查询RSSI(接收信号强度)
new WifiSettingsStore //跟踪wifi settings以及飞行模式情况下的交互
new ClientHandler(wifiThread.getLooper()); //用于和client也就是wifiManager交互
new WifiStateMachineHandler(wifiThread.getLooper()); //用于和WifiStateMachine交互的handler
new WifiController //StateMachine的具体实现,针对不同wifi配置的控制,如AP, STA的不同处理,大部分最终转到WifiStateMachine处理.
参考:
http://www.voidcn.com/blog/wx419209161/article/p-4578111.html
OS: Android 6.0
Kernel: 3.10.92
startOtherServices -> SystemServer.java
mSystemServiceManager.startService(WIFI_SERVICE_CLASS); -> WIFI_SERVICE_CLASS为 "com.android.server.wifi.WifiService"
WifiService -> WifiService.java
new WifiServiceImpl -> WifiServiceImpl.java
new WifiStateMachine -> WifiStateMachine.java
new NetworkInfo //代表网络设备的状态信息
INetworkManagementService.Stub.asInterface //连接NetworkManagementService,最终是让netd实现.
new WifiNative //用于和wap_supplicant交互,负责发送请求.
new WifiConfigStore //用于处理 /data/misc/wifi/wpa_supplicant.conf
new WifiMonitor //用于和wap_supplicant交互,负责接收事件.
new WifiInfo //存储无线网络的一些信息
new SupplicantStateTracker //跟踪wap_supplicant的状态
addState(mDefaultState);
...... //省略号表示添加N种状态,原理可自行分析android状态机.
setInitialState(mInitialState); //系统刚开始的状态是mInitialState,使用的时候会有大量的状态切换.
start -> StateMachine.java //启动状态机
smh.completeConstruction ->
sendMessageAtFrontOfQueue(obtainMessage(SM_INIT_CMD, mSmHandlerObj)); ->
handleMessage ->
invokeEnterMethods ->
enter -> WifiStateMachine.java //InitialState类中
WifiNative.stopHal ->
stopHalNative -> WifiNative.java
android_net_wifi_stopHal com_android_server_wifi_WifiNative.cpp //没做啥.
mWifiNative.unloadDriver -> /初始化的时候先不加载wifi driver.
android_net_wifi_unloadDriver -> com_android_server_wifi_WifiNative.cpp
wifi_unload_driver -> wifi.c
check_wifi_preload ->
open(WIFI_PRELOAD_INF, O_RDONLY); //去打开/sys/class/rkwifi/preload,能打开说明wifi driver被预加载了,kernel驱动默认开机会生成preload文件,由宏CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP控制.
property_set(DRIVER_PROP_NAME, "unloaded"); //设置property "wlan.driver.status"为unloaded
mWifiStateMachine.enableRssiPolling //使能查询RSSI(接收信号强度)
new WifiSettingsStore //跟踪wifi settings以及飞行模式情况下的交互
new ClientHandler(wifiThread.getLooper()); //用于和client也就是wifiManager交互
new WifiStateMachineHandler(wifiThread.getLooper()); //用于和WifiStateMachine交互的handler
new WifiController //StateMachine的具体实现,针对不同wifi配置的控制,如AP, STA的不同处理,大部分最终转到WifiStateMachine处理.
参考:
http://www.voidcn.com/blog/wx419209161/article/p-4578111.html
相关文章推荐
- [RK3288][Android6.0] WiFi的驱动初始化过程小结
- [RK3288][Android6.0] WiFi在Settings中的热点开启流程小结
- [RK3288][Android6.0] 网络服务Netd初始化流程小结
- [RK3288][Android6.0] USB hub初始化流程小结
- [RK3288][Android6.0] USB WiFi驱动流程小结
- [RK3288][Android6.0] Display驱动初始化流程小结【转】
- [RK3288][Android6.0] Display驱动初始化流程小结
- [RK3288][Android6.0] 输入法框架开机初始化部分小结
- [RK3288][Android6.0] 串口驱动流程小结
- [RK3288][Android6.0] 开机播放音乐流程小结
- [RK3288][Android6.0] PWM backlight 驱动流程小结
- [RK3288][Android6.0] 系统调试串口驱动流程小结
- [RK3288][Android6.0] Audio录音frame rate设置流程小结
- [RK3288][Android6.0] Camera HAL层拍照编码成JPEG流程小结
- [RK3288][Android6.0] WiFi之mac80211知识点小结
- [RK3288][Android6.0] Camera驱动初始化流程
- [RK3288][Android6.0] PWM backlight 驱动流程小结
- [RK3288][Android6.0] Audio的音量设置流程小结
- [RK3288][Android6.0] WiFi在Setting中的开启过程小结
- [RK3288][Android6.0] ION 驱动流程小结