在嵌入式平台下当wifi驱动移植好之后,我们可以用Wireless和wpa_spplicant工具进行网络的配置,这两个工具的具体移植方法这里不再讲述!但是此时我们会发现我们上网都是通过wpa_spplicant读取wpa_spplicant.conf文件进行访问的,改文件中包含了wifi所需的账号密码等一些主要信息,在启动前我们需手动配置好,下面我们就讲述一下通过脚本实现动态的获取账号密码信息。
1、原始的wpa_spplicant.conf文件内容:
# WPA-PSK/TKIP
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="cw"
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
pairwise=TKIP CCMP
group=CCMP TKIP WEP104 WEP40
psk="12345678"
}
2、首先讲一下wpa_cli这个工具,利用该命令我们可以对wpa_spplicant.conf的内容进行修改,主要涉及下面几行代码:
wpa_cli -iwlan0 add_network <span style="white-space:pre"> </span> #添加一个网络,此时会返回一个数值,如果是首次执行这句话,一般返回0,下面几行代码中含0就是来自于此
wpa_cli -iwlan0 set_network 0 ssid "${array[0]}" #修改wifi的账户名,"${array[0]}"保存的是账户信息,这里利用了一个shell的全局变量array[0]
wpa_cli -iwlan0 set_network 0 key_mgmt WPA-PSK #设置wifi的网络格式
wpa_cli -iwlan0 set_network 0 psk "${array[1]}" #修改wifi的密码,"${array[1]}"保存的是密码信息,这里也是利用了一个shell的全局变量array[1]
wpa_cli -iwlan0 enable_network 0<span style="white-space:pre"> </span> #使能改网卡,也就是启用wlan0
sleep 1
wpa_cli -iwlan0 save_config <span style="white-space:pre"> </span> #对刚才的配置信息进行保存
3、ID.dat,PWD.dat分别存放的是wifi的账号密码,在脚本下通过读取这两个文件把账号密码信息传给array[0],array[1]全局变量,进而执行wpa_cli命令。
4、代码:
connect.sh
#!/bin/bash
declare -a ID
array[0]=value0
array[1]=value1
list0=`cat ID.dat`
for ID in $list0
do
array[0]=$ID
# echo $ID;
# echo ${array[0]}
done
declare -a PWD
list1=`cat PWD.dat`
for PWD in $list1
do
array[1]=$PWD
# echo $PWD;
# echo ${array[1]}
done
echo **********scanning AP**************
echo ***********************************
echo wlan0 up ...
ifconfig wlan0 up
echo wlan0 up done
sleep 1
echo scanning AP ...
iwlist wlan0 scanning
echo scanning AP done
sleep 1
echo **********end scan*****************
echo ***********************************
echo **********connecting***************
echo ***********************************
echo mkdir ...
mkdir -p /var/run/wpa_supplicant
echo mkdir done
sleep 1
echo run wpa_supplicant ...
wpa_supplicant -Dwext -iwlan0 -c /etc/wpa_supplicant.conf -dd &
echo wpa_supplicant running in background
sleep 1
echo **********end connect**************
echo ***********************************
echo **********setting network**********
echo ***********************************
wpa_cli -iwlan0 add_network
wpa_cli -iwlan0 set_network 0 ssid "${array[0]}"
wpa_cli -iwlan0 set_network 0 key_mgmt WPA-PSK
wpa_cli -iwlan0 set_network 0 psk "${array[1]}"
wpa_cli -iwlan0 enable_network 0
sleep 1
wpa_cli -iwlan0 save_config
sleep 1
echo **********************************
echo **********end set*****************
echo **********getting ip**************
echo **********************************
echo getting ip ...
udhcpc -i wlan0
sleep 1
echo **********ifconfig****************
echo **********************************
echo the ip is ...
ifconfig
ID.dat
"cw"
PWD.dat
"12345678"
注意:
${array[1]}是双引号,账号密码也都是双引号!如果不能正确设置,很有可能是这种问题!
完!