wpa_supplicant 的编译
1. wpa_supplicant的编译需要用到的3个源码包, 分别是wpa_supplicant, openssl, libnl
wpa_supplicant的下载地址:http://w1.fi/releases/
openssl的下载地址:https://www.openssl.org/so
libnl的下载地址:http://www.infradead.org/~tgr/libnl/files/
2. x86编译
后面编译 wpa_supplicant 2.6时报错,"can't find -lnl",所以编译 libnl-1.1.4。
./configure --prefix=/home/henry/wpa/libnl-1.1.4/out
先装依赖库
sudo apt-get install bison
sudo apt-get install flex
./configure --prefix=/home/henry/wpa/libnl-1.1.4/out
make
make check
make install
// to install the API documentation:
mkdir -vp /home/henry/wpa/libnl-1.1.4/out/libnl/doc
tar -xf ../libnl-doc-1.1.4.tar.gz --strip-components=1 --no-same-owner -C /home/henry/wpa/libnl-1.1.4/out/libnl/doc
openssl的编译:
./config shared --prefix=/home/henry/wpa/openssl-1.1.1/out/ssl/prefix --openssldir=/home/henry/wpa/openssl-1.1.1/out/ssl/configuration
make
make test
make install
wpa_supplicant的编译
cd ~/wpa/wpa_supplicant-2.6/wpa_supplicant
cp defconfig .config
修改配置文件 .config,在"#Uncomment following two linee and fix..."下增加如下语句,用来添加openssl和libnl的头文件和库文件目录,更新编译链接环境变量:
CFLAGS += -I/home/henry/wpa/openssl-1.1.1/out/prefix/include
CFLAGS += -I/home/henry/wpa/libnl-1.1.4/out/include
LIBS += -L/home/henry/wpa/openssl-1.1.1/out/prefix/lib
LIBS += -L/home/henry/wpa/libnl-1.1.4/out/lib
LIBS_p += -L/home/henry/wpa/openssl-1.1.1/out/ssl/prefix/lib (否则找不到libcripto)
执行 make 进行编译,成功后生成三个目标文件 wpa_supplicant, wpa_cli, wpa_passphrase 。
3. armv7交叉编译
3.1 需要下载如下包:
libnl-1.1.4.tar.gz
openssl-1.0.2r.tar.gz
wpa_supplicant-2.6.tar.gz
3.2 设置arm编译工具的PATH
3.3 先装依赖库
sudo apt-get install bison
sudo apt-get install flex
3.4 编译libnl1.1.4
cd lib
rm -f libnl.a =========>作者上传了x86的库,如不删除,编译wpa_supplicant时会报libnl.a的格式错误, 可以用objdump -a libnl.a查看库信息
make mylibs ========>建立prefix 目录
./configure --prefix=/home/cdc/wpa_supplicant/libnl-1.1.4/mylibs CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ AR=arm-linux-gnueabihf-ar LD=arm-linux-gnueabihf-ld -host=arm-linux
make
make install
3.5 编译openssl1.0.2r
mkdir mylibs ========>建立prefix 目录
./config no-asm shared --prefix=/home/cdc/wpa_supplicant/openssl-1.0.2r/mylibs
vi Makefile
PLATFORM=mips-linux-gnu
CONFIGURE_ARGS=mips-linux-gnu ...
CC=$(CROSS_COMPILE)mips-linux-gnu-gcc
CXX=$(CROSS_COMPILE)mips-linux-gnu-g++
CFLAGS=-Wall -g -EL -O3 -fomit-frame-pointer
CXXFLAGS=-Wall -g -EL -O3
MAKEDEPEND=$(CROSS_COMPILE)mips-linux-gnu-gcc
AR=$(CROSS_COMPILE)mips-linux-gnu-ar
RANLIB=$(CROSS_COMPILE)mips-linux-gnu-ranlib
删除 -m32 -m64 选项
3.6 编译及安装
make
make install
3.7 wpa_supplicant编译
cd wpa_supplicant-2.6/wpa_supplicant
cp defconfig .config
vi .config
# Uncomment following two lines and fix the paths if you have installed OpenSSL
# or GnuTLS in non-default location
CFLAGS += -I/home/cdc/wpa_supplicant/inc ==============>把前面编译的libnl, openssl时,在mylibs下生成的include文件夹下所有文件copy到这个目录
LIBS += -L/home/cdc/wpa_supplicant/lib ===============>把前面编译的libnl, openssl时,在mylibs下生成的lib文件夹下所有文件copy到这个目录
vi Makefile
vi Makefile, --static是为了静态编译,不用动态库
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 " $@