Android移植Wifi驱动之wpa_supplicant通信socket设置

1.3.4       在android中使用BCM43xx

前面的过程只是在android系统中添加编译了BCM43xx驱动源码,但是要想在android中使用它,还需要费一番功夫。需要修改的地方在开始的地方已经用蓝色背景标注了,在这里我们要看看到底要修改哪些文件。

1.3.4.1        hardware/libhardware_legacy/wifi/wifi.c

为BCM43xx驱动模块做适当修改。Wifi.c作为加载wifi驱动模块和启动关闭wpa_supplicant的重要角色而存在,为了使wifi能更好的工作,该文件中的一些变量参数必须被适当的设置(根据wpa_supplicant.conf)。

PC$ vi hardware/libhardware_legacy/wifi/wifi.c

......

#define WIFI_DRIVER_MODULE_PATH

"/system/lib/modules/dhd.ko"

......

#define WIFI_DRIVER_MODULE_NAME"dhd"

......

#define WIFI_DRIVER_MODULE_ARG

"firmware_path=/etc/firmware/sdio-g-cdc-reclaim-idsup-wme-ccxwapi.

bin nvram_path=/etc/firmware/nvram_4325b0.txt"

......

#define WIFI_TEST_INTERFACE "eth0"

......

static const char IFACE_DIR[] = "";

......

static const char SUPP_CONFIG_TEMPLATE[]=

"/data/misc/wifi/wpa_supplicant.conf";

……

static const char SUPP_CONFIG_FILE[] =

"/etc/wifi/wpa_supplicant.conf";

......

 

上面的红色部分,就是对wifi驱动的特殊化定义,不同的wifi驱动会有不同的定义。修改还包括了固件的和配置文件的路径,以及接口名的相关定义。

WIFI_TEST_INTERFACE定义的是wpa_supplicant和UI的交互接口名,当通过property_get()函数获取wifi接口名错误时,就会使用此定义的接口名。Property_get()函数获取的接口名,就是init.xx.rc文件中的接口定义的wifi.interface:

Setprop wifi.interface “eth0”

SUPP_CONFIG_TEMPLATE定义的是wpa_supplicant配置文件的临时文件。而SUPP_CONFIG_FILE定义的是wpa_supplicant运行时使用的配置文件,并且对wifi配置的修改也会保持到这个文件里。

IFACE_DIR是wpa_supplicant控制接口的目录,该目录下的接口被UI用来连接到wpa_supplicant,这个目录是由wpa_supplicant决定的,其实,这个接口实际上是一个socket,在wpa_supplicant启动时被创建,wpa_supplicant_ctrl_iface_init()

中有两种方式来创建这个socket接口:

       (1)android系统的socket

它使用wpa_%ctrl_interface%组合来定义自己的名字,通过socketwpa_eth0 dgram ...命令来生成的(在init.rc中),如果使用这种socket,下面的代码中的接口名必须是一直的:

ctrl_interface=eth0 (In wpa_supplicant.conf)

"socket wpa_eth0 ..." (In init.*.rc )

setprop wifi.interface "eth0" (In init.*.rc)

wpa_supplicant ‐ieth0 ... (In init.*.rc)

此时,IFACE_DIR的定义为NULL。

       (2)特殊socket

Wpa_supplicant会通过wpa_supplicant.conf中的ctrl_interface目录来创建控制接口socket,而这个值一般被定义为:"ctrl_interface=DIR=/data/misc/....",这个socket的名字由wpa_supplicant的“-i”参数传递,如果使用这种方式的socket,下面的变量定义必须一致:

ctrl_interface=DIR=/data/misc/ (In wpa_supplicant.conf)

IFACE_DIR=/data/misc/ (In wifi.c)

 

你可能感兴趣的:(Android,4.4.0)