飞凌嵌入式ElfBoard-Shell编程应用实例-使用WiFi拨号上网

板卡自带了一个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 |

相关推荐
wdeok38 分钟前
Socket编程Tcp
服务器·网络·tcp
千舟软件1 小时前
报修系统对接企业微信和钉钉的3种方式_千舟报修云
服务器·钉钉·企业微信
LongRunning15 小时前
【Linux】RK3568-OpenCV+YOLO(八)
linux·opencv·yolo
迪康coolmu16 小时前
出差终端数据安全落地实战:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·经验分享·笔记·其他·安全·php
xiaoye-duck16 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
民乐团扒谱机18 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
물の韜18 小时前
ZYNQ/FMQL系列Linux之I2C开发实战
linux·arm开发·嵌入式硬件·设备树·iic·zynq
qq_3718021119 小时前
Ubuntu Linux中安装WorkBuddy
linux·运维·服务器·ubuntu
无足鸟ICT19 小时前
【RHCA+】iptraf-ng(网络监控分析)
linux·网络
独隅19 小时前
WebStorm 在 Linux 环境下的实战安装与高效开发指南
linux·ide·webstorm