A20开发经验心得第一集-linux下面wifi拨号软件wpa_supplicant的移植操作及其他

来源:互联网 发布:北京市数据开放平台 编辑:程序博客网 时间:2024/06/14 17:06

拿到这个开发板已经有3个星期了。使用的是全志A20开发板。首先重中之重的内容就是WIFI的功能。因为1/3的工作内容就是使用WIFI,所以拿到手就一直进行调试。

可是倒霉的是,怕什么就来什么。由于第一次使用WIFI,所以什么也不懂。开发板也没有提供这方面的帮助。问了老板几个问题后,就不管我了。不过好歹让我知道了,WIFI是用wpa_supplicant这个软件来拨号的。于是网上查了N篇资料,花了1天时间,就基本掌握了使用方法。于是设置好,然后保存重启。

但是奇怪的事情来了,我的手机AP一直没有显示有设备连接,就是已连接设备这里有的时候会有变化。于是,又是查资料,最后突然想到是不是没有自动获取IP地址。于是手动udhcp了一下,然后果然成功了。看着手机AP里面出现的联网设备信息,心里很是高兴。

正常情况故事到这里就结束了,可惜现实果然是不让你如意。设备连上去后,首先是不断的掉线重连,然后在ping一段时间之后,一定会死掉。这下子郁闷了,买来的开发板会出现这样的问题,都不知道是硬件问题,还是驱动问题,还是我的操作问题了。麻烦就此产生,在不断找资料进行各种测试,和开发板老板沟通。进行了1周时间之后,我们基本上确定,可能是WIFI芯片本身的质量问题导致的。那么,怎么办,于是决定选用USB的WIFI。看到内核都是支持USB WIFI的,由于已经研究了1周对这个也有了解了,于是最后选中了rtl8188eu这个WIFI。马上采购,然后之前的板载SDIO的AP6210的问题继续找,因为也只是怀疑。

第二周,RTL8188EU回来了,按照方法编译了驱动之后加载上去。然后很正常的识别到了WIFI。于是查询附近的无线网,也很正常。最后就是连接了。结果问题又来了,怎么都连不上。妈的,之前的AP6210还能连接上,现在RTL8188EU直接连不上,这是怎么回事呢。第二轮的纠结再次展开。继续查资料,从驱动本身,到拨号方式,再到wpa_supplicant拨号软件,都是各种尝试,全部不行。中间还用LUBUNTU这种来进行了测试,这个里面的就可以正常拨号。第二周问题没解决。

第三周,继续折腾,又买了个RTL8192CU的WIFI,还是一个德行。这周主要是去做程序去了,WIFI这块研究的时间只占1/3。不过这周进行了一些测试。发现,在没有密码的开放网络情况下,3种WIFI都可以连上。然后会不断断线重连。这次知道了是由于WIFI开启了省电模式,去掉省电之后就可以正常连接了。然后在开放网络的时候2种USB WIFI都可以正常收发数据,速度还不错。那么,问题基本可以确定,应该是拨号软件wpa_supplicant或者是它的配置文件的问题了。

第四周周一,我决定抛弃这个A20的板子,做最后一天的测试,如果不行,就换板子。今天我决定把USB WIFI驱动移植到我之前的S5PV210开发板上面。进行了一早上的环境搭建配置,驱动就用S5PV210的编译器编译好了。于是拷贝到S5PV210板子里面。insmod一下,正常加载。识别到wlan0了。我准备再编译一个wpa_supplicant到这个里面去拨号。结果,我发现板子里面已经有一个wpa_supplicant了,是个老版本的0.5.10的版本。那既然有了,就不编译了,直接用吧。于是轻车熟路配置好/etc/wpa_supplicant,其实就是修改里面的ssid和psk。然后我发现,一下子就成功了。

于是又进行了一番折腾。最后我决定编译一个0.5.10版本的wpa_supplicant到A20上面,实验一把,不能成,就只能换板子了。不过A20速度快,加钱便宜,真的不想换。

最后的情况就是,换成0.5.10后,一把成功了。想了各种原因,却没有想到是软件版本的问题。那现在问题解决了,这里就把编译wpa_supplican0.5.10的方法公布一下。

首先下载wpa_supplicant-0.5.10.tar.gz,这个可以上官网下载,地址是http://w1.fi/releases/wpa_supplicant-0.5.10.tar.gz

然后下载openssl-0.9.8e.tar.gz,这个也是官网下载,http://www.openssl.org/source/old/0.9.x/openssl-0.9.8e.tar.gz,之所以下载这个是因为wpa编译的时候需要使用openssl,而这个0.5.10里面的wpa补丁版本是支持0.9.8e的openssl。

下载之后tar xzvf xxx    解压缩这2个文件,之后复制我从网上找到的最有效的一个操作流程。wpa_supplicant版本不一样,但是操作流程是一样的。至此,本次项目开发最重要的问题在纠结了3周之后终于完成。A20开发心得的第一集到此结束。注意,如果不手动配置IP地址的话,需要使用udhcp  -i wlan0来自动获取IP地址。

二、编译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

patch -Np1 -i openssl-0.9.8e-tls-extensions.patch

如果出现拨号困难,或者疯狂掉线,可以考虑是否打了上面这个补丁
        #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


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

三、编译wpa_supplicant 
进入wpa_supplicant-0.7.3.tar.gz解压生成的wpa_supplicant-0.7.3/wpa_supplicant目录中:
        #cp defconfig        .config
        #vim .config
                CC=arm-linux-gcc  -L/usr/local/ssl/lib/
          #CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
CFLAGS += -I/usr/local/ssl/include
#CPPFLAGS += -I../src/include -I../../src/router/openssl/include
LIBS += -L/usr/local/ssl/lib
        #make

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

碰到问题: cannot find -lcrypto

Makefile增加LIBS_p += -L/usr/local/ssl/lib


编译生成wpa_supplicant、wpa_passphrase,将这两个文件拷贝到目标板的/bin/目录下。


在目标板中创建/etc/wpa_supplicant.conf文件,文件内容如下:

ctrl_interface=/var/run/wpa_supplicant


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


还有一种说法,说需要使用wpa_passphrase ssid名 密码 >> /etc/wpa_supplicant.conf来给密码加密,但我实际使用过程中发现并不需要这个,所以有朋友遇到拨号不上,可以使用这个加密一下密码试试,方法如下:

之后wpa_supplicant.conf中会添加以下内容,然后把最后面的经过加密的密码修改到上面去,再把下面的内容删掉!

network={
      ssid="max"
      #psk="1234567890"
      psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba
}

如:

network={

                ssid="max"     //填写无线网络的的用户名
                key_mgmt=WPA-PSK
                proto=WPA
                pairwise=TKIP
                group=TKIP

                psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba               

                #psk="1234567890" //填写密码
}


运行:wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf 

然后再:ifconfig wlan0 192.168.1.99 netmask 255.255.255.0

运行ping网关。

然后

0 0
原创粉丝点击