板卡自带了一个wifi拨号上网的脚本程序。
程序编写
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #!/bin/sh cnt1=`ps aux | grep hostapd | grep -v grep | wc -l` #计算正在运行的 hostapd 进程的数量 if "$cnt1" != "0" ;then killall hostapd > /dev/null fi #如果 hostapd 进程的数量不为零(即有进程在运行),则停止所有 hostapd 进程 ifconfig uap0 down function usage() { echo "Usage: -i <wifi> -s <ssid> -p <password>" echo "eg: ./wifi.sh -i mlan0 -s elf -p NONE " echo " -i : mlan0 or mlan1" 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 } #定义一个函数 parse_args,用于解析传入的命令行参数,并根据参数设置对应的变量 if \[ # != 6 ] then usage; exit 1; fi #检查传入的参数数量是否为6(包括脚本名称在内)。如果不是,则输出使用说明并退出 parse_args @ #调用 parse_args 函数来解析命令行参数 if \[ -e /etc/wpa_supplicant.conf \] then rm /etc/wpa_supplicant.conf fi #如果 /etc/wpa_supplicant.conf 文件存在,则删除它 echo \\#PSK/TKIP \>\> /etc/wpa_supplicant.conf echo ctrl_interface=/var/run/wpa_supplicant \>\>/etc/wpa_supplicant.conf echo ctrl_interface_group=0 \>\>/etc/wpa_supplicant.conf echo update_config=1 \>\>/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 #创建新的 /etc/wpa_supplicant.conf 配置文件,配置文件包括网络的基本设置、SSID 和#密码等 ifconfig -a\|grep mlan0 \|grep -v grep \> /dev/null if \[ ? -eq 0 ] then ifconfig mlan0 down > /dev/null fi #检查 mlan0 网络接口是否存在,如果存在,则关闭它 ifconfig -a|grep mlan1 |grep -v grep > /dev/null if $? -eq 0 then ifconfig mlan1 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 ifconfig -a|grep usb0 |grep -v grep > /dev/null if $? -eq 0 then ifconfig usb0 down > /dev/null fi ps -fe|grep wpa_supplicant |grep -v grep > /dev/null if $? -eq 0 then kill -9 (pidof wpa_supplicant) fi #查找是否有wpa_supplicant进程运行,如果有则kill掉 sleep 1 ifconfig wifi up > /dev/null sleep 1 #启动wifi接口 (wpa_supplicant -Dnl80211,wext -iwifi -c/etc/wpa_supplicant.conf >/dev/null) & echo "waiting..." sleep 3 wpa_cli -iwifi status \|grep COMPLETED \|grep -v grep \>/dev/null if \[ ? -eq 0 ] then udhcpc -i wifi echo "Finshed!" else echo "try to connect again..." sleep 3 wpa_cli -iwifi status |grep COMPLETED |grep -v grep >/dev/null if $? -eq 0 then udhcpc -i wifi echo "nameserver 114.114.114.114" \> /etc/resolv.conf echo "Finshed!" else echo "\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*" echo "connect faild,please check the passward and ssid" kill -9 (pidof wpa_supplicant) exit 1 fi fi #尝试连接Wi-Fi网络并获取IP地址,若失败则重新尝试,最终若连接仍失败则输出错误#信息并终止wpa_supplicant进程 |
该脚本主要用于配置WiFi网络连接。脚本通过命令行参数 `-i`, `-s`, `-p` 来获取WiFi的相关信息,然后根据这些信息配置 `/etc/wpa_supplicant.conf` 文件,并启动 `wpa_supplicant` 来连接WiFi。接下来的步骤包括使WiFi网络接口起来,使用wpa_cli确认连接是否成功。成功后使用 udhcpc 获取 IP 地址。如果连接失败,则输出错误信息,并尝试重新连接。
具体步骤如下:
1.检查并终止hostapd进程。如果hostapd正在运行,则使用killall命令终止它。
2.关闭uap0接口。
3.定义usage和parse_args函数。usage函数提供了脚本的使用说明,parse_args函数解析命令行参数,如Wi-Fi接口(-i)、SSID(-s)和密码(-p)。
4.检查参数个数。吐过参数数量不等于6,则调用usage函数并退出。
5.生成wpa_supplicant.conf 配置文件。删除旧的配置文件(如果存在),然后创建新的配置文件,写入 SSID 和密码等信息。
6.关闭其他网络接口。确保 mlan0、mlan1、eth0、eth1 和 usb0 接口都被关闭。
7.终止 wpa_supplicant 进程。如果 wpa_supplicant 进程正在运行,则杀死它。
8.配置并启动 wpa_supplicant。启动 wpa_supplicant 以连接到指定的 Wi-Fi 网络。
9.检查连接状态并获取 IP 地址。使用 wpa_cli 检查连接状态,如果连接成功,则使用 udhcpc 获取 IP 地址。如果连接失败,则再次尝试并最终报告失败。
开发板测试
|------------------------------------------------------------------------------------|
| root@ELF2:~# chmod 777 wifi.sh root@ELF2:~# ./wifi.sh -i 8723 -s p50 -p xx000628 |