1. 程式人生 > >Android4.4 wpa_supplicant深入分析之wpa_supplicant初始化流程

Android4.4 wpa_supplicant深入分析之wpa_supplicant初始化流程

Android系統中,wpa_supplicant啟動是通過“setprop ctrl.start wpa_supplicant”來觸發init程序去fork一個子程序來完成的。wpa_supplicant在init配置檔案中被定義為一個service。

  1. service wpa_supplicant /system/bin/wpa_supplicant \  
  2.     -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \  
  3.     -I/system/etc/wifi/wpa_supplicant_overlay.conf \  
  4.     -O/data/misc/wifi/sockets \  
  5.     -e/data/misc/wifi/entropy.bin [email protected]:wpa_wlan0  
  6.     #   we will start as root and wpa_supplicant will switch to user wifi
  7.     #   after setting up the capabilities required for WEXT
  8.     #   user wifi
  9.     #   group wifi inet keystore
  10.     class main  
  11.     socket wpa_wlan0 dgram 660 wifi wifi  
  12.     disabled  
  13.     oneshot  
以上眾多啟動引數中,最重要的是通過“-c“引數制定的wpa_supplicant啟動配置檔案。
  1. ctrl_interface=/data/misc/wifi/sockets  
  2. driver_param=use_p2p_group_interface=1p2p_device=1  
  3. update_config=1  
  4. device_name=********  
  5. manufacturer=BROADCOM  
  6. model_name=*********  
  7. model_number=*********  
  8. serial_number=  
  9. device_type=10-0050F204-5  
  10. config_methods=physical_display virtual_push_button  
  11. p2p_listen_reg_class=81  
  12. p2p_listen_channel=11  
  13. p2p_oper_reg_class=81  
  14. p2p_oper_channel=11  
  15. p2p_ssid_postfix=-Android_7006  
  16. persistent_reconnect=1  
  17. network={  
  18.     ssid="AP_5D34E3"
  19.     psk="12345678"
  20.     key_mgmt=WPA-PSK  
  21.     priority=1  
  22. }  
  23. network={  
  24.     ssid="Android-02"
  25.     psk="android.com"
  26.     key_mgmt=WPA-PSK  
  27.     priority=2  
  28. }  

(1)ctrl_interface知名控制介面Unix域socket的檔名。

(2)update_config表示如果wpa_supplicant執行過程中修改了配置資訊,則需要把它們儲存到此wpa_supplicant檔案中。

(3)從device_name到config_methods都和wpa_supplicant設定有關。

(4)p2p等選項和WiFi P2P有關。

(5)wpa_supplicant執行過程中得到的無線網路資訊都會通過”network“配置項儲存到配置檔案中。如果該資訊完整,一旦wpa_supplicant找到該無線網路就會嘗試用儲存的資訊去加入它。(這也是手機能自動加入周圍某個曾經的路過的無線網路的原因)。

(6)network項包括的內容比較多。network項展示了該無線網路的ssid、金鑰管理方法(key management)、身份認證方法及密碼等資訊。network中的priority表示無線網路的優先順序。其作用是,如果同時存在多個可用的無線網路,wpa_supplicant有限選擇priority搞得那一個。

