一、环境搭建
1、设置VMWARE的网络为桥接,并选择哪一个网卡
2、设置开发板网卡网段和PC不相同
3、根据网卡设备的PID,VID(grep “0x3327” -nR),配置内核以支持所使用的网卡,以及该网卡驱动的依赖。(cd drivers/net/wireless) -> ath9k
4、网卡需要下载固件。把固件htc_9271.fw放到单板/lib/firmware。接上USB网卡, ifconfig wlan0 up
二、使用WiFi网卡
四种应用程序:iw, wpa_supplicant,dhcp
2.1 认证、加密
认证、加密发展史上,有三个版本:
初级版本 open/open
open/wep
wep/wep
过度版本(WPA) 802.1x/TKIP,WEP
PSK/TKIP,WEP
最终版本(WPA2) 802.1x/CCMP(AES-CCMP)
PSK/CCMP(AES-CCMP)
对于最终版本:802.1x连接到AP,在通过服务器验证(公司企业);PSK则是连接到AP,根据事先设置好的密码,验证通过皆可使用。
2.2 iw工具的编译使用
iw是iwconfig的替代品,可用2种加密认证:open、WEP。但是渐渐被替代,之所以还要使用,是因为IW具有扫描等比较好用的功能。
2.2.1 IW依赖安装
iw依赖于libn13:
tar xzf libnl-3.2.23.tar.gz
cd libnl-3.2.23/
./configure --host=arm-linux --prefix=$PWD/tmp
把编译出来的头文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cd tmp/include/libnl3
sudo cp netlink -rf /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
把编译出来的库文件应该放入:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
把编译出来的库文件应该放入NFS文件系统的lib目录:
/work/nfs_root/fs_mini_mdev_new/lib
2.2.2 IW编译安装
tar xjf iw-3.11.tar.bz2
cd iw-3.11/
修改Makefile:
CC = “arm-linux-gcc”
NL3xFOUND := Y
#LIBS += $(shell $(PKG_CONFIG) --libs $(NLLIBNAME))
#CFLAGS += $(shell $(PKG_CONFIG) --cflags $(NLLIBNAME))
2.2.3 IW使用
此时重启开发板,可以使用iw工具了。
iw list // 列出WIFI网卡的性能
ifconfig wlan0 up
iw dev wlan0 scan // 扫描WIFI AP
iw wlan0 connect cscs // 连接到WIFI AP:cscs (open)
这样就实现了开放网络的连接了。
接下来测试某种加密认证方式的连接。
iw wlan0 connect cscs keys d:0:18380459913 // 连接到WIFI AP:cscs (WEP)
d: default, 0: 第0个密码
连接成功,可以通过ping查看连接状态。当需要断开连接时:
iw wlan0 disconnect
可以看到,iw的使用比较简单,但是只适用于open,以及WEP两种加密认证方式,所以实用性很低。
2.3 wpa_supplicant
wpa_supplicant可用于上述4种"认证/加密",先编译它的依赖libopenssl,编译过程不多赘述了,接下来重点测试软件的使用。首先,wpa_supplicant需要一个.config文件,用于记录连接的信息,如密码等等,内容如下:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="CSCS"
key_mgmt=NONE
}
a、open:
CSCS是一个开放网络,key_mgmt代表的是没有密码,下面连接,并查看状态。
wpa_supplicant -B -c/etc/plaintext.conf -iwlan0
wpa_cli -iwlan0 status // 查看状态
ifconfig wlan0 192.168.1.55
ping 192.168.1.1
b、WEP:
cscs通过WEP加密,需要修改.config文件,添加wifi名字和密码:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="dswei"
key_mgmt=NONE
wep_key0="baiwenwang123"
wep_tx_keyidx=0
}
设置完成,可以连接:
wpa_supplicant -B -c/etc/wep.conf -iwlan0
wpa_cli -iwlan0 status // 查看状态
ifconfig wlan0 192.168.1.55
ping 192.168.1.1
c、WPA(TKIP)
wpa_supplicant -B -c/etc/wpa-psk-tkip.conf -iwlan0
wpa_cli -iwlan0 status // 查看状态
ifconfig wlan0 192.168.1.55
ping 192.168.1.1
.config
ctrl_interface=/var/run/wpa_supplicant # 一个目录,用于wpa_supplicant和wpa_cli的socket通信
network={
ssid="cscs"
proto=WPA # proto: list of accepted protocols, 可取WPA,RSN
# If not set, this defaults to: WPA RSN
key_mgmt=WPA-PSK # 认证方式
# If not set, this defaults to: WPA-PSK WPA-EAP
pairwise=TKIP # If not set, this defaults to: CCMP TKIP
group=TKIP # If not set, this defaults to: CCMP TKIP WEP104 WEP40
psk="18380459913"
}
wpa_cli可工作于"命令模式"和"交互模式",并且配置文件里设置多个network:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="cs1"
psk="18580413154"
}
network={
ssid="cs2"
psk="18380459913"
}
若想要连接外网,还需要DNS域名解析,以及路由设置
修改/etc/resolv.conf添加DNS:
nameserver 192.168.1.1
设置网关:
route add default gw 192.168.1.1
2.4 dhcp
DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。
完成编译安装以后,具体研究一下使用:
mkdir -p /var/db
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
dhclient wlan0
此时可以自动分配IP。
一连接上WIFI AP, 就自动执行dhclient的实现,创建脚本:cat /sbin/wpa_action.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
wpa_cli -a/sbin/wpa_action.sh -B
else
killall wpa_supplicant
killall wpa_cli
killall dhclient
fi