1 Android平台的Wifi模块移植要点
1.1 Wifi结构
user interface
Android WiFiService
WPA_Supplicant
DHD Driver
Dongle Binary
BCM43xxHardware
蓝色:需要修改
黑色:不需要修改
蓝色部分是为了在android环境下,支持bcm43xx芯片需要修改的部分,各个部分的功能如下:
1. User interface(用户接口层):控制和设置wifi的用户接口层
2. Android wifi service:它是android系统中的wifi服务部分,主要用来启动和停止wpa_supplicant,并作为用户接口层和wpa_supplicant交互的桥梁存在
3. Wpa_supplicant:支持wpa和wapi的外部库
4. Dhd driver:wifi模块的驱动
5. Dongle binary:BCM43xx的固件
6. BCM43xx:wifi的硬件芯片(是一个组合集成芯片)
1.2 Wifi模块环境
Wifi模块环境包括以下部分:
1. bcm43xx驱动源码
2. wpa_supplicant和支持WAPI的wapilib库
3. nvram.txt(BCM43xx芯片配置文件)
4. wpa_supplicant.conf和wifi固件
一般来说,第三和第四条件的文件在BCM43xx源码中都有包含。
1.3 Wifi模块的编译
1.3.1 Wifi驱动源码
这里不以某个类型的BCM43xx芯片和android版本作为特例来讲解wifi模块的编译过程,只是对编译的通用部分做简要的说明。
一般来说,wifi模块的编译可采用两种红方式:一是内部编译,二是模块编译。通常使用的是模块编译,这里也以模块编译wifi模块为例来说明wifi模块的编译过程。
在wifi模块驱动源码中,主要包含以下几个目录:
Firmware:里面会提供对应BCM43xx芯片的固件
Config:提供wpa_supplicant.conf和nvram.txt以及dhcpcd.conf,还有android.mk文件。如果没有上面的配置文件,需要找到放入该目录。
Android.mk:这是一个文件,也是编译android平台编译wifi模块的入口
Src:wifi驱动的源码目录
其实,你看到的broadcom提供的驱动源码可能的组织方式跟上面是有差别的,但大致的内容差不多,上面只是针对模块源码中目录和文件的不同用途来说明的。
1.3.2 在android平台添加BCM43xx驱动
要在android平台编译wifi模块,首先要将wifi模块的源码添加到android平台下的目录中。至于添加到什么地方也不是固定的,一般会添加到vendor目录下的某个目录下,下面我们把BCM43xx模块源码放在vendor/xxxx/wlan/bcm43xx下(XXXXX代表产品名称)。要知道,在添加源码之前,这个bcm43xx目录是不存在的,需要手动创建,并在该目录下创建android和src两个目录:
PC$ cd<ANDROID_ROOT>
PC$ mkdir ‐p vendor/xxxx/wlan/bcm4325/
PC$ cdvendor/xxxx/wlan/bcm4325/
PC$ mkdirandroid src
PC$ ls
android src
在创建好上面的目录后,就可以在目录下添加BCM43xx的相关源码了,src存放的是驱动源码,android目录下主要存放固件(即二级制镜像),编译文件(Android.mk),配置文件(nvram.txt和wpa_supplicant.conf)等。
添加好相关源码后,还需要做一定的修改工作(主要对编译文件的修改),不然模块无法被正常编译的,Android.mk的内容修改操作如下。
PC$ cp<WORK>/bcm4325_source/open‐src/src/dhd/android/config/Android.mk
<ANDROID_ROOT>/vendor/xxxx/wlan/bcm4325/android
PC$ cd<ANDROID_ROOT>/vendor/xxxx/wlan/bcm4325/android
PC$ viAndroid.mk //到这里,找到Android.mk文件,文件内容如下
……
#
# Install WLAN Driver, firmware, and configurationfiles.
#
local_target_dir :=$(TARGET_OUT_ETC)/firmware //这里定义local_target_dir