main函式分析[-->main.c::main]

  1. int main(int argc, char *argv[])  
  2. {  
  3.     int c, i;  
  4.     struct wpa_interface *ifaces, *iface;  
  5.     int iface_count, exitcode = -1;  
  6.     struct wpa_params params;  
  7.     struct wpa_global *global;  
  8.     if (os_program_init())  
  9.         return -1;  
  10.     os_memset(¶ms, 0, sizeof(params));  
  11.     params.wpa_debug_level = MSG_INFO;  
  12.     iface = ifaces = os_zalloc(sizeof(struct wpa_interface));  
  13.     if (ifaces == NULL)  
  14.         return -1;  
  15.     iface_count = 1;  
  16.     wpa_supplicant_fd_workaround(1);  //輸入輸出重定向到/dev/null裝置
  17.     for (;;) {  
  18.         c = getopt(argc, argv,  
  19.                "b:Bc:C:D:de:f:g:G:hi:I:KLNo:O:p:P:qsTtuvW");  
  20.         if (c < 0)  
  21.             break;  
  22.         switch (c) {  
  23.         case'b':  
  24.             iface->bridge_ifname = optarg;  
  25.             break;  
  26.         case'B':  
  27.             params.daemonize++;  
  28.             break;  
  29.         case'c':  
  30.             iface->confname = optarg;    //指定配置檔名。注意,該引數賦值給了wpa_interface中的變數
  31.             break;  
  32.         case'C':  
  33.             iface->ctrl_interface = optarg;  
  34.             break;  
  35.         case'D':  
  36.             iface->driver = optarg;         //指定driver名稱。注意,該引數賦值給了wpa_interface中的變數
  37.             break;  
  38.         case'd':  
  39. #ifdef CONFIG_NO_STDOUT_DEBUG
  40.             printf("Debugging disabled with "
  41.                    "CONFIG_NO_STDOUT_DEBUG=y build time "
  42.                    "option.\n");  
  43.             goto out;  
  44. #else /* CONFIG_NO_STDOUT_DEBUG */
  45.             params.wpa_debug_level--;  
  46.             break;  
  47. #endif /* CONFIG_NO_STDOUT_DEBUG */
  48.         case'e':  
  49.             params.entropy_file = optarg;  //制定初始隨機數檔案,用於後續隨機數的生成
  50.             break;  
  51. #ifdef CONFIG_DEBUG_FILE
  52.         case'f':  
  53.             params.wpa_debug_file_path = optarg;  
  54.             break;  
  55. #endif /* CONFIG_DEBUG_FILE */
  56.         case'g':  
  57.             params.ctrl_interface = optarg;  
  58.             break;  
  59.         case'G':  
  60.             params.ctrl_interface_group = optarg;  
  61.             break;  
  62.         case'h':  
  63.             usage();  
  64.             exitcode = 0;  
  65.             goto out;  
  66.         case'i':  
  67.             iface->ifname = optarg;  //指定網路裝置介面名,本例是"wlan0"
  68.             break

    相關推薦

    Android4.4 wpa_supplicant深入分析wpa_supplicant初始流程

    Android系統中,wpa_supplicant啟動是通過“setprop ctrl.start wpa_supplicant”來觸發init程序去fork一個子程序來完成的。wpa_supplicant在init配置檔案中被定義為一個service。

    指紋識別分析framework初始流程

    1、概述   在系統開機的時候,會建立systemserver程序,該程序會啟動framework層的各種後臺服務,其中包括FingerprintService、fingerprintd等服務。初始化流程時序如下: 2、SystemServer.java

    Android4.4 wpa_supplicant深入分析初識wpa_supplicant

    本文主要分析wpa_supplicant_8,主要有三個子目錄: hostapd:當手機進入Soft AP模式時,手機將扮演AP的角色,需要hostapd來提供AP的功能。這就是wifi熱點的實現。 wpa_supplicant:Station模式,也叫Managed模式。

    Android4.4.2原始碼分析WiFi模組(一)

    已經寫了幾篇關於Android原始碼的,原始碼程式碼量太大,所以如果想分析某個模組可能不知如何下手,說一下思路 1,分析原始碼英文閱讀能力要夠,想要分析某個模組一般找模組對應的英文,就是模組 2,找到之後首先檢視清單配置檔案Androidmani.fest,找到程式主介面activity 3,通過檢視配置檔

    Android4.4.2原始碼分析WiFi模組(二)

    接著上一篇繼續對WiFi原始碼的分析 onResume方法中 6>,首先是呼叫WiFiEnabler的resume方法對switch進行管理 接下來註冊廣播 getActivity().registerReceiver(mReceiver, mFilter);

    第3階段——內核啟動分析start_kernel初始函數(5)

    本質 aware 字符 信息 異常 性能 ack ifdef 取數 內核啟動分析之start_kernel初始化函數(init/main.c) stext函數啟動內核後,就開始進入start_kernel初始化各個函數, 下面只是淺嘗輒止的描述一下函數的功能,很多函數真正理

    python資料分析numpy初始(一)

    以下都用numpy的標準“import numpy as np” 1.numpy是同構資料多維容器,同構即資料型別相同 2.初始化: 2.1np.arange([start,] end [, step

    Spring Security4.0.3原始碼分析FilterChainProxy初始

    最近在學習安全框架Spring Security,想弄清楚其中實現的具體步驟,於是下定決心,研究一下Spring Security原始碼,這篇部落格的目的是想把學習過程記錄下來。學習過程中主要參考了http://dead-knight.iteye.com/blo

    openstackneutron程式碼分析---(1)neutron初始流程

    Neutron是openstack中用於管理網路的專案。neutron程式碼的入口配置檔案neutron/setup.cfg,我們可以通過這個檔案瞭解整個專案的程式碼結構。文章中程式碼為neutron kilo版本。部分setup.cfg內容如下: … [entry_po

    Spring MVC原始碼分析DispatcherServlet初始過程

    DispatcherServelt本質是也是Servlet,由Servlet容器進行載入。 1.Servlet介面提供了Servlet的初始化方法:init(ServletConfig config)。 2.GenericServlet實現了方法init(S

    Spring原始碼分析容器初始

    AnnotationConfigApplicationContext 核心類,BeanDefinition註冊器,所有的BeanD

    Android wpa_supplicant原始碼分析--啟動全域性初始

    1. wpa_supplicant簡介 wpa_supplicant是用來用來支援無線中各種加密方式的,包括WEP、WPA/WPA2和WAPI(中國特有)、EAP(8021x)。wpa_s通過socket與上層(framework)和底層(driver)通訊,向上接收命令和傳

    Android Wi-Fi原始碼分析wpa_supplicant初始(四):wpa_supplicant_init_iface函式分析

    wpa_config_read分析 路徑為:external\wpa_supplicant_8\wpa_supplicant\config_file.c struct wpa_config * wpa_config_read(const char *na

    Android Wi-Fi原始碼分析wpa_supplicant初始(一)

    一. wpa_supplicant配置編譯 將對應的平臺的wpa_supplicant包解壓改名為wpa_supplicant_8替換掉external下的wpa_supplicant_8目錄 執行: source build/envsetup.sh

    Android Wi-Fi原始碼分析wpa_supplicant初始(三):wpa_supplicant_add_iface函式分析

    路徑為:external\wpa_supplicant_8\wpa_supplicant\wpa_supplicant.c /** * wpa_supplicant_add_iface - Add a new network interface * @

    spring原始碼學習路---深度分析IOC容器初始過程(三)

    分析FileSystemXmlApplicationContext的建構函式,到底都做了什麼,導致IOC容器初始化成功。 public FileSystemXmlApplicationContext(String[] configLocations, boolean ref

    Dubbo深入分析Cluster層

    Cluster介面 整個cluster層可以使用如下圖片概括: 各節點關係: 這裡的Invoker是Provider的一個可呼叫Service的抽象,Invoker封裝了Provider地址及Service介面資訊; Directory代表多個Invoker,可以把它看成Lis

    Spring-Cloud-Gateway原始碼分析系列 | Spring-Cloud-GatewayGatewayProperties初始載入

    推薦 Spring Boot/Cloud 視訊: 在Spring-Cloud-Gateway初始化時我們在GatewayAutoConfiguration配置中看到了有初始化載入GatewayProperties例項的配置,接下來學習下GatewayPrope

    深入分析 Flutter 初始流程

    在調研 Flutter 動態化方案的時候,需要了解 Flutter 載入 dart 產物的流程,閱讀了一部分原始碼,順便也讀了初始化相關的程式碼。於是梳理了一遍 FLutter 的初始化流程 flutter的原始碼下載地址在 github 上可以找到,具體地址: github-flutter/engine

    springboot2.0 深入解析原理-Bean 初始回撥前後進行自定義操作BeanPostProcessor

    1 demo 版本說明 springboot版本:2.0.5.RELEASE jdk版本:1.8.0_144 在閱讀該部落格前建議大家一定要把demo寫下來 在自己的環境下,根據操作靜下心來一步步看。閱讀原始碼本身是一個比較費神的操作,建議大家一定要多看 看明白後自