wpa

    xiaoxiao2021-04-15  82

    转载了两篇,第一篇为linux下的移植,第二遍为arm下的

    前一段时间只在vs2005下编译成功过。经过近一段时间的琢磨,今天终于在linux下成功编译了wpa_supplicant。 挺简单的事情折腾了这么久。没办法,刚开始进入linux。。

    和同样的初学者分享一下我的经验 ^_^  

    环境:vmware+ubuntu, wpa_supplicant-0.6.10+ openssl-0.9.8d

    由于编译wpa_supplicant需要用到openssl的头文件和lib,所以需要先编译安装openssl

    1.       编译安装openssl

    1.1       ./config

    1.2        make 碰到问题:NUMPRIMES没有定义 原因:bn_prime.h 内容为空 解决办法:进入crypto/bn目录运行:perl crypto/bn/bn_prime.pl >bn_prime.h

    1.3        安装openssl ;make install 安装后可以生成一些目录,在编译wpa_supplicant的时候会用到。如下: /usr/local/ssl/include /usr/local/ssl/lib

    2.       编译wpa_supplicant

    2.1       创建配置文件,这里创建默认的配置文件: cp defconfig .config

    2.2       编译,命令很简单,进入wpa_supplicant目录后执行make。 会出现一堆错误说找不到一系列东西。 解决办法:在.config文件中找到# Uncomment following two lines and fix the paths if you have installed OpenSS的一段。添加如下内容: CFLAGS += -I/usr/local/ssl/include LIBS += -L/usr/local/ssl/lib 重新make,发现wpa_supplicant的二进制文件编译出来了。但是还是有错误。编译wpa_passphrase出错。(默认make会编译出三个二进制文件,分别是wpa_supplicant,wpa_passphrase和wpa_cli) 解决办法:继续在上面提到的地方添加: LIBS_p += -L/usr/local/ssl/lib 重新编译。 OK,编译通过,在wpa_supplicant-0.6.10/wpa_supplicant目录下可以看到编译出的三个二进制文件

     

    嵌入式的

    因为现在的无线wifi网络大多是wpa加密。所以需要移植wpa_supplicant工具。  一、下载源码         http://hostap.epitest.fi/wpa_supplicant/  

            下载wpa_supplicant-0.7.3.tar.gz (openssl用到0.7.3提供的补丁)                 #tar xvfz wpa_supplicant-0.7.3.tar.gz         下载www.openssl.org/source/openssl-0.9.8e.tar.gz                 #tar zxvf openssl-0.9.8e.tar.gz

    二、编译openssl库 将wpa_supplicant中的补丁拷贝到openssl中          # cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/         #cd openssl-0.9.8e         #mkdir /usr/local/ssl         #vim Makefile                 CC= arm-linux-gnu-gcc                 AR= arm-linux-gnu-ar $(ARFLAGS) r                 RANLIB= arm-linux-gnu-ranlib                 INSTALLTOP=/usr/local/ssl                 OPENSSLDIR=/usr/local/ssl         #make          #make install

    在/usr/local/ssl目录下安装了ssl库  #ls /usr/local/ssl  #bin  certs  include  lib  man  misc  openssl.cnf  private

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

    三、编译wpa_supplicant  进入wpa_supplicant-0.7.3.tar.gz解压生成的wpa_supplicant-0.7.3/wpa_supplicant目录中:         #cp defconfig        .config         #vim .config                 CC= arm-linux-gnu-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来搜索、设置、和连接网络。

    四、配置wpa_supplicant (1)首先拷贝wpa_supplicant和wpa-psk-tkip.conf到开发板根文件系统中,并改名wpa-psk-tkip.conf为wpa_supplicant.conf

    #cp wpa_supplicant /rootfs/filesystem/bin #cp wpa_supplicant-0.7.3/wpa_supplicant/examples/wpa-psk-tkip.conf  /rootfs/filesystem/etc/wpa_supplicant.conf

    (2)修改wpa_supplicant.conf配置文件 #vim /rootfs/filesystem/etc/wpa_supplicant.conf

    修改内容如下:

    # WPA-PSK/TKIP

    ctrl_interface=/var/run/wpa_supplicant

    network={                 ssid="FS2410"     //填写无线网络的的用户名                 key_mgmt=WPA-PSK                 proto=WPA                 pairwise=TKIP                 group=TKIP                 psk="1234567890" //填写密码 }

    五、测试 (1)在开发板终端:

    #mkdir –p /var/run/wpa_supplicant

    (2)编写驱动加载脚本 #vim load.sh (我放在根文件系统/sdio目录中,内容如下:)

    #!/bin/sh cd /sdio insmod libertas.ko insmod libertas_sdio.ko helper_name=/lib/firmware/mrvl/helper_sd.bin fw_name=/lib/firmware/mrvl/sd8686.bin

    并修改load.sh权限:chmod 777 load.sh

    (3)加载驱动 在开发板终端进入/sdio目录,执行./load.sh加载驱动 #cd /sdio #./load.sh 驱动加载完成会提示:(如果没有,则再次热插拔你的sdio wifi卡便可以看到) libertas_sdio: Libertas SDIO driver libertas_sdio: Copyright Pierre Ossman libertas: 00:0b:6c:89:62:4b, fw 9.70.3p23, cap 0x00000303 libertas: unidentified region code; using the default (USA) libertas: wlan0: Marvell WLAN 802.11 adapter

    ifconfig -a查看是否创建wlan0这个节点。 分配IP地址: #ifconfig wlan0 192.168.1.5  //也可以动态分配 dhclient wlan0 不过你得移植dhcp

    (4)创建连接暗文密码(PSK密码),通过明码转换 #cd /etc #wpa_passphrase FS2410 1234567890 >> wpa_supplicant.conf 此时将在wpa_supplicant.conf文件中生成: network={       ssid="FS2410"       #psk="1234567890"       psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba }

    (5)然后修改wpa_supplicant.conf配置文件,把 psk="1234567890" 这一行明文密码改成生成的暗文密码,即:         psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba 其它生成的多余信息删除,最后wpa_supplicant.conf文件如下:

    # WPA-PSK/TKIP  ctrl_interface=/var/run/wpa_supplicant

    network={            ssid="FS2410"     //填写无线网络的的用户名            key_mgmt=WPA-PSK            proto=WPA            pairwise=TKIP            group=TKIP                     psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba }  

    (6)连接AP 在开发板终端输入wpa_supplicant回车,会显示帮助信息,最后有个: example:       wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf 拷贝example用法,执行: # wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf &(需要一直放在后台运行) 打印信息有: Trying to associate with 00:26:f2:0d:5a:c4 (SSID='FS2410' freq=2412 MHz) Associated with 00:23:68:28:4e:a8 CTRL-EVENT-DISCONNECTED bssid=00:23:68:28:4e:a8 reason=0 Associated with 00:26:f2:0d:5a:c4 WPA: Key negotiation completed with 00:26:f2:0d:5a:c4 [PTK=TKIP GTK=TKIP] CTRL-EVENT-CONNECTED - Connection to 00:26:f2:0d:5a:c4 completed (auth) [id=0 id_str=] …… 再ping下网关,是否连接成功: #ping 192.168.1.1

    3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 17.627/20.023/24.631 ms ……

    无线网卡连接成功!

     

    本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-10/45202.htm

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

    使用心得一 编译完成后可以发现有几个可执行程序:wpa_supplicant,wpa_cli等。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,可以使用wpa_cli来搜索、设置、和连接网络等,大部分情况下编辑好配置文件,运行wpa_supplicant就可以连通网络了,创建一个wpa_supplicant.conf,键入以下内容: #可有可无,没有的话无法用wpa_cli terminate来关闭wpa_supplicant ctrl_interface=/var/run/wpa_supplicant # 确保只有root用户能读取WPA的配置,可有可无,尤其是在嵌入式设备上 ctrl_interface_group=0 # 使用wpa_supplicant来扫描和选择AP,也可以设置成0或2,但只有1才能正确工作 ap_scan=1 network={ #AP的名字 ssid="my_network" #AP的key psk="my_key" }     配置文件弄好后就可以运行wpa_supplicant了。在那之前当然要先插好无线网卡,载入驱动: bash# insmod zd1211b.ko bash# ifconfig eth1 up bash# wpa_supplicant -B -ieth1 -Dzydas -c/etc/wpa_supplicant.conf         参数-B代表后台运行,-ieth1代表使用设备eth1,-Dzydas代表网卡芯片是zydas,-c指定配置文件。    接下来就可以看下网络是否连通了: bash# iwconfig bash# udhcpc -i eth1 -n zd1211b的驱动使用wpa_supplicant来配置的时候会有隔段时间就锁死系统一会的情况,很奇怪。 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 使用心得二

    wpa_supplicant的使用主要是配置wpa_supplicant.conf,以下是一个配置文件的例子:

    #可有可无,没有的话无法用wpa_cli terminate来关闭wpa_supplicant

    ctrl_interface=/var/run/wpa_supplicant

    # 确保只有root用户能读取WPA的配置,可有可无,尤其是在嵌入式设备上

    ctrl_interface_group=0 # 使用wpa_supplicant来扫描和选择AP,也可以设置成0或2,但只有1才能正确工作 ap_scan=1 network={ #AP的名字 ssid="my_network" #AP的key psk="my_key" } 配置文件弄好后就可以运行wpa_supplicant了:

     wpa_supplicant–B –iwlan0 –c /etc/tkip.conf 

    后台运行wpa_supplicant(自动打开wifi模块wlan0,自动搜索AP并连接),参数-B为后台运行,-iwifi设备,-c指定wpa_supplicant配置文件

     wlan0自动获取IP:

    udhcpc–i wlan0

     接下来就可以看下网络是否连通了:

    iwconfig udhcpc -i wlan0 -n
    转载请注明原文地址: https://ju.6miu.com/read-670780.html

    最新回复(0)