嵌入式Linux之wifi配网脚本分析
嵌入式Linux系统,一般都支持wifi联网,可以通过sh脚本或其它语言代码编程来实现wifi联网。
本篇来介绍一种通过sh脚本来配置wifi的脚本执行原理。
1 sh脚本wifi联网介绍
这里以飞凌开发板中的wifi启动脚本为例来介绍。
在飞凌开发板的串口中,执行如下命令(调用fltest_wifi.sh脚本,并指定一些参数),进行wifi连接:
fltest_wifi.sh -i mlan0 -s "wifi_name" -p wifi_password
- wifi_name是自己的wifi名称
- wifi_password是对于的wifi密码
然后ifconfig指令可以查看板子IP信息:
[root@ok3568:/usr/sbin]# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:239 errors:0 dropped:0 overruns:0 frame:0
TX packets:239 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:346556 (338.4 KiB) TX bytes:346556 (338.4 KiB)
mlan0 Link encap:Ethernet HWaddr E8:FB:1C:66:AF:DF
inet addr:192.168.5.111 Bcast:192.168.5.255 Mask:255.255.255.0
inet6 addr: fe80::eafb:1cff:fe66:afdf/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1799 errors:0 dropped:0 overruns:0 frame:0
TX packets:981 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:109635 (107.0 KiB) TX bytes:331552 (323.7 KiB)
[root@ok3568:/usr/sbin]#
可以看到,mlan0这个网络接口的IP为192.168.5.111
2 fltest_wifi.sh脚本文件分析
下面来具体分析fltest_wifi.sh脚本的内容。
2.1 开头部分分析
先来看开头的这段脚本:
cnt1=`ps aux | grep hostapd | grep -v grep | wc -l`
if [ "$cnt1" != "0" ];then
killall hostapd > /dev/null
fi
/etc/init.d/S80dnsmasq stop > /dev/null
分析:
首先是执行一条指令,确认正在运行的hostapd进程的个数,保存在cnt1变量中
ps aux
:查看系统中当前正在运行的所有进程的详细信息| grep hostapd | grep -v grep
:匹配包含hostapd 并且不包含grep字样的行| wc -l
:统计行数(word count,字数统计)
注:“ps aux” 其实是一种组合使用的命令形式
- “ps” 是 “process status”(进程状态)的缩写
- “a” 表示显示所有用户(包括其他用户和终端用户)的进程,不仅仅是当前用户启动的进程
- “u” 表示以用户为导向的详细格式(user-oriented detailed format)来显示进程信息,会给出诸如启动进程的用户、进程占用的 CPU 和内存资源百分比、进程状态等更为详细的信息
- “x” 表示显示没有控制终端的进程,也就是那些在后台运行的、不是通过常规终端启动的进程
hostapd
是Linux中一款用于创建无线接入点(Wireless Access Point,WAP)的软件
hostapd的功能是用来创建AP,因为是要连接wifi,而不是创建热点,所以如果有hostapd进程,则停掉。
如果cnt1不为0,则杀掉所有的hostapd进程
killall
:用于通过进程名来终止一个或多个正在运行的进程>
:Linux中常用的一种重定向操作,用于将命令的输出重定向到指定的位置/dev/null
:一个特殊的设备文件,可以接收任何写入的数据,但会直接丢弃这些数据
然后,执行/etc/init.d/S80dnsmasq stop
2.1.1 S80dnsmasq脚本分析
S80dnsmasq 也是一个脚本,内容为:
#!/bin/sh
[ -f /etc/dnsmasq.conf ] || exit 0
case "$1" in
start)
printf "Starting dnsmasq: "
start-stop-daemon -S -x /usr/sbin/dnsmasq
[ $? = 0 ] && echo "OK" || echo "FAIL"
;;
stop)
printf "Stopping dnsmasq: "
start-stop-daemon -K -q -x /usr/sbin/dnsmasq
[ $? = 0 ] && echo