zoukankan      html  css  js  c++  java
  • 【wifi移植 2】 移植wpa_supplicant

    参考文章:

      http://bbs.eeworld.com.cn/thread-447273-1-1.html(加精作品)

    1. 下载源码

      下载wpa_supplicant-2.2.tar(openssl用到0.9.8提供的补丁)

        http://hostap.epitest.fi/wpa_supplicant/

      下载openssl-0.9.8e.tar

        https://www.openssl.org/source/

    --------------------------------------------------------------------------------------------

    2. 打补丁

      拷贝wpa_supplicant-2.2/patches/openssl-0.9.8e-tls-extensions.patch 到 openssl-0.9.8e目录下

      ~$ cd openssl-0.9.8e/

      ~/openssl-0.9.8e$ patch -p1 < openssl-0.9.8e-tls-extensions.patch

    3. 编译openssl库

      #cd openssl-0.9.8e

      #sudo mkdir /opt/openssl_install

      #vim Makefile

          CC= arm-linux-gnueabihf-gcc

          AR= arm-linux-gnueabihf-ar $(ARFLAGS) r

          RANLIB= arm-linux-gnueabihf-ranlib       

          INSTALLTOP=/opt/openssl_install  

          OPENSSLDIR=/opt/openssl_install

    4. make

    5. sudo make install

    6. 编译wpa_supplicant

      进入wpa_supplicant-2.2/wpa_supplicant目录中:

      #cp defconfig        .config

      #vim .config

        CC=arm-linux-gnueabihf-gcc  -L/opt/openssl_install/lib/
        CFLAGS += -I/opt/openssl_install/include
        LIBS += -L/opt/openssl_install/lib

        LIBS_p += -L/opt/openssl_install//lib

      #make

      报错,缺少驱动CONFIG_DRIVER_NL80211,需要libnl库的支持。

      下载安装libnl

      如果不需要nl80211驱动,注释掉该配置宏即可。

      经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。 wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后

    台运行wpa_supplicant,使用wpa_cli 来搜索、设置、和连接网络。

    7. 配置wpa_supplicant

      (1) 首先拷贝wpa_supplicant-2.2/wpa_supplicant/wpa_supplicant 到 开发板目录 /bin/

        拷贝wpa_supplicant-2.2/wpa_supplicant/examples/wpa-psk-tkip.conf 到 开发板目录 /etc/ 并改名成wpa_supplicant.conf(路径可指定)

      (2) 修改wpa_supplicant.conf配置文件

        #vim /data/wpa_supplicant.conf

          # WPA-PSK/TKIP                                                                                                                                                                          
          ctrl_interface=/data/wlan0(路径可指定)                                                                                                                                                    
          network={                                                                                                     
                    ssid="HWAP"          //填写无线网络的的用户名                                                                                 
                    key_mgmt=WPA-PSK                                                                                      
                    proto=WPA                                                                                             
                    pairwise=TKIP                                                                                         
                    group=TKIP                                                                                            
                    psk="123456789"       //填写密码                                                                                
          }

        第一次使用这个配置文件连接,连不上,也没有找到问题所在;仔细看文档后发现下边的配置,很简单 很暴力,直接搞定。

        # Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers(文档内说明)

        #vim /data/wpa_supplicant.conf(编辑配置文件)

        # WPA-PSK/TKIP
        fast_reauth=1
        ctrl_interface=/data/wlan0
        update_config=1
        ap_scan=1
        ctrl_interface_group=0
        network={
                ssid="HWAP"
                psk="123456789"
                priority=5
        }

    8. 测试

      (1) 开发板执行

      #mkdir -p /data/wlan0(与配置文件保持一致,可以不创建,执行下边命令会自动创建)

      (2) 启动wpa_supplicant连接无线网络

        #wpa_supplicant -Dwext -iwlan0 -c/data/wpa_supplicant.conf -dd &

        有问题,连不上呀。

        ioctl[SIOCSIWMODE]: Operation not permitted

        换用新配置文件后,也成功。

        wifi驱动加载的cfg80211.ko,应该换用nl80211驱动。

        #wpa_supplicant -Dnl80211 -iwlan0 -c/data/wpa_supplicant.conf -dd &

        换用新配置文件后,成功。

       可以正确加载,扫描了,但是不能自动获取IP,继续搞。。

        

    -------------------------------------------------------------------------------

    以下为第一次编译情况,用的最新版本,但是需要库文件,由于不能联网,放弃操作。

     ------------------------------------------------------------------------------

    2. 编译openssl库

      $ ./config
      $ make
      $ make install

      2.1 $ ./config

        将wpa_supplicant中的补丁拷贝到openssl中

        #cd openssl-0.9.8zh

        #mkdir /usr/local/ssl

        ./config no-asm shared  //配置编译选项

        #vim Makefile

          CC= arm-linux-gnueabihf-gcc

          AR= arm-linux-gnueabihf-ar $(ARFLAGS) r

          ARD= arm-linux-gnueabihf-ar $(ARFLAGS) d

          RANLIB= arm-linux-gnueabihf-ranlib       

          INSTALLTOP=/usr/local/ssl  

          OPENSSLDIR=/usr/local/ss

      2.2 $ make

      2.3 $ make install

        在/usr/local/ssl目录下安装了ssl库

        后面编译wpa_supplicant要依赖openssl中的lib和include

    3. 编译wpa_supplicant

      进入wpa_supplicant-2.5/wpa_supplicant目录中:

      #cp defconfig        .config

      #vim .config

        CC=arm-linux-gnueabihf-gcc  -L/usr/local/ssl/lib/
                CFLAGS += -I/usr/local/ssl/include
                LIBS += -L/usr/local/ssl/lib

      #make

      使用高版本的程序(wpa_supplicant-2.5.tar和openssl-0.9.8zh.tar),会出现如下问题:

      出现错误:

      ../src/drivers/driver_nl80211.c:25:31: fatal error: netlink/genl/genl.h: No such file or directory
      compilation terminated.
      make: *** [../src/drivers/driver_nl80211.o] Error 1

      解决:网上说需要安装libnl-dev 和libpopt-dev后。

      

  • 相关阅读:
    Python
    Python
    Python
    Python
    Python
    Python
    Scala核心编程_第01章_Scala概述
    与富婆讨论性,死亡与生活的意义
    python邮件发送给多人时,只有第一个人能收到的问题
    少年维特的烦恼
  • 原文地址:https://www.cnblogs.com/emlslxl/p/5580999.html
Copyright © 2011-2022 走看看