Android Q wifi开启流程

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功能

你可能感兴趣的:(Android Q wifi开启流程)