分析wpa_supplicant起始函数main源码

本文分析了wpa_supplicant v8版本在Android 10系统中的启动过程,包括源码目录结构、main函数解析、不同WiFi芯片类型的处理流程、参数配置文件wpa_config.txt的读取方式等。

wpa_supplicant的目录及文件

本篇blog的源码来源于安卓10,对应的wpa_supplicant版本为8。
先来看下wpa_supplicant代码的目录结构
源码目录:

xxx@ubuntu-07:~/workspace/rk3399-android-10/external/wpa_supplicant_8$ ls
Android.mk    CONTRIBUTIONS  hostapd  MODULE_LICENSE_BSD_LIKE  OWNERS  src    wpa_supplicant
CleanSpec.mk  COPYING        hs20     NOTICE                   README  tests

xxx@ubuntu-07:~/workspace/rk3399-android-10/external/wpa_supplicant_8$ cd src/

xxx@ubuntu-07:~/workspace/rk3399-android-10/external/wpa_supplicant_8/src$ ls
ap      crypto   eap_common  eapol_supp  eap_server  l2_packet  Makefile  pae     rsn_supp  utils
common  drivers  eapol_auth  eap_peer    fst         lib.rules  p2p       radius  tls       wps

关于上面每个文件夹大致的功能是什么网上有很多blog来讲述,讲的也非常清楚,可自行查看。

main

分析初始化之前,先看下安卓10跑起来后,在控制台输入logcat指令以后输出的系统debug信息。
logcat输出:

[17:16:13][   46.176721] init: starting service 'wpa_supplicant'...
。。。。。一些其他的init输出
[17:16:13]11-18 11:10:06.091 +0000  2017  2017 I wpa_supplicant: argc = 2

第一句话是系统内核输出的,并非wpa_supplicant;这句话意味着wpas服务被启动,即调用了wpas的开始函数。经对比上方的输出和下方的代码,即可知,wpa_supplicant服务一开始进入的函数就是它~/wpa_supplicant/main.c里的main函数,上面贴出的最后一句输出和对应main里的printf对应上了。

wpa_supplicant的main函数:~/rk3399-android-10/external/wpa_supplicant_8/wpa_supplicant/main.c

#define BROADCOM_MODULE_NAME "[broadcom]"
#define REALTEK_MODULE_NAME "[realtek]"
#define SSV_MODULE_NAME "[ssv]"
#define ESP_MODULE_NAME "[esp]"

int main(int argc, char *argv[])
{
   
   
        int ret = -1;
        char module_type[20]={
   
   0};//实际上没有使用到

        wpa_printf(MSG_INFO,"argc = %d\n",argc);
        //这就是log里输出的那句,说明这是整个wpas服务的起始函数
        //至于谁实际上调用了这个main函数并将argc和argv传进来,我暂时没找到,希望清楚这里的大佬指导一下
        if(argc == 2) {
   
   
                if (check_wifi_chip_type() == REALTEK_WIFI) {
   
   //别的文件里定义的函数和属性,见之后贴出的代码
                        wpa_printf(MSG_INFO,"Start rtl_wpa_supplicant\n");
                        ret = read_wpa_param_config(REALTEK_MODULE_NAME,argv[1]);//根据不同的芯片类型,读取wpa_config.txt中的不同属性
                        //REALTEK_MODULE_NAME为上方定义的全局变量
                } else if (check_wifi_chip_type() == BROADCOM_WIFI) {
   
   //以下同上
                        wpa_printf(MSG_INFO,"Start bcm_wpa_supplicant\n");
                        ret = read_wpa_param_config(BROADCOM_MODULE_NAME,argv[1]);
                } else if (check_wifi_chip_type() == RK912_WIFI ||
                                check_wifi_chip_type() == SSV_WIFI) {
   
   
                        wpa_printf(MSG_INFO,"Start ssv_wpa_supplicant\n");
                        ret = read_wpa_param_config(SSV_MODULE_NAME,argv[1]);
                } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值