开发环境:
开发板:hisi3520D
内核linux3.0.8
交叉编译器:arm-hisiv100nptl-linux-gcc
wifi模块:rt5572和mt7601
在介绍wpa_supplicant工具前,需要先介绍一下它和wireless-tool的差异:
第一步:编译驱动
在网上下载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的安装目录,建议安装在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&
-i为wifi设备,-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设置所用方式。