wpa_supplicant和hostapd交叉编译

编译环境:Ubuntu16.04 64位
交叉编译工具:arm-ca9-linux-uclibcgnueabihf-gcc

1. 交叉编译libnl

wpa_supplicant的交叉编译依赖libnl和openssl,这里先交叉编译libnl。我这里使用的是libnl-1.1.4.tar.gz,点击下载地址

tar zxf libnl-1.1.4.tar.gz
cd libnl-1.1.4/
./configure --prefix=/root/wifi/wifiLib/libnl --host=arm-ca9-linux-uclibcgnueabihf --enable-static --enable-shared CC=arm-ca9-linux-uclibcgnueabihf-gcc CFLAGS="-march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -Wformat=1"

make
make install

/root/wifi/wifiLib/libnl/lib/目录下生成的libnl.a和libnl.so.1.1.4就是待会编译wpa_supplicant需要的库,/root/wifi/wifiLib/libnl/include/目录下生成的是头文件。

编译报错问题

指定CFLAGS=“-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 -fno-aggressive-loop-optimizations”,报错内容格式如下:

xxx uses VFP register arguments xxx does not

某芯片商的交叉编译器默认是软浮点,其中某款芯片是硬浮点的,提供的sdk库是指定硬浮点

解决方案

修改源码lib目录下Makefile,第53行增加了$(CFLAGS)选项

$(CC) -shared -Wl,-soname,libnl.so.1 $(CFLAGS) -o $(OUT_SLIB) $(OBJ) $(LIBNL_LIB) -lc

2. 交叉编译openssl

openssl在openssh移植及使用已经编译过,这里重新编译。我这里使用的是openssl-1.1.0g.tar.gz,点击下载地址

tar zxf openssl-1.1.0g.tar.gz
cd openssl-1.1.0g/
./Configure linux-armv4 --cross-compile-prefix=arm-ca9-linux-uclibcgnueabihf- --prefix=/root/wifi/wifiLib/openssl shared no-autoerrinit no-idea no-camellia no-seed no-bf no-cast no-engine no-hw no-cms no-capieng no-comp no-zlib no-zlib-dynamic no-async threads no-ts no-ui no-asm

修改Makefile,加入如下内容:

CFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -Wformat=1

执行编译

make
make install

/root/wifi/wifiLib/openssl/lib目录下生成的libcrypto.a和libssl.a以及对应的动态库就是待会编译wpa_supplicant需要的库,头文件位于/root/wifi/wifiLib/openssl/include/。

3. 交叉编译wpa_supplicant

我这里使用的是wpa_supplicant-2.6.tar.gz,点击下载地址

3. 1 解压

tar zxf wpa_supplicant-2.6.tar.gz
cd wpa_supplicant-2.6/wpa_supplicant
cp defconfig .config

3. 2 修改config

在.config文件末尾加上如下内容:

CFLAGS += -I/root/wifi/wifiLib/libnl/include
LIBS += -L/root/wifi/wifiLib/libnl/lib
CFLAGS += -I/root/wifi/wifiLib/openssl/include
LIBS += -L/root/wifi/wifiLib/openssl/lib
CFLAGS += -O3 -fPIC -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -Wformat=1
LDFLAGS += -O3 -fPIC -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -Wformat=1
CC=arm-ca9-linux-uclibcgnueabihf-gcc -L/root/wifi/wifiLib/openssl/lib

3. 3 修改Makefile

BINALL=wpa_supplicant wpa_cli libwpa_client.a

3. 4 编译

make
arm-ca9-linux-uclibcgnueabihf-strip wpa_supplicant
arm-ca9-linux-uclibcgnueabihf-strip wpa_cli

编译成功后的wpa_supplicant和wpa_cli位于当前目录,libwpa_client.a是所需要的静态库。

4. 交叉编译hostapd

我这里使用的是hostapd-2.6.tar.gz,点击下载地址

4. 1 解压

tar zxf hostapd-2.6.tar.gz
cd hostapd-2.6/hostapd
cp defconfig .config

4. 2 修改config

在.config文件末尾加上如下内容:

CFLAGS += -I/root/wifi/wifiLib/libnl/include
LIBS += -L/root/wifi/wifiLib/libnl/lib
CFLAGS += -I/root/wifi/wifiLib/openssl/include
LIBS += -L/root/wifi/wifiLib/openssl/lib
CFLAGS += -O3 -fPIC -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -Wformat=1
LDFLAGS += -O3 -fPIC -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -Wformat=1
CC=arm-ca9-linux-uclibcgnueabihf-gcc -L/root/wifi/wifiLib/openssl/lib

4. 3 编译

make
arm-ca9-linux-uclibcgnueabihf-strip hostapd

编译成功后的hostapd位于当前目录。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值