Android4.4 wpa_supplicant深入分析之wpa_supplicant初始化流程
Android系統中,wpa_supplicant啟動是通過“setprop ctrl.start wpa_supplicant”來觸發init程序去fork一個子程序來完成的。wpa_supplicant在init配置檔案中被定義為一個service。
- service wpa_supplicant /system/bin/wpa_supplicant \
- -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
-
-I/system/etc/wifi/wpa_supplicant_overlay.conf \
- -O/data/misc/wifi/sockets \
- -e/data/misc/wifi/entropy.bin [email protected]:wpa_wlan0
- # we will start as root and wpa_supplicant will switch to user wifi
- # after setting up the capabilities required for WEXT
- # user wifi
- # group wifi inet keystore
-
class main
- socket wpa_wlan0 dgram 660 wifi wifi
- disabled
- oneshot
- ctrl_interface=/data/misc/wifi/sockets
- driver_param=use_p2p_group_interface=1p2p_device=1
- update_config=1
- device_name=********
- manufacturer=BROADCOM
-
model_name=*********
- model_number=*********
- serial_number=
- device_type=10-0050F204-5
- config_methods=physical_display virtual_push_button
- p2p_listen_reg_class=81
- p2p_listen_channel=11
- p2p_oper_reg_class=81
- p2p_oper_channel=11
- p2p_ssid_postfix=-Android_7006
- persistent_reconnect=1
- network={
- ssid="AP_5D34E3"
- psk="12345678"
- key_mgmt=WPA-PSK
- priority=1
- }
- network={
- ssid="Android-02"
- psk="android.com"
- key_mgmt=WPA-PSK
- priority=2
- }
(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]
- int main(int argc, char *argv[])
- {
- int c, i;
- struct wpa_interface *ifaces, *iface;
- int iface_count, exitcode = -1;
- struct wpa_params params;
- struct wpa_global *global;
- if (os_program_init())
- return -1;
- os_memset(¶ms, 0, sizeof(params));
- params.wpa_debug_level = MSG_INFO;
- iface = ifaces = os_zalloc(sizeof(struct wpa_interface));
- if (ifaces == NULL)
- return -1;
- iface_count = 1;
- wpa_supplicant_fd_workaround(1); //輸入輸出重定向到/dev/null裝置
- for (;;) {
- c = getopt(argc, argv,
- "b:Bc:C:D:de:f:g:G:hi:I:KLNo:O:p:P:qsTtuvW");
- if (c < 0)
- break;
- switch (c) {
- case'b':
- iface->bridge_ifname = optarg;
- break;
- case'B':
- params.daemonize++;
- break;
- case'c':
- iface->confname = optarg; //指定配置檔名。注意,該引數賦值給了wpa_interface中的變數
- break;
- case'C':
- iface->ctrl_interface = optarg;
- break;
- case'D':
- iface->driver = optarg; //指定driver名稱。注意,該引數賦值給了wpa_interface中的變數
- break;
- case'd':
- #ifdef CONFIG_NO_STDOUT_DEBUG
- printf("Debugging disabled with "
- "CONFIG_NO_STDOUT_DEBUG=y build time "
- "option.\n");
- goto out;
- #else /* CONFIG_NO_STDOUT_DEBUG */
- params.wpa_debug_level--;
- break;
- #endif /* CONFIG_NO_STDOUT_DEBUG */
- case'e':
- params.entropy_file = optarg; //制定初始隨機數檔案,用於後續隨機數的生成
- break;
- #ifdef CONFIG_DEBUG_FILE
- case'f':
- params.wpa_debug_file_path = optarg;
- break;
- #endif /* CONFIG_DEBUG_FILE */
- case'g':
- params.ctrl_interface = optarg;
- break;
- case'G':
- params.ctrl_interface_group = optarg;
- break;
- case'h':
- usage();
- exitcode = 0;
- goto out;
- case'i':
- iface->ifname = optarg; //指定網路裝置介面名,本例是"wlan0"
-
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
openstack之neutron程式碼分析---(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-Gateway之GatewayProperties初始化載入
推薦 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寫下來 在自己的環境下,根據操作靜下心來一步步看。閱讀原始碼本身是一個比較費神的操作,建議大家一定要多看 看明白後自