板卡自帶了一個(gè)wifi撥號(hào)上網(wǎng)的腳本程序。
程序編寫(xiě)
#!/bin/sh
function usage()
{
echo "Usage: -i <wifi> -s <ssid> -p <password>"
echo "eg: ./wifi.sh -i 8723 -s elf -p NONE "
echo " -i : 8723"
echo " -s : wifi ssid"
echo " -p : wifi password or NONE"
}
function parse_args()
{
while true; do
case "$1" in
-i ) wifi=$2;echo wifi $wifi;shift 2 ;;
-s ) ssid=$2;echo ssid $ssid;shift 2 ;;
-p ) pasw=$2;echo pasw $pasw;shift 2 ;;
-h ) usage; exit 1 ;;
* ) break ;;
esac
done
}
if [ $# != 6 ]
then
usage;
exit 1;
fi
parse_args $@
if [ -e /etc/wpa_supplicant.conf ]
then
rm /etc/wpa_supplicant.conf
fi
echo #PSK/TKIP >> /etc/wpa_supplicant.conf
echo ctrl_interface=/var/run/wpa_supplicant >>/etc/wpa_supplicant.conf
echo network={ >>/etc/wpa_supplicant.conf
echo ssid="$ssid" >>/etc/wpa_supplicant.conf
echo scan_ssid=1 >>/etc/wpa_supplicant.conf
if [ $pasw == NONE ]
then
echo key_mgmt=NONE >>/etc/wpa_supplicant.conf
else
echo psk="$pasw" >>/etc/wpa_supplicant.conf
echo key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE >>/etc/wpa_supplicant.conf
echo group=CCMP TKIP WEP104 WEP40 >>/etc/wpa_supplicant.conf
fi
echo } >>/etc/wpa_supplicant.conf
ifconfig -a|grep wlan0 |grep -v grep > /dev/null
if [ $? -eq 0 ]
then
ifconfig wlan0 down > /dev/null
fi
ifconfig -a|grep eth0 |grep -v grep > /dev/null
if [ $? -eq 0 ]
then
ifconfig eth0 down > /dev/null
fi
ifconfig -a|grep eth1 |grep -v grep > /dev/null
if [ $? -eq 0 ]
then
ifconfig eth1 down > /dev/null
fi
lsmod|grep 8723du |grep -v grep > /dev/null
if [ $? -eq 0 ]
then
rmmod 8723du
fi
if [ $wifi == 8723 ]
then
insmod /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtl8723DU/8723du.ko > /dev/null
fi
sleep 3
ifconfig wlan0 up
sleep 1
ps -fe|grep wpa_supplicant |grep -v grep > /dev/null
if [ $? -eq 0 ]
then
kill -9 $(pidof wpa_supplicant) > /dev/null
rm /var/run/wpa_supplicant -r
fi
if [ $wifi == 8723 ]
then
wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf &
fi
sleep 3
udhcpc -i wlan0
echo "Finshed!"
該腳本主要用于配置WiFi網(wǎng)絡(luò)連接。腳本通過(guò)命令行參數(shù) `-i`, `-s`, `-p` 來(lái)獲取WiFi的相關(guān)信息,然后根據(jù)這些信息配置 `/etc/wpa_supplicant.conf` 文件,并啟動(dòng) `wpa_supplicant` 來(lái)連接WiFi。接下來(lái)的步驟包括使WiFi網(wǎng)絡(luò)接口起來(lái),檢查以前加載的內(nèi)核模塊是否已經(jīng)加載,如果已經(jīng)加載則卸載。最后使用 `udhcpc` 命令為分配一個(gè)IP地址,并輸出“Finished!”來(lái)提示腳本執(zhí)行完畢。
具體步驟如下:
一、定義了兩個(gè)函數(shù) `usage` 和 `parse_args`,前者用于打印命令的用法,后者用于解析命令行參數(shù)。
二、如果輸入的參數(shù)個(gè)數(shù)不等于6,則調(diào)用 `usage` 打印用法并退出。
三、解析命令行參數(shù)。
四、如果 wpa_supplicant.conf 文件存在,則刪除該文件。
五、在 wpa_supplicant.conf 文件中添加 WiFi 配置信息。
六、嘗試關(guān)閉、卸載以前的網(wǎng)絡(luò)使用的的內(nèi)核模塊。
七、如果是 rtl8723 的WiFi模塊,加載新的模塊。
八、啟動(dòng)WiFi接口,并啟動(dòng)wpa_supplicant進(jìn)行WiFi連接。
九、等待一段時(shí)間,再使用 `udhcpc` 命令為WiFi網(wǎng)絡(luò)接口分配IP地址。
十、輸出“Finished!”來(lái)標(biāo)識(shí)腳本執(zhí)行完畢。
開(kāi)發(fā)板測(cè)試
root@ELF1:~# chmod 777 wifi.sh
root@ELF1:~# ./wifi.sh -i 8723 -s p50 -p xx000628
可以看到wifi腳本連接過(guò)程沒(méi)有問(wèn)題,下面我們ping一個(gè)域名試試。
聯(lián)網(wǎng)正常。