您的位置:首页 > 移动开发 > Android开发

[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: