1.启动命令 wpa supplicant在启动时,启动命令可以带有很多参数,目前我们的启动命令如下: wpa_supplicant /system/bin/wpa_supplicant -Dwext -ieth0 -c/data/wifi/wpa_supplicant.conf -f/data/wifi/wpa_log.txt wpa_supplicant 对于启动命令带的参数,用了两个数据结构来保存, 一个是wpa_params,另一个是wpa_interface. 这主要是考虑到wpa_supplicant 是可以同时支持多个网络接口的。 wpa_params 数据结构主要记录与网络接口无关的一些参数设置。 而每一个网络接口就用一个wpa_interface 数据结构来记录。 在启动命令行中,可以用-N 来指定将要描述一个新的网络接口,对于一个新的网络接口,可以用下面六个参数描述: -i :网络接口名称 -c:配置文件名称 -C:控制接口名称 -D:驱动类型 -p:驱动参数 -b:桥接口名称 2. w pa_supplicant 初始化流程 2.1. main()函数: 在这个函数中,主要做了四件事。 a.解析命令行传进的参数。 b.调用wpa_supplicant_init()函数,做 wpa_supplicant 的初始化工作。 c.调用wpa_supplicant_add_iface()函数,增加网络接口。 d.调用wpa_supplicant_run()函数,让 wpa_supplicant 真正的run 起来。 2.2. w pa_supplicant_init()函数: a.打开 debug 文件。 b.注册 EAP peer 方法。 c.申请 wpa_global 内存,该数据结构作为统领其他数据结构的一个核心, 主要包括四个部分: wpa_supplicant *ifaces /*每个网络接口都有一个对应的wpa_supplicant 数据结构,该指针指向最近加入的一个,在wpa_supplicant 数据结构中有指针指向 next*/ wpa_params params /*启动命令行中带的通用的参数*/ ctrl_iface_global_priv *ctrl_iface /*global 的控制接口*/ ctrl_iface_dbus_priv *dbus_ctrl_iface /*dbus 的控制接口*/ d.设置 wpa_global 中的wpa_params 中的参数。 e.调用eloop_init 函数将全局变量 eloop 中的user_data 指针指向 wpa_global。 f.调用wpa_supplicant_global_ctrl_iface_init 函数初始化global 控制接口。 g.调用wpa_supplicant_dbus_ctrl_iface_init 函数初始化dbus 控制接口。 h.将该 daemon 的 pid 写入 pid_file 中。 2.3. w pa_supplicant_add_iface()函数: 该函数根据启动命令行中带有的参数增加网络接口,有几个就增加几个。 a.因为...