[RK3288][Android6.0] WiFi之wpa_supplicant初始化过程
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
主要结构体:
wpa_interface: 每个网络接口的表示,可以支持多个
wpa_supplicant: 每个网络接口相对一个
wpa_params: 记录与网络接口无关的一些参数
wpa_global: 包含所有信息
流程说明:
2.1 main()
a. wpa_supplicant_init(), 初始化WPAS
b. wpa_supplicant_add_iface(), 添加网络接口
c. wpa_supplicant_run(), 运行处理收发消息
2.2 wpa_supplicant_init()
a. eap_register_methods() 注册EAP方法
b. 申请struct wpa_global内存
c. 设置wpa_global中的wpa_params中的参数
d. wpa_supplicant_global_ctrl_iface_init(), 初始化wpa_global中的ctrl_interface
e. wifi_display_init(), wifi display 初始化
2.3 wpa_supplicant_add_iface()
a. wpa_supplicant_alloc(), 分配struct wpa_supplicant
b. wpa_supplicant_init_iface(), 网络初始化工作,包括读取配置文件,初始化驱动,创建和driver通信的netlink,获取硬件特性以及能力,wpa,控制接口,bss, eapol初始化
c. wpa_supplicant_ctrl_iface_init(), 创建和Framework通信的socket
2.4 wpa_supplicant_run()
socket都是通过eloop_register_read_sock()接口来把回调函数注册到eloop循环中,一旦有event到来就能接收到
具体流程:
参考:
《深入理解Android Wi-Fi、NFC和GPS卷》
wpa_supplicant 的初始化