第2课第1.1_15节_使用WIFI网卡2_概念及工具iw(STA模式)_P

2. 使用WIFI网卡: iw, wpa_supplicant,dhcp

2.1 概念: 认证/加密

首先介绍认证和加密的概念,这两个概念在//wenku.baidu.com/link?url=DlLntlD490hAeIIbE-CO4QfAzgUC-gOTA7FCwS_XanOJMFzkyhQrFIB38ULKCcQIVFyDqqSWNWyq5kVtYAoJKjjf9pmZLu17-hVQ922WeaG里面讲的比较清楚。大体来说,认证是指只有被许可的用户才可以连接到无线网络,加密是指在数据传输过程中不会被篡改。

 

         认证和加密技术的发展可以分为三个阶段:

 

以手机上WIFI热点为例,有4种常用的"认证/加密"

a. open

b. WEP

c. WPA(TKIP)

d. WPA2(AES)

 

2.2 编译、使用iw,wpa_supplicant,dhcp

a. 旧工具iwconfig, iw是它的替代者, 可用于这2种"认证/加密": open, WEP

         下载地址:https://wireless.wiki.kernel.org/en/users/documentation/iw

        

由上图可见,iw还依赖于libnl库。

         下载到iw源文件和libnl库后,执行以下操作:

a.1 编译安装libnl依赖库

         Tar xzf libnl-3.2.23.tar.gz

         Cd libnl-3.2.23

         ./configure --host=arm-linux --prefix=$PWD/tmp  //配置。 ./configure 后面两个都是运行configure时给的参数运行环境 (交叉编译成arm),安装到当前目录下的tep目录。

         Make  //编译

         编译出粗:

        

         vi lib/addr.c +1027  //查看lib/addr.c文件的1027行

         这些未定义的宏大部分来自于内核,可在内核源代码里找到,复制到该文件里就好。

         Make  //宠重新编译

         Make install    //安装

        

         接下来就是把头文件和库复制到工具链里面去,再把库复制到开发板所使用的网络文件系统的lib目录下(为什么?)。

         编译出来的头文件应该放入(为什么?):

/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

编译出来的库文件应该放入(为什么?):

/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

 

Cd include/

Cp  *  -rf   /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

Cp  *  -rf  -d  /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

cp *so* /work/nfs_root/first_fs/lib  //应用程序的运行需要用到这些库

 

a.2 编译安装rw工具

         tar xjf iw-3.11.tar.bz2

cd iw-3.11/

ls 一下,没有发现config文件,只看到Makefile,那就修改Makefile。

修改Makefile:

CC = "arm-linux-gcc"

(Makefile中CC ?= "arm-linux-gcc"中的?号表示CC没有定义的话这句话才起作用,因此我们去掉问号,强制起作用)

Make  出错

Vi    Makefiel +76

NL3xFOUND := Y

Make  又出现一大堆错误

这些错误的意思是编译时,找不到交叉编译工具链中的某些文件。经检查,是拷贝这些文件到工具链中的时候多了一个前缀,而执行make命令编译时是直接从交叉编译工具链中的include目录下查找,因此重新拷贝。

执行make命令编译时

cp netlink -rf /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include //把netlink文件夹全部拷贝到交叉编译工具链中的include目录下。

 

Make 还是有错误:

没有定义这个函数,那我们就在这个文件里自己定义这个函数(定义方法来自百度)。

在这个文件里添加语句:#define htole16(X)  (((((uint16_t)(X)) << 8) | ((uint16_t)(X) >> 8)) & 0xffff)

Make   编译成功,成功编译出iw应用程序:

cp iw /work/nfs_root/first_fs/bin  //放到文件系统的bin目录下

 

 

在编译过程中还一直存在着一个警告:libnl-3.0找不到。

ls查看libnl库下的lib目录(这个目录曾经拷贝到了交叉编译工具链下):里面没有这个文件名,所以交叉编译iw时找不到这个libnl-3.0文件。

解决办法:修改iw下的Makefile。找到使用libnl-3.0的语句,#掉。

#LIBS += $(shell $(PKG_CONFIG) --libs $(NLLIBNAME))

#CFLAGS += $(shell $(PKG_CONFIG) --cflags $(NLLIBNAME))

 

Iw只支持两种AP:OPEN/OPEN和WEP/WEP

 

 

 

使用:

iw list  // 列出WIFI网卡的性能

ifconfig wlan0 up

iw dev wlan0 scan   // 扫描WIFI AP

iw wlan0 connect dswei  // 连接到WIFI AP:dswei (open)

iw wlan0 connect dswei keys d:0:baiwenwang123 // 连接到WIFI AP:dswei (WEP)

                            d: default, 0: 第0个密码

ifconfig wlan0 192.168.1.55   (个人使用时换成7,或者将其他的改成7,总之要和虚拟机和开发板的网段不同)

ping 192.168.1.1  

b. wpa_supplicant : 可用于上述4种"认证/加密"

c. dhcp : 使得WIFI网卡动态获取IP

 

猜你喜欢

转载自blog.csdn.net/hahaha_2017/article/details/81156103
今日推荐