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