移植wifi工具之前,大家可以看下http://blog.csdn.net/lidroid/article/details/46723099这篇。
这里所谓的wifi的sta工具其实就是对应无线的认证和加密方式,有下面两个工具来实现:
1、iw工具:iw工具是iwconfig的替代者,iw可以用于2种“认证和加密”,分别是open(开放系统认证+有效等线加密)、wep方式(共享秘钥认证+有效等线加密)。
2、wap_supplicant工具:可以用于四种认证方式,分别是open、wep、wpa、wpa2无线加密方式。
其中上面两种工具的使用可以在https://wireless.wiki.kernel.org/welcome查看。下面我们来讲讲把其移植到a9开发板的过程。
环境介绍:
宿主机 :redhat5.3
交叉编译器 :arm-linux-gcc(4.5.1)
目标板 :tiny4412开发板
一、移植iw到a9开发板上
1、前提工作
移植iw库需要libnl库的支持,所以必须先一直libnl库
2、移植libnl库
2.1、下载libnl库
在http://www.infradead.org/~tgr/libnl/files/可以下载到各个版本的libnl库,这里选择“libnl-3.2.24.tar.gz”
2.2、配置安装libnl库(交叉编译)
2.2.1、
解压libnl-3.2.24.tar.gz,进入libnl-3.2.24目录
[root@localhost libnl-3.2.24]# ./configure --host=arm-linux --prefix=$PWD/tmp
[root@localhost libnl-3.2.24]# make
Making all in include
make[1]: Entering directory `/work/wifi/sta/libnl-3.2.24/include'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/work/wifi/sta/libnl-3.2.24/include'
Making all in lib
make[1]: Entering directory `/work/wifi/sta/libnl-3.2.24/lib'
GEN route/cls/ematch_grammar.c
flex: unknown flag '-'. For usage, try
flex --help
make[1]: *** [route/cls/ematch_grammar.c] 错误 1
make[1]: Leaving directory `/work/wifi/sta/libnl-3.2.24/lib'make: *** [all-recursive] 错误 1
配置libnl后,编译出现上面蓝色的错误,主要是因为redhat5.3版本的flex工具比较老,更新就行了。下面先更新下flex工具。
2.2.2、更新redhat5.3的flex工具
下载最新的flex库安装到redhat5.3,可以从http://sourceforge.net/projects/flex/files获取
[root@localhost wifi]# tar xzf flex-2.5.39.tar.gz
[root@localhost wifi]# cd flex-2.5.39
[root@localhost flex-2.5.39]# ./configure //配置,默认x86平台
[root@localhost wifi]# cd flex-2.5.39
[root@localhost flex-2.5.39]# ./configure //配置,默认x86平台
[root@localhost flex-2.5.39]# make && make install//编译并且安装
等待安装完毕后,注销,使安装的flex版本生效,使用flex -V来查看是否生效。成功如下:
[root@localhost sta]# flex -V
flex 2.5.39
flex 2.5.39
2.2.3、重新编译libnl库
[root@localhost libnl-3.2.24]# make
Making all in includemake[1]: Entering directory `/work/wifi/sta/libnl-3.2.24/include'make[1]: Nothing to be done for `all'.make[1]: Leaving directory `/work/wifi/sta/libnl-3.2.24/include'Making all in libmake[1]: Entering directory `/work/wifi/sta/libnl-3.2.24/lib'GEN route/cls/ematch_grammar.cGEN route/cls/ematch_syntax.croute/cls/ematch_syntax.y:31.9-16: syntax error, unexpected identifier, expecting stringmake[1]: *** [route/cls/ematch_syntax.c] 错误 1make[1]: Leaving directory `/work/wifi/sta/libnl-3.2.24/lib'make: *** [all-recursive] 错误 1[root@localhost libnl-3.2.24]#
出现上面问题,这个问题比较纠结谷歌了很久,才找到原来是bison工具版本太低了,升级一下就行了。
2.2.4、升级BISON库
下载最新的bison库,可以从http://ftp.gnu.org/gnu/bison/获取
[root@localhost wifi]# tar xzf bison-3.0.4.tar.gz
[root@localhost wifi]# cd bison-3.0.4
[root@localhost bison-3.0.4]# ./configure
[root@localhost bison-3.0.4]# make && make install
2 .2.5、再次重新编译libnl库
[root@localhost wifi]# cd bison-3.0.4
[root@localhost bison-3.0.4]# ./configure
[root@localhost bison-3.0.4]# make && make install
2 .2.5、再次重新编译libnl库
[root@localhost libnl-3.2.24]# make
经过漫长的等待(对于一个期盼其不要出错的人来说),终于编译成功,接下将其安装
[ root@localhost libnl-3.2.24]# make install //安装到当前路径的tmp下面
3、移植iw工具
3.1、获取iw工具
可以从https://www.kernel.org/pub/software/network/iw/下载iw-4.0.tar.gz
3.2、配置和安装(交叉编译)
[root@localhost sta]# tar xzf iw-4.0.tar.gz
[root@localhost sta]# cd iw-4.0
[root@localhost sta]# cd iw-4.0
[root@localhost iw-4.0]# export PKG_CONFIG_PATH=/work/wifi/sta/libnl-3.2.24/tmp/lib/pkgconfig:$PKG_CONFIG_PATH
[root@localhost iw-4.0]# make CC=arm-linux-gcc
编译完成后生成iw命令,需要将其拷贝到开发板去运行。
4、启动开发板上运行
[root@zxl /]# iw dev wlan0 scan
iw: error while loading shared libraries: libnl-genl-3.so.200: cannot open shared object file: No such file or directory
iw: error while loading shared libraries: libnl-genl-3.so.200: cannot open shared object file: No such file or directory
出现上面的错误收libnl的库没有,那么把移植的libnl库拷贝到开发板的网络文件系统去,如下:
重新运行iw工具。
[root@zxl /]# iw dev wlan0 scan
command failed: No such device (-19)
command failed: No such device (-19)
再次记录这个问题,有空再解决。