• Linux下Wi-Fi的实现:wireless_tools和wpa_supplicant


    转载于:https://www.cnblogs.com/lidabo/p/6069455.html

    平台为hi35XX,在Liunx下借助wireless_tools和wpa_supplicant(因为现在的无线WIFI网络大多是wpa加密。所以需要移植wpa_supplicant工具)等工具实现wifi的过程。

     

    一、移植wireless_tools

    1. 下载并编译wireless_tools

        tar zxf  wireless_tools.29.tar.gz(网上下载)

        cd wireless_tools.29

        make

        成功后会在当前目录生成iwspy,iwpriv,iwlist以及iwconfig等文件。

    2. 拷贝文件

        我们只需将这四个文件拷备到文件系统的sbin目录,然后将当前目录的libiw.so.29库文件拷到文件系统的lib目录,无线网络工具即安装完成。

     

     

    二、加载无线网卡驱动模块

        网上有很多无线驱动模块,可移植性很好。呵呵,我的是利用XX无线网卡公司提供的网卡驱动源码,修改下Makefile(1.网卡选择 2.平台  3.内核路径和工具链)以及os/linux下的config.mk(一般不需要修改),make得到的。

        insmod rtutil5572sta.ko。     insmod rt5572sta.ko     insmod rtnet5572sta.ko

     

    三、指令的使用

    1.  扫描可用的无线网络

        iwlistwifi-name scanning 

        其中wifi-name为无线网卡的名字,比如网卡eth0就是系统默认的网卡名字, wifi-name可以用ifconfig查看,一般为ra0(无线网卡),不过,需要ifconfig ra0 up

    2.  扫描网络信息

        iwlistra0 scan

    ===>rt_ioctl_giwscan.11(11) BSS returned, data->length = 1427 

    ra0       Scan completed : 

              Cell 01 - Address:C4:CA:D9:1D:9E:A0 

                        Protocol:802.11b/g/n 

                        ESSID:"" 

                        Mode:Managed 

                        Frequency:2.412 GHz(Channel 1) 

                        Quality=7/100  Signal level=-87 dBm  Noise level=-82 dBm 

                        Encryption key:off 

                        Bit Rates:54 Mb/s 

        如上:ESSID项的值即为无线网络的名字,如上的“TXJ”等。如果值为空,说明在无线路由勾选了隐藏ESSID的选项。ESSID是很关键的,如果被隐藏了,也不是不能连接,而是需要破解,用到其他的工具,非常麻烦。

    3. 设置要连接的网络类型

          iwprivra0 set NetworkType=Infra 

    4. 设置要连接的无线网络的安全模式

          iwprivra0 set AuthMode=WPA2PSK 

    5. 设置网络加密方式:(CCMP即为AES)

          iwprivra0 set EncrypType=TKIP  

    6. 设置连接时的密码

          iwprivra0 set WPAPSK=*******  //********为加密网络的密码

    7. 连接该网络:有两种方式:

    <1> 用iwpriv命令

        iwpriv ra0 set SSID=TXJ

    <2> 用iwconfig命令

        iwconfigra0 essid TXJ

        至此,如果密码正确,就可以连接上网络TXJ了。 

    8. 查看状态

        iwpriv ra0 connStatus 

        当然,你也可以用iwconfig命令查看状态。

     

     

    四、wpa_supplicant

       wpa_supplicant本是开源项目源码,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是 wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。

     

        wpa_supplicant由网卡公司提供,呵呵,同样,网上也有很多相关资料,如下:

    1.生成wpa_supplicant(网上下载,本人未试)

    1.1下载并解压wpa_supplicant需要的源码

        tarxvfz wpa_supplicant-0.7.2.tar.gz

        tarxvfz wpa_supplicant-0.5.8.tar.gz

        tarzxvf openssl-0.9.8e.tar.gz

    1.2编译openssl库

    将wpa_supplicant中的补丁拷贝到openssl中:

           cp wpa_supplicant-0.7.2/patches/openssl-0.9.8e-tls-extensions.patch  openssl-0.9.8e/

    建立openssl编译目标路径:

          mkdir /usr/local/ssl

    修改openssl-0.9.8e目录下的makefile文件,修改内容如下:

        CC=arm-none-linux-gnueabi-gcc

        AR=arm-none-linux-gnueabi-ar

        RANLIB=arm-none-linux-gnueabi-ranlib

        INSTALLTOP=/usr/local/ssl

        OPENSSLDIR=/usr/local/ssl

    然后编译openssl:

        make & make install

    正常编译后,在/usr/local/ssl中将会出现ssl库。

    1.3编译wpa_supplicant

        cd  wpa_supplicant-0.5.8

        cp  defconfig .config

    在.config中添加如下代码

        CC=arm-none-linux-gnueabi-gcc-L /usr/local/ssl/lib/

        CFLAGS+= -I/usr/local/ssl/include/

        LIBS+= -L/usr/local/ssl/lib/

    然后编译:

        make

     经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。

     

    2.把RT2870STA.dat文件复制到/etc/Wireless/RT2870STA 目录下

        1.1 mkdir -p /etc/Wireless/RT2870STA //创建多层目录。

        1.2 cp /mnt/rt5370/RT2870STA.dat  /etc/Wireless/RT2870STA

     

    3.首先关闭本地网卡,再启动wifi网卡

        #ifconfig eth0 down (如果非同一ip段,不需要关闭)

        ifconfig ra0 up

        启动网卡后,会不断出现错误:BIRIdx(1): RXDMALen not multiple of 4.[43507], BulkInBufLen = 416)     修改./MODULE/include/iface/rtmp_usb.h问题就能够解决掉。     #define RXBULKAGGRE_SIZE  12 该为8 

     

    4.设置网卡参数

        ifconfig ra0  192.168.2.188

        #ifconfig ra0  broadcast 192.168.2.255 (广播地址,默认)

        #ifconfig ra0  netmask 255.255.255.0(子网掩码,默认)

     

    5.编写wpa_supplicant.conf配置文件

        ctrl_interface=/var/run/wpa_supplicant

        network={

                 ssid="TXJ"  //路由器名称

                 scan_ssid=1

                 key_mgmt=WPA-EAP WPA-PSK IEEE8021XNONE

                 pairwise=TKIP CCMP

                 group=CCMP TKIP WEP104 WEP40

                 psk="xxxxx" //密码

                }

     

    6.启动命令

        mkdir -p /var/run/wpa_supplicant

        /mnt/rt5370/wpa_supplicant -Dwext-ira0 -c /etc/wpa_supplicant.conf

    7.命令查看状态

      /mnt/rt5370/iwpriv ra0 connStatus   //iwpriv文件放在/mnt/rt5370/目录下,所以,需要这样运行指令。

      成功 ra0  connStatus:Connected(AP:TXJ[E0:05:C5:CF:F0:56])

      然后,就可以ping通192.168.2.1,说明连接上路由器了。那么,工作就完成了。

    附:

        -i<ifname>: 网络接口名称 

        -c<conf>:配置文件名称

        -C<ctrl_intf>:控制接口名称

        -D<driver>:驱动类型

        -p<driver_param>:驱动参数

        -b<br_ifname>:桥接口名称

     

     

    rt5370支持WPS,rt3070不支持

  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/baiduboy/p/9676751.html
Copyright © 2020-2023  润新知