最近项目上需要使用wpa_supplicant与wpa_cli相关的工具测试wifi,网上百度了下,好像要下载wpa_supplicant的源码编译,虽然网上已经有人下载交叉编译过,但是每个人的编译环境不一样,那么也会遇到各种各样的问题,那么解决方法也不相同,在交叉编译过程中,也遇到了问题,记录下编译过程及解决方法。
1. libnl交叉编译
解压:tar zxvf libnl-1.1.4.tar.gz
cd libnl-1.1.4/
环境:export PATH=/opt/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/bin$PATH
配置
./configure --prefix=/mnt/nfsroot/frank.yu/android-O/factorytest/wifi/out
删除:(
这一步一定不能忘记)
rm lib/libnl.a
可能导致编译报错(
编译出错Relocations in generic ELF (EM: 62))
编译:make CC=aarch64-linux-gnu-gcc AR=aarch64-linux-gnu-ar LD=aarch64-linux-gnu-ld
make install
2. openssl-1.0.0交叉编译
解压:tar -xzvf openssl-1.0.0.tart.gz
配置:
./config no-asm shared --prefix=/mnt/nfsroot/frank.yu/android-O/factorytest/wifi/out
export PATH=$PATH:/opt/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/bin
修改makfile:
(1)修改交叉编译器
CC= gcc
AR= ar $(ARFLAGS) r
RANLIB= /usr/bin/ranlib
NM= nm
修改为:
CC= aarch64-linux-gnu-gcc
AR= aarch64-linux-gnu-ar $(ARFLAGS) r
RANLIB= aarch64-linux-gnu-ranlib
NM= aarch64-linux-gnu-nm
(2)去掉里面的-m64
make make install
备注:
no-asm是在交叉编译过程中不使用汇编代码代码加速编译过程.原因是它的汇编代码是对arm格式不支持的。我试过了,如果没有这个参数,你的交叉编译一定出错。shared生成动态连接库。prefix=路径 就是你的安装目录。
3. wpa_supplicant交叉编译
解压:tar -zxvf wpa_supplicant-2.6.tar.gz
cd wpa_supplicant-2.6/wpa_supplicant
拷贝配置:
cp defconfig .config
修改.config
CC= aarch64-linux-gnu-gcc -L/mnt/nfsroot/frank.yu/android-O/factorytest/wifi/out/lib
CFLAGS += -I/mnt/nfsroot/frank.yu/android-O/factorytest/wifi/out/include
LIBS += -L/mnt/nfsroot/frank.yu/android-O/factorytest/wifi/out/lib
makefile修改:(
这里是为了生成静态链接的bin文件)
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
$(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
@$(E) " LD " $@
修改为
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
$(Q)$(LDO) --static $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS) -lm -lpthread
@$(E) " LD " $@
wpa_cli: $(OBJS_c)
$(Q)$(LDO) $(LDFLAGS) -o wpa_cli $(OBJS_c) $(LIBS_c)
@$(E) " LD " $@
修改为
wpa_cli: $(OBJS_c)
$(Q)$(LDO) --static $(LDFLAGS) -o wpa_cli $(OBJS_c) $(LIBS_c)
@$(E) " LD " $@
编译:
make
即可生成静态链接的wpa_supplicant/wpa_cli工具,不需要依赖其他的库文件。