Wifi Sta驱动移植与wifi链接使用

来源:互联网 发布:一句话网络段子精选 编辑:程序博客网 时间:2024/05/18 17:25

开发环境:

开发板:hisi3520D

内核linux3.0.8

交叉编译器:arm-hisiv100nptl-linux-gcc

wifi模块:rt5572和mt7601


    在介绍wpa_supplicant工具前,需要先介绍一下它和wireless-tool的差异:

    wpa_supplicant是一个最好的选择,但缺点是它不支持所有的驱动。
    wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA的AP。

   第一步:编译驱动

    在网上下载rt5572和mt7601的驱动,这两个驱动都存在两个版本。STA驱动和AP驱动,通俗的说就是wifi客户端驱动和wifi热点驱动,STA驱动中主要分为两个大版本DPO和DPA,两者具体的差异不太明白,但是DPA的版本编译出来rt5572和mt7601都存在三个ko文件,文件大小较大,而DPO版本的编译驱动程序只有一个ko文件,文件大小较小。处于节省flash空间目的这里选用DPO版本的驱动程序。

    修改Makefile(指定平台类型和相应平台类型下的内核与交叉编译器):

    PLATFORM = PC

    ifeq ($(PLATFORM),PC)
    LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless/
    LINUX_SRC = /home/Hi3520D_SDK_V1.0.3.0/osdrv/kernel/linux-3.0.y
    CROSS_COMPILE = arm-hisiv100nptl-linux-
    endif

    修改os/linux/config.mk(添加wpa支持)

    HAS_WPA_SUPPLICANT=y

    HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

     编译驱动程序:#make ARCH=arm


第二步:交叉编译wpa-supplicant工具

   下载wpa-supplicant2.2开源包,openssl-0.9.8e开源包

    第一步编译openssl-0.9.8e

 把wpa_supplicant-2.2里面的patches文件夹下的openssl-0.9.8e-tls-extensions.patch文件拷贝到openssl-0.9.8e目录下,运行:

pathc–p1<openssl-0.9.8e-tls-extensions.patch

然后建立openssl的安装目录,建议安装在openssl-0.9.8e目录下,因为生成的库等只在交叉编译wpa_supplicant时使用,这样可以保持系统干净。

进入openssl-0.9.8e目录修改Makefile,修改如下:

CC=arm-linux-uclibcgnueabi-gcc
AR=arm-linux-uclibcgnueabi-ar$(ARFLAGS) r

RANLIB=arm-linux-uclibcgnueabi-ranlib
INSTALLTOP=刚才你建立的安装目录,要使用绝对路径,不然在make install的时候会出错
OPENSSLDIR=刚才你建立的安装目录,要使用绝对路径,不然在make install的时候会出错

然后,执行make&&make install。


第二步编译wap-supplicant2.2

wpa_supplicant目录,首先执行cp defconfig .config 拷贝生成编译配置,添加一下配置

CC=arm-hisiv100nptl-linux-gcc
CFLAGS += -I/home/openssl-0.9.8e/Demo/include
LIBS += -L/home/openssl-0.9.8e/Demo/lib
LIBS_p += -L/home/openssl-0.9.8e/Demo/lib

执行#make 编译生成3个文件wpa_supplicant, wpa_cli, wpa_passphrase


第三步 生成有效的wpa配置文件

wpa-psk/wpa2-psk方式链接热点:

ctrl_interface=/var/ra0
eapol_version=1
ap_scan=1
network={
ssid="xxxxx"
scan_ssid=1
proto=WPA RSN
pairwise=CCMP TKIP NONE
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
group=TKIP CCMP
psk="xxxxx" #密码
priority=10
}

wep方式链接热点:

network={
ssid="xxxxx"
key_mgmt=NONE
wep_key0="xxx"    #ASCII 密码
#wep_key0=xxxx    #十六进制密码
wep_tx_keyidx=0
priority=5
auth_alg=SHARED
}


无密码访问热点:

network={
ssid="xxxx"
key_mgmt=NONE
}

第四步基于rt5572模块和mt7601模块链接wifi热点


测试流程如下:

#insmod xxxx.ko     加载驱动

#ifconfig -a         查看无线网卡

#ifconfig ra0 up     打开对应的无线网卡ra0

#iwlist ra0 scan    扫描wifi热点

#./wpa_supplicant -Dwext -ira0 -c/var/wpa_supplicant.conf -dd&

-iwifi设备,-c指定wpa_supplicant配置文件(wifi路由器设置为不同的协议采用不同的配置文件) -dd打开调试信息

# udhcpc -b -i ra0    自动获取ip(udhcpc需要自己移植)

#ping www.baidu.com  ping外网,如果能ping通外网就成功了


测试发现bug:

模块不支持wpa2-psk方式链接热点

解决方法:将wpa_supplicant的版本换成0.6.10的版本

rt5572不支持wpa-psk方式链接热点

解决方法:将rt5572的驱动包换成2012_03_22_RT5572_Linux_STA_v2.6.0.0_DPO版本


上诉三种配置文件,经测试发现支持所用常用的wifi配置,wifi配置界面如下,红色椭圆为支持协议类型,绿色矩形为支持下拉框内的,任何认证类型与加密算法的搭配,这些涵盖了常用wifi设置所用方式。


0 0