这个工具包移植,依赖的包比较繁杂,大家注意一下,想了解他的话请参考源码主页,搞wifi的人对这个包都是很熟悉的,相当熟悉应该说,吃透了这个包基本上25w的工作不愁了。
一、安装openssl
- 1、下载openssl-0.9.8e.tar.gz源码地址https://www.openssl.org/source/openssl-0.9.8e.tar.gz
- 2、解压源码,将wpa_supplicant-2.2/patch/openssl-0.9.8e-tls-extensions.patch拷贝到openssl-0.9.8e目录下
- 3、运行patch -p1 < openssl-0.9.8e-tls-extensions.patch安装补丁
- 4、进入openssl-0.9.8e目录,mkdir openssl-install
- 5、修改Makefile文件 vi Makefile
- CC= arm-linux-gcc
- AR= arm-linux-ar $(ARFLAGS) r
- RANLIB= arm-linux-ranlib
- INSTALLTOP=/home/develop/helper2416/TL-WN725N/openssl-0.9.8e/openssl-install
- OPENSSLDIR=/home/develop/helper2416/TL-WN725N/openssl-0.9.8e/openssl-install
- 6、执行make和make install
复制代码
二、安装wpa_supplicant
- 1、下载wpa_supplicant-2.2.tar.gz源码地址http://w1.fi/wpa_supplicant/
- 2、此处编译wpa_supplicant需要依赖openssl的lib/和include/,进入目录新建安装文件夹 mkdir openssl-install
- 3、进入wpa_supplicant-2.2/wpa_supplicant中执行如下命令
- cp defconfig .config
- vi .config
- CC=arm-linux-gcc -L/home/develop/helper2416/TL-WN725N/openssl-0.9.8e/openssl-install/lib/
- CFLAGS += -I/home/develop/helper2416/TL-WN725N/openssl-0.9.8e/openssl-install/include
- LIBS += -L/home/develop/helper2416/TL-WN725N/openssl-0.9.8e/openssl-install/lib
- LIBS_p += -L/home/develop/helper2416/TL-WN725N/openssl-0.9.8e/openssl-install/lib
- 4、执行make
- 5、编译不通过,需要屏蔽.config中的CONFIG_DRIVER_NL80211=y
- 6、重新编译成功,测试发现运行wpa_supplicant会有出现乱码的情况,推测是5中屏蔽导致的问题
复制代码
三、安装libnl
- 1、下载libnl-1.1.tar.gz源码地址http://www.infradead.org/~tgr/libnl/files/libnl-1.1.tar.gz
- 2、解压源码,进入使用./configure --help查看相关,新建安装文件夹 mkdir libnl-install
- 3、使用./configure --prefix=/home/develop/helper2416/TL-WN725N/libnl-1.1/libnl-install(注意可以使用$(pwd)/libnl-install替代)
- 4、修改生成的Makefile.opts文件如下
- CC := arm-linux-gcc
- AR := arm-linux-ar
- 5、在/include/netlink-local.h的28行加一个头文件#include <limits.h>
- 6、修改lib/route/link/vlan.c添加如下内容
- #ifndef VLAN_FLAG_REORDER_HDR
- #define VLAN_FLAG_REORDER_HDR 0x01
- #endif
- 7、执行make和make install命令
复制代码
四、重新安装wpa_supplicant
- 1、修改.config文件添加libnl-install/include和libnl-install/lib
- 2、修改libnl-install/include/linux/genetlink.h为3.2.x内核中的头文件,测试发现不行,在.config中直接添加内核的/include/linux/路径编译成功
复制代码
五、在进一步就完成了
- 1、wpa_supplicant源码src/drivers/driver_wext.c wifi_driver
- ioctl[SIOCSIWAP]: Operation not permitted
- WEXT: Failed to set bogus BSSID/SSID to disconnect
- 参考具体函数:
- static void wpa_driver_wext_disconnect(struct wpa_driver_wext_data *drv)
- static int cfg80211_netdev_notifier_call(struct notifier_block * nb, unsigned long state, void *ndev)
-
-
- 2、内核RAW socket支持宏,
- socket(PF_PACKET): Address family not supported by protocol
- 具体解决方法:
- 内核不支持RAW socket,编译内核时把CONFIG_PACKET选项打开CONFIG_PACKET = y
- If we use CONFIG_PACKET=m instead of CONFIG_PACKET=y we'd need to include af_packet.ko into the initramfs for netboot installation.
- 手动加载af_packet.ko显示NET: Registered protocol family 17加载正常
- #insmod af_packet.ko
-
-
- 3、关于wpa_supplicant说明
- /etc/wpa_supplicant.conf正确配置
- # WPA-PSK/TKIP
- ctrl_interface=/var/run/wpa_supplicant
- network={
- ssid="XTRAMUS"
- scan_ssid=1
- key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
- pairwise=TKIP CCMP
- group=CCMP TKIP WEP104 WEP40
- psk="AABBCCDDEF"
- }
-
-
- 4、初步确认运行wpasupplicant时提示的错误分析,问题出现在第二条(内核RAW socket支持宏),需要重新编译内核。
复制代码
关于wpa_supplicant的使用,主要步骤简单说一下,可以参考源码主页的doc文档。
1)新建文件/etc/network/interfaces,添加如下内容
- auto wlan0
- wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf
复制代码
2)
/etc/wpa_supplicant.conf正确配置
- # WPA-PSK/TKIP
- ctrl_interface=/var/run/wpa_supplicant
- network={
- ssid="XTRAMUS"
- scan_ssid=1
- key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
- pairwise=TKIP CCMP
- group=CCMP TKIP WEP104 WEP40
- psk="AABBCCDDEF"
- }
复制代码
3)可以通过手动方式启动来测试
wpa_supplicant.conf配置是否有用。
照旧贴图说明如下:
1)ping eeworld
2)ping baidu