android wifi 初始化失败,android wpa_supplicant初始化流程及wifi打开慢原因分析

wpa_supplicant是一个独立的进程,对应的文件为external/wpa_supplicant_8/wpa_supplicant/main.c。

int main(int argc, char *argv[])

{

global = wpa_supplicant_init(¶ms);

if (global == NULL) {

wpa_printf(MSG_ERROR, "Failed to initialize wpa_supplicant");

exitcode = -1;

goto out;

} else {

wpa_printf(MSG_INFO, "Successfully initialized "

"wpa_supplicant");

}

for (i = 0; exitcode == 0 && i < iface_count; i++) {

struct wpa_supplicant *wpa_s;

wpa_s = wpa_supplicant_add_iface(global, &ifaces[i]);

if (wpa_s == NULL) {

exitcode = -1;

break;

}

if (exitcode == 0)

exitcode = wpa_supplicant_run(global);

wpa_supplicant_deinit(global);

return exitcode;

}

总体流程为wpa_supplicant_init-->wpa_supplicant_add_iface-->wpa_supplicant_init_iface-->wpa_supplicant_driver_init-->wapi_supplicant_init。

1 wpa_supplicant_init是用struct wpa_params初始化struct wpa_global,struct wpa_params是调用wpa_supplicant命令对应的参数列表。

struct wpa_global * wpa_supplicant_init(struct wpa_params *params)  对应的log有

04-28 11:14:13.444 D/wpa_supplicant(19277): wpa_supplicant v2.1-devel-4.4.4

04-28 11:14:13.444 D/wpa_supplicant(19277): Global control interface '@android:wpa_wlan0'

04-28 11:14:13.444 D/wpa_supplicant(19277): Using Android control socket 'wpa_wlan0'

04-28 11:14:13.444 I/wpa_supplicant(19277): Successfully initialized wpa_supplicant

2 wpa_supplicant_add_iface用struct wpa_global初始化struct wpa_interface,增加wlan0和p2p0两个接口。

struct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global, struct wpa_interface *iface)

04-28 11:14:13.444 D/wpa_supplicant(19277): Override interface parameter: ctrl_interface ('(null)' -> '/data/misc/wifi/sockets')

3 wpa_supplicant_init_iface负责用struct wpa_interface初始化wlan0、p2p0等代表的struct wpa_supplicant。

static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s, struct wpa_interface *iface)

{

wpa_s->conf = wpa_config_read(wpa_s->confname, NULL);

wpa_config_read(wpa_s->confanother, wpa_s->conf);

if (wpas_init_driver(wpa_s, iface) < 0)//调用wpa_supplicant_set_driver

return -1;

if (wpa_supplicant_driver_init(wpa_s) < 0)

return -1;

if (wpa_supplicant_init_eapol(wpa_s) < 0)

return -1;

} 对应的log有

04-28 11:14:13.444 D/wpa_supplicant(19277): Initializing interface 'p2p0' conf '/data/misc/wifi/p2p_supplicant.conf'

driver 'nl80211' ctrl_interface '/data/misc/wifi/sockets' bridge 'N/A'

04-28 11:14:13.444 D/wpa_supplicant(19277): Configuration file '/data/misc/wifi/p2p_supplicant.conf'

-> '/data/misc/wifi/p2p_supplicant.conf'

04-28 11:14:13.444 D/wpa_supplicant(19277): Reading configuration file '/data/misc/wifi/p2p_supplicant.conf'

04-28 11:14:13.444 D/wpa_supplicant(19277): Reading configuration file '/system/etc/wifi/p2p_supplicant_overlay.conf'

04-28 11:14:13.804 D/wpa_supplicant(19277): Initializing interface 'wlan0' conf '/data/misc/wifi/wpa_supplicant.conf'

driver 'nl80211' ctrl_interface '/data/misc/wifi/sockets' bridge 'N/A'

04-28 11:14:13.804 D/wpa_supplicant(19277): Configuration file '/data/misc/wifi/wpa_supplicant.conf'

-> '/data/misc/wifi/wpa_supplicant.conf'

04-28 11:14:14.234 D/wpa_supplicant(19277): eap_proxy: IMSI not available

4 wpa_supplicant_driver_init中包含wapi_supplicant_init,利用函数进一步初始化struct wpa_supplicant。

int wpa_supplicant_driver_init(struct wpa_supplicant *wpa_s)

{

wpa_supplicant_update_mac_addr(wpa_s);

wapi_supplicant_init(wpa_s);

wpa_drv_flush_pmkid(wpa_s);

wpa_supplicant_enabled_networks(wpa_s);

}  对应的log有

04-28 11:14:13.534 D/wpa_supplicant(19277): p2p0: Own MAC address: 3e:cb:7c:7d:20:06

04-28 11:14:13.674 D/wpa_supplicant(19277): p2p0: RSN: flushing PMKID list in the driver

04-28 11:14:14.094 D/wpa_supplicant(19277): wlan0: Own MAC address: 3c:cb:7c:7d:20:06

04-28 11:14:14.184 D/wpa_supplicant(19277): wlan0: RSN: flushing PMKID list in the driver

5 wapi_supplicant_init,其中wapi又调用了自己的Initialization函数。

struct wpa_supplicant *wapi_supplicant_init(struct wpa_supplicant *wpa_s)

{

for (;;) {

wpa_s->l2_wapi = l2_packet_init(wpa_s->ifname, wpa_drv_get_mac_addr(wpa_s), WLAN_WAPI_IFACE,

wapi_supplicant_rx_eapol, wpa_s, 0);

}

l2_packet_get_own_addr(wpa_s->l2_wapi, wpa_s->own_addr);

TE_WAPI_ASUE_Init();

}  对应的log有

04-28 11:14:13.674 I/wpa_supplicant(19277): wapi_supplicant_init: Init WAI packet p2p0

04-28 11:14:13.674 I/wpa_supplicant(19277): Own MAC address: 3e:cb:7c:7d:20:06

04-28 11:14:13.674 D/wpa_supplicant(19277):  TE_WAPI_ASUE_Init: WAPI: ASUE INIT

04-28 11:14:13.674 D/wpa_supplicant(19277):  Initialization: WAPI: Initializing WAPI Supplicant

04-28 11:14:13.674 E/wpa_supplicant(19277):  Initialization: WAPI:set Staues=1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值