Linux下移植和配置wpa_supplicant

宿主机:Ubuntu 12.04 LTS
开发板:NUC970 (kernel version 3.10.x)
交叉编译器:arm-linux-4.3
无线网卡类型:RTL8188ETV

需要文件:wpa_supplicant-0.7.3 , openssl-0.9.8e
wpa_supplicant源码包,下载网站:
http://w1.fi/wpa_supplicant/
openssl库,下载网站:
www.openssl.org/source/openssl-0.9.8e.tar.gz 

源码包放在 /wpa_tools 目录

1.编译 openssl 库
执行以下指令:
cd /wpa_tools
解压openssl-0.9.8e              tar xvfz openssl-0.9.8e.tar.gz -C ./
解压wpa_supplicant-0.7.3        tar xvfz wpa_supplicant-0.7.3.tar.gz -C ./

将 wpa_supplicant-0.7.3/patches 中的补丁复制到 openssl-0.9.8e 目录
cp -a wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch  ../../openssl-0.9.8e

给 openssl-0.9.8e 打补丁
cd ../../openssl-0.9.8e
patch -p1 < ./openssl-0.9.8e-tls-extensions.patch

在当前目录建立一个 tmp 目录,用来安装openssl
mkdir tmp

修改 Makefile
CC= arm-linux-gcc
AR= arm-linux-ar $(ARFLAGS) r
RANLIB= arm-linux-ranlib
INSTALLTOP=/wpa_tools/openssl-0.9.8e/tmp
OPENSSLDIR=/wpa_tools/openssl-0.9.8e/tmp

执行 make && make install 安装

安装完成后,在 /wpa_tools/openssl-0.9.8e/tmp 会生成 openssl 库
后面编译 wpa_supplicant 会依赖 openssl 库,重点关注 lib 和 include 文件夹

2.编译 wpa_supplicant
cd /wpa_tools/wpa_supplicant-0.7.3/wpa_supplicant
复制配置文件:cp defconfig .config
修改配置文件 .config
在文件里添加以下内容
CC= arm-linux-gcc -L/wpa_tools/openssl-0.9.8e/tmp/lib
CFLAGS += -I/wpa_tools/openssl-0.9.8e/tmp/include/
LIBS += -L/wpa_tools/openssl-0.9.8e/tmp/lib/

执行 make

编译完成后,在 wpa_supplicant 目录下,会生成 wpa_supplicant ,wpa_cli ,wpa_passphrase 三个应用程序

3. 配置 wpa_supplicant 
复制这三个应用程序 和 wpa_supplicant.conf 到 开发板的根文件系统
wpa_supplicant.conf 存放到 /etc 目录
三个应用程序存放在 /bin 目录

无线网卡参数
ssid:test
密码:12345678
安全类型:WPA2-PSK

使用 wpa_passphrase 来生成无线接入点配置文件,
在开发板的终端执行:
wpa_passphrase test 12345678 >> /etc/wpa_supplicant.conf
其中,test 为ssid ,12345678 为链接密码,生成的配置信息保存在 /etc/wpa_supplicant.conf
这时 /etc/wpa_supplicant.conf 文件的内容为 :
network={  
        ssid="test"  
        #psk="12345678"  
        psk=992194d7a6158009bfa25773108291642f28a0c32a31ab2556a15dee97ef0dbb    


创建文件夹 mkdir -p /var/run/wpa_supplicant

继续在 /etc/wpa_supplicant.conf 文件中添加内容,完成后如下所示:
ctrl_interface=/var/run/wpa_supplicant    
ap_scan=1
network={
        ssid="test"
        key_mgmt=WPA-PSK
        scan_ssid=1
        proto=RSN
        psk=992194d7a6158009bfa25773108291642f28a0c32a31ab2556a15dee97ef0dbb
}

以下是对配置文件的解释:可参考:http://blog.csdn.net/ziyouwa/article/details/12081009
ctrl_interface=/var/run/wpa_supplicant    尽量不要修改此内容,否则无线网卡可能不工作
ap_scan=1     使用wpa_supplicant来扫描和选择AP

network里面的内容:
ssid:无线接入点名称
psk:加密后的连接密码

key_mgmt:认证密钥管理协议,有以下解释(出自 wpa_supplicant 的官方配置文档)
# key_mgmt: list of accepted authenticated key management protocols  ---支持的协议列表  
# WPA-PSK = WPA pre-shared key (this requires 'psk' field)     ---一般都是这个,这就包括了WPA、WPA2开始的那些方式  
# WPA-EAP = WPA using EAP authentication    ---这个就是WEP开头的,猜的,求验证  
# IEEE8021X = IEEE 802.1X using EAP authentication and (optionally) dynamically  
#   generated WEP keys  
# NONE = WPA is not used; plaintext or static WEP could be used  ---这个是开放的,没密码,联通、电信之类的就这个  
# WPA-PSK-SHA256 = Like WPA-PSK but using stronger SHA256-based algorithms  
# WPA-EAP-SHA256 = Like WPA-EAP but using stronger SHA256-based algorithms  
# If not set, this defaults to: WPA-PSK WPA-EAP ---如果未设置,默认支持WAP、WEP开头那些

scan_ssid:如果无线接入点是隐藏的,这个配置项是必须的,否则无法找到接入点

proto:无线接入协议,有以下解释(出自 wpa_supplicant 的官方配置文档)
# proto: list of accepted protocols ---支持的协议列表  
# WPA = WPA/IEEE 802.11i/D3.0    
# RSN = WPA2/IEEE 802.11i (also WPA2 can be used as an alias for RSN) ---也能使用WPA2,它只是RSN的一个别名而已  
# If not set, this defaults to: WPA RSN   ---如果不设置,默认就是WPA RSN,即全部支持  

pairwise:加密方式,这个选项没有写进network,采用默认配置,有以下解释(出自 wpa_supplicant 的官方配置文档)
# pairwise: list of accepted pairwise (unicast) ciphers for WPA   ---WPA可用的加密方式列表  
# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]  ---看到没,这个就是AES,换了马甲而已  
# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] ---TKIP 这个倒是没变  
# NONE = Use only Group Keys (deprecated, should not be included if APs support  
#   pairwise keys)   ---这个估计很少用  
# If not set, this defaults to: CCMP TKIP  ---不设置的话是CCMP TKIP,看似正确,其实有些路由器无法自动识别,只能二选一,很坑爹。  

添加完内容后,执行以下指令,测试无线网卡:
加载无线网卡驱动 insmod 8188eu.ko
关闭有线网卡:ifconfig eth0 down
打开无线网卡:ifconfig wlan0 up
设置无线网卡静态ip:ifconfig wlan0 192.168.1.123

执行以下指令,使 wpa_supplicant 后台运行
wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf &
参数说明:
-Dwext 驱动协议名称
-iwlan0 使用的无线网卡
-c/etc/wpa_supplicant.conf 无线接入点配置文件路径
& 后台运行

测试是否连接成功: 
wpa_cli -iwlan0 status
ping 192.168.1.48
ping www.baidu.com



你可能感兴趣的:(源码,linux,网卡,库,交叉编译)