🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
本实例的背景情况如下: 笔者有一台三星Galaxy Note2手机,其OS为Android 4.1.2。现在,笔者打算编译一个AOSP(Android Open Source Project)的wpa_supplicant程序以替换Note2中原有的wpa_supplicant。 **提示**:AOSP即Google公版Android源码。几乎所有手机厂商都会根据芯片、硬件以及厂商自定义的特性去修改它。由于Note 2源码不公开,所以笔者只能编译AOSP版的wpa_supplicant。 假设读者已经按第1章要求部署完毕Android 4.1源码和开发环境,那么接下来要做的是: ~~~ cd 4.1source #首先进入4.1源码根目录 source build/envsetup #建立Android源码编译环境 lunch #选择要编译的设备和版本,笔者选择了1,代表full-eng。eng代表工程版,该选项对应的目标设备类型 #(TARGET_PRODUCT)为generic,其编译出来的镜像文件可由模拟器加载并运行 ~~~ 由上述配置可知,笔者将使用generic的版本来编译一个wpa_supplicant以运行在真实的机器上。 **提醒**:通过执行lunch命令可知,不同的设备应有对应的编译配置项。由于笔者没有Note 2的源码,所以只能尝试编译generic版本。 接下来要为generic平台定制所使用的wpa_supplicant版本,这是通过修改BoardConfig.mk来完成的。 **BoardConfig.mk** ~~~ #在此文件最后添加如下内容: WPA_SUPPLICANT_VERSION := VER_0_8_X #表明使用wpa_supplicant_8 BOARD_WPA_SUPPLICANT_DRIVER := NL80211 #表明驱动使用Nl80211 BOARD_WLAN_DEVICE := bcmdhd #表明kernel中的wifi设备为博通公司的bcmdhd #编译博通公司驱动相关的静态库,该库对应的代码也在AOSP源码中,位置是, #hardware/broadcom/wlan/bcmdhd/wpa_supplicant_8_lib/ BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_bcmdhd ~~~ 巧合的是,Note 2使用的wlan芯片刚好为bcmdhd。 除了修改BoardConfig.mk外,WPAS也定义了自己的编译配置文件android.config,其内容如下: ~~~ ......#该文件主要定义了编译时生成的宏,各平台根据自己的硬件情况去设置需要编译的内容 # Driver interface for generic Linux wireless extensions CONFIG_DRIVER_WEXT=y #可注释这一条以取消编译WEXT相关代码 # Driver interface for Linux drivers using the nl80211 kernel interface CONFIG_DRIVER_NL80211=y #可去掉此行的注释符号以增加对Nl80211的支持 CONFIG_LIBNL20=y ......#其他很多编译配置项都可在此文件中修改 #注意,此文件中对CONFIG_DRIVER_NL80211的修改和BoardConfig.mk中的BOARD_WPA_SUPPLICANT_DRIVER #相重合。BoardConfig.mk的优先级较高,所以请读者先修改它 ~~~。 配置完毕后,开始编译: ~~~ #首先要编译wpa_supplicant依赖的静态库lib_driver_cmd_bcmdhd mmm hardware/broadcom/wlan/bcmdhd/wpa_supplicant_8_lib/ mmm external/wpa_supplicant_8 #生成wpa_supplicant,同时也会生成wpa_cli ~~~ 然后将编译后wpa_supplicant替换Note 2的/system/bin/wpa_supplicant并设置其为可运行(通过chmod命令设置其权限位0755)。同时,笔者也把wpa_cli push到/system/bin下为后续测试做准备。 经过测试,笔者发现AOSP的wpa_supplicant以及wpa_cli均能正常工作在Note 2上。这也间接表明Note 2并未对wpa_supplicant以及博通芯片相关的代码做较大改动。 **注意**:严格来说,android.cfg应该是唯一的编译控制文件。但由于底层wlan芯片不同,WPAS可能还依赖其他模块。所以,在具体实施时,BoardConfig.mk(或其他文件,视具体情况而定)也需要做修改。