wpa_supplicant移植
下载wpa_supplicant,我这里使用的是wpa_supplicant-2.9.tar.gz,下载地址是http://w1.fi/wpa_supplicant/。下载完毕后,放到Linux目录下解压。tar xvfzwpa_supplicant-2.5.tar.gz。
进入目录wpa_supplicant-2.9/wpa_supplicant下首先建立配置文件:
cp defconfig .config,然后修改Makefile,添加交叉编译工具链 C=arm-linux-gcc ,这里我的环境变量已经导出,故可以直接写,如果环境变量没有导出,需添加交叉编译工具链的绝对路径。
修改完毕Makefile后进行make编译,会出现如下报错:
../src/common/dpp.c:12:30: fatal error: openssl/opensslv.h: No such file or directory
根据报错分析,编译时找不到openssl库,接下来修改报错需添加openssl库。下载地址是ftp://ftp.openssl.org/source/old/1.0.1/。但是打开网址后发现有很多版本,我们需要下载相匹配的版本才行。打开wpa_supplicant-2.9/wpa_supplicant/README发现有如下说明:
167 Optional libraries for EAP-TLS, EAP-PEAP, and EAP-TTLS:
168 - OpenSSL (tested with 1.0.1 and 1.0.2 versions; assumed to
169 work with most relatively recent versions; this is likely to be
170 available with most distributions, http://www.openssl.org/)
171 - GnuTLS
172 - internal TLSv1 implementation
README中提到,1.0.1和1.0.2版本开发人员已经测试过可以使用,所以我们下载这两个版本的。我下载的是openssl-1.0.1.tar.gz。
下载后解压tar -xvf openssl-1.0.1.tar.gz ,解压后进入openssl-1.0.1进行编译安装,建议安装的时候重新创建一个目录,因为生成的库等只在交叉编译wpa_supplicant时使用,这样可以保持系统干净。然后进行修改Make file如下:
CC=arm-linux-gcc
AR=arm-linux-ar$(ARFLAGS) r
RANLIB=arm-linux-ranlib
NM= arm-linux-nm
INSTALLTOP=刚才你建立的安装目录,要使用绝对路径,不然在make install的时候会出错
OPENSSLDIR=刚才你建立的安装目录,要使用绝对路径,不然在make install的时候会出错
然后然后,执行make&&make install。
在执行make install的时候会报错如下:
POD document had syntax errors at /usr/bin/pod2man line 71.
然后进入安装目录只看到一个man目录,结合报错说明,在安装man手册时出现了错误,解决办法有两个:1.找到错误并修改;2.取消安装man手册。由于水平有限,我采取了第二种方式,也因为我们不需要看man手册。打开Makefile修改:
修改前:
542 install: all install_docs install_sw
修改后:
542 install: all install_sw
然后再执行make install,将会安装成功。
注:博主下载openssl-1.0.12tar.gz版本,按照以上同样方法移植的时候没有报任何错误,原因未知。
移植完openssl后再去编译wpa_supplicant,此时又会报错,找不到libnl3和dbus-1.0两个库,实在每办法,只好删减功能,将暂时不需要的功能去掉,修改.config文件如下:
CONFIG_DRIVER_WEXT=y
CONFIG_DRIVER_WIRED=y
CONFIG_IEEE8021X_EAPOL=y
CONFIG_EAP_MD5=y
CONFIG_EAP_MSCHAPV2=y
CONFIG_EAP_TLS=y
CONFIG_EAP_PEAP=y
CONFIG_EAP_TTLS=y
CONFIG_EAP_GTC=y
CONFIG_EAP_OTP=y
CONFIG_EAP_LEAP=y
CONFIG_PKCS12=y
CONFIG_SMARTCARD=y
CONFIG_CTRL_IFACE=y
CONFIG_BACKEND=file
CONFIG_PEERKEY=y
然后再make就会编译通过。
初次接触,有误地方请指正。只用于学习。