RT3070L_USB_WIFI网卡在GT2440开发板上的移植和使用(二)

本文详述了WIFI网卡的配置方法,包括无线加密的多种方式及其区别,如WEP、WPA、TKIP、EAP等。介绍了iw、wpa_supplicant和dhcp等工具的使用,以及iw的编译过程和常见问题解决。同时,提供了在不同加密模式下iwconfig的使用案例。
摘要由CSDN通过智能技术生成

3、WIFI网卡的配置和使用

3.1、无线加密的多种方法及其区别(WEP WPA TKIP EAP)

关于这些知识可以参考文档:https://wenku.baidu.com/view/cf93b8ede009581b6bd9ebd9.html
这里的目的是要使用WIFI网卡,就不用那么深入了,只需要知道几个概念就行。
(1)无线加密是为了保证无线网络的安全。而无线网络的安全性由“认证”和“加密”来保证的。
(2)认证是允许只有被许可的用户才能连接到无线网络;
(3)加密的目的是提供数据的保密性和完整性(数据在传输过程中不会被篡改)。            

wifi认证加密的发展过程
 发展过程安全类型认证加密方式
初级版本openopenopen
WEP WEPWEP
过渡版本WPA802.1XTKIP/WEP
PSKTKIP/WEP
终极版本WPA2 802.1X CCMP(AES-CCMP)/TKIP/WEP
PSKCCMP(AES-CCMP)/TKIP/WEP


    

 

 

 

 

 

 

使用wifi基本明白了上一个表格就足够了。其中802.1x是同过服务器认证的。一般只有大型企业
才会用到。一般家庭的认证方式都是PSK。查看我们的无线网,大部分用的都是PSK-AES/TKIP

3.2、工具介绍

(1)最早的配置工具为iwconfig,iw是它的替代者。只支持初级版本的认证加密方式。
(2)wpa_supplicant:可以用于上述4中“认证/加密”
(3)dhcp:使得WIFI网卡动态获取IP

4、编译使用iw

(1)源码准备:iw的编译依赖于libnl库。因此需要先编译libnl库。
    libnl-3.2.23.tar.gz
    iw-3.11.tar.bz2
    下载地址(或到我的CSDN下载吧):http://linuxwireless.sipsolutions.net/en/users/Documentation/iw/
(2)编译libnl:
    tar -zxvf libnl-3.2.23.tar.gz 
    看里面有configure文件。万能编译:
    ./configure --host=arm-linux --prefix=$PWD/tmp
    make  编译出错
/@###############
addr.c:1027: error: 'AF_RDS' undeclared here (not in a function)
addr.c:1033: error: 'AF_CAN' undeclared here (not in a function)
addr.c:1034: error: 'AF_TIPC' undeclared here (not in a function)
addr.c:1038: error: 'AF_ISDN' undeclared here (not in a function)
addr.c:1039: error: 'AF_PHONET' undeclared here (not in a function)
make[2]: *** [addr.lo] Error 1
make[2]: Leaving directory `/work/gt2440_prj/zyp_RT3070/02_iw/libnl-3.2.23/lib'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/work/gt2440_prj/zyp_RT3070/02_iw/libnl-3.2.23/lib'
make: *** [all-recursive] Error 1
############@/
提示有些宏没有定义。
解决办法:https://blog.csdn.net/zhang_danf/article/details/50481296?utm_source=blogxgwz1可以屏蔽掉那几行代码。根本原因是glibc太老了。或者。这些宏都在内核中include\linux\socket.h中,找到位置,
在addr.c中加上这些宏就可以了。继续。。。
make            //编译代码
make install    //安装
cd tmp/
ls                //查看代码
部署安装:就是将编译好的lib库和include头文件复制到交叉编译工具链相应的库和lib目录(当然也可以在编译时指定位置,但比较麻烦)
然后将编译好的lib库复制到开发板的lib库目录。cp时的-d选项是为了保持文件的属性不变。
a、编译出来的头文件放入交叉编译工具链的头文件目录:
cd include/libnl3
cp * -rf /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/
b、编译出来的库放入交叉编译工具链的库文件目录:
cd ../../lib
cp * -rf -d /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/
c、编译出来的动态库放入开发板的库目录,应用程序的运行需要这些库:
cp *so* -d /work/nfs_root/first_fs/lib/
(3)编译iw
tar -xjf iw-3.11.tar.bz2        //解压源码
cd iw-3.11                        //进入源码目录
查看没有configer文件,那就修改Makefile
vi Makefile
 10 CC = "arm-linux-gcc"
make
/@##################
Makefile:76: *** Cannot find development files for any supported version of libnl.  Stop.
##################@/
分析Makefile,它的libnl是通过命令来查找的。而我们的是交叉编译工具,用这个命令是找不到的,所以我们
直接设置成Y就好了。
 - 29 NL3xFOUND := $(shell $(PKG_CONFIG) --atleast-version=3.2 libnl-3.0 && echo Y)
 + 29 NL3xFOUND := Y
继续make
/@#################
info.c: In function 'print_phy_handler':
info.c:493: error: implicit declaration of function 'htole16'
make: *** [info.o] Error 1
#################@/
没有这个函数。
在info.c的前面定义这个语句就可以了:
#define htole16(X) (((((uint16_t)(X)) << 8) | ((uint16_t)(X) >> 8)) & 0xffff)
重新make
编译生成了iw这个软件。拷贝到网络文件系统就可以使用了。
虽然能够编译生成iw但编译过程中总是提示:
/@#############
Package libnl-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libnl-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libnl-3.0' found
############@/
继续修改Makefile
 58 NLLIBNAME = libnl-3
 79 #LIBS += $(shell $(PKG_CONFIG) --libs $(NLLIBNAME))
 80 #CFLAGS += $(shell $(PKG_CONFIG) --cflags $(NLLIBNAME))
重新make就不会有错误提示了。
(4)测试iw(很可惜我的测试是失败的,以后再找解决办法吧)
这时候问题来了发现输入
# iw list                //列出wifi网卡的性能。输入这个没有反应
# iw dev ra0 scan        //扫描wifi的AP。输入这个提示错误:
command failed: No such device (-19)
# iw ra0 connect cwf    //连接到无线AP。这个cwf,(cwf的认证方式为open模式,没有密码)当然也是错误:
command failed: Operation not supported (-95)
查网上有人说了这个问题主要是2个原因造成的
a、wifi驱动没有加载或者是wifi设备没有接入
b、wifi驱动有加载,并且网络接口都有起来,这种可能是内核驱动不支持nl80211;也有可能是驱动和内核不匹配,建议重新烧录系统,然后重新编译驱动
显然第一点是不成立的。这是我真的怀疑我的驱动不正确了。之前编译过网上找的360wifi3的驱动,也是编译成功了。但在开启网卡的时候失败了。现在有遇到了这个问题。真不知道如何处理了。无线网卡还是用不起来啊。但这时发现我的文件系统编译了老的iwconfig和iwlist工具
这两个工具是可以使用的。以后介绍iwconfig的编译方法吧。

(5)不开启无线安全(OPEN/OPEN模式下)iwconfig的使用。
iwlist ra0 scanning            //扫描无线网络。
/@#############可以看到是可以扫描的我的无线网络(AP)信号的
Cell 10 - Address: EC:26:CA:C1:AB:3A
                    Protocol:802.11b/g/n
                    ESSID:"WD"
                    Mode:Managed
                    Frequency:2.412 GHz (Channel 1)
                    Quality=100/100  Signal level=-29 dBm  Noise level=-92 dBm
                    Encryption key:off
                    Bit Rates:54 Mb/s
#############@/
iwlist ra0 scanning | grep WD
/@##############################在输出结果中显示我们的AP
===>rt_ioctl_giwscan. 12(12) BSS returned, data->length = 2122
                    ESSID:"WD"
##############################@/
ifup ra0     //这条命令也不能用
ifup: can't open '/etc/network/interfaces': No such file or directory
 ifconfig ra0 up            //打开无线网卡
 iwconfig ra0 essid "WD"    //接入无线网卡
 iwconfig ra0 ap auto        //这个千万不能输入,输入后导致路由器中有我的设备,但无法互相ping同网内的其他设备,这个问题有研究了好久
 ifconfig ra0 192.168.15.101 netmask 255.255.255.0 up    //给无线网卡分配ip
 route add default gw 192.168.15.1 dev ra0            //加入网关。我试过不加也可以
 ping 192.168.15.1            //这时候应该可以ping同局域网了
 mount -t nfs -o nolock 192.168.15.15:/work/nfs_root/first_fs /mnt  //可以尝试挂接网络文件系统进行操作了。
从这些来看驱动应该是没有太大问题的。但是为什么iw不能使用还没解决。
(6)开启无线安全(wep)下iwconfig的使用
这个网址对iwconfig介绍的比较详细:https://www.cnblogs.com/Jezze/archive/2011/12/23/2299854.html
网上找了很多方法都没有成功。对iwconfig还是不够了解。后来无意中配成了。记录如下:
首先路由器要选择WEP,认证类型一定要自动(开始改了共享密匙,没有成功)
WEP密匙格式应该可以选,只要使用的时候对应上就行了。
认证类型 自动 WEP密匙格式ASCII 
还有信道选自动,模式选11bgn mixed 频段带宽自动。
板卡端:
insmod rt3070sta.ko
ifconfig ra0 up
iwconfig ra0
/@###############
ra0       Ralink STA  ESSID:"11n-AP"  Nickname:"RT2870STA"
          Mode:Auto  Frequency=2.412 GHz  Access Point: Not-Associated   
          Bit Rate:1 Mb/s   
          RTS thr:off   Fragment thr:off
          Encryption key:off        //注意这个是关着的,可能就是连不上的原因
          Link Quality=10/100  Signal level:0 dBm  Noise level:0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
###############@/
iwconfig ra0 essid WD
iwconfig ra0 key s:water_droplet
iwconfig ra0 ap auto                //网上一般到这里再配置上ip就可以ping通了。但我怎么实验也不成功。后来输入了
下面的命令后就可以成功了。
iwconfig ra0 essid any
iwconfig ra0 key on                    //指定on/off可以控制是否使用加密模式。默认的可能是off所以上面一直连不上?
iwconfig ra0 key open                //open/restricted指定加密模式.我想就对应路由器的“认证类型”?
iwconfig ra0                         //这时候再看一下它的状态
/@###############
ra0       Ralink STA  ESSID:"cwf"  Nickname:"RT2870STA"
          Mode:Managed  Frequency=2.462 GHz  Access Point: EC:26:CA:C1:AB:3A   
          Bit Rate=54 Mb/s   
          RTS thr:off   Fragment thr:off
          Encryption key:6261-6977-656E-7761-6E67-3132-33   Security mode:open    //应该就是设置的这两项。
          Link Quality=100/100  Signal level:-35 dBm  Noise level:-35 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
###############@/之后再按标准的设置应该就可以了。
ifconfig ra0 192.168.15.101 netmask 255.255.255.0 up    //给无线网卡分配ip
route add default gw 192.168.15.1 dev ra0            //加入网关。我试过不加也可以
ping 192.168.15.1            //这时候应该可以ping同局域网了
总结:iw虽然编译通过了,但执行总是不成功。不知道为什么。不过现在还是有进步的。起码说明我从网上得来的驱动可以用了。下一节来介绍移植wpa_supplicant

                                                                                                                                                                 Water Droplet

                                                                                                                                                                 598323431@qq.com

                                                                                                                                                                 2020.4.5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值