Framework中,wifistatemachine拆散为ModeStateMachine,softAp相关从wifistatemachine迁移至softApStateMachine确保wifi的各个模式独立
Framework启动:
WifiManager::setWifiEnabled
->WifiServiceImpl::WifiManager::setWifiEnabled
->WifiController::StaDisabledState::processMessage(CMD_WIFI_TOGGLED)
->WifiController::StaEnabledState::Enter()
->ActiveModeWarden::enterClientMode()
->ActiveModeWarden::ModeStateMachine::checkForAndHandleModeChange(CMD_START_CLIENT_MODE)
->ClientModeActiveState::Enter()
->ClientModeManager::Start()
->ClientModeManager::ClientModeStateMachine::processMessage(CMD_START)
->WifiNative::setupInterfaceForClientInConnectivityManager
HAL启动承接framework启动:
StartHal()
->StartVendorHal()
->HalDeviceManager::startWifi()
HIDL -> Native:
->wifi::startInternal()
->initializeModeControllerAndLegacyHal
->ModeController::LoadDriver()
->wifi_hal_common::wifi_load_driver()
->insmod(wlan.ko)
->wifi_legacy_hal::initialize()
->initHalFuncTableWithStubs()
->init_wifi_vendor_hal_func_table()
Driver启动承接HAL启动: 高通的驱动集体过程就不贴出来了
wlan_module_init() 注册wlan驱动
一般来讲,以上过程后,会触发probe操作。探测总线成功后,回调probe函数指针。
这时wifi驱动算是加载成功, 驱动总线接口配置, 开启电源管理, 初始化mac地址, firmware实在这里加载并解析mac地址的,接口注册为网络设备wlan0, 开启P2P接口,p2p0
wlan_probe()
Supplicant启动承接framework启动:驱动开启了,supplicant才有netlink连接可以建立
StartSupplicant()
->startAndWaitForSupplicantConnection()
->StartDaemon() 启动wpa_supplicant
HIDL -> Native
->Main() -> 解析参数
->wpa_supplicant_init()
->eap_register_methods() 注册eap状态机
->eloop_init() 创建loop,用于实现supplicant中的异步化
->wpas_notify_supplicant_initialized() 初始化与上层对应的喊出表,用于返回底层信息
->wpa_supplicant_add_iface()
->wpa_supplicant_init_iface()
->wpas_init_driver()
->wpa_drv_init()
->wpa_driver_nl80211_init() 初始化netlink连接
->wpa_supplicant_driver_init()配置mac,扫描参数,supplicant状态机初始化
->wpas_wps_init() wps初始化,配置相关认证方法
->wpa_supplicant_init_eapol() 初始化eap认证参数
->wifi_display_init() 开启 wifidisplay功能