首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM上的linux如何实现无线网卡的冷插拔和热插拔(2)

ARM上的linux如何实现无线网卡的冷插拔和热插拔(2)

1.1. ifcfg-wlan0配置文件/apps/etc/network/ifcfg-wlan0配置文件中的内容如下:
/apps/etc/network >: cat ifcfg-wlan0
#Wireless Network adapter RT3070(wlan0) device configure file
#FILE:/apps/etc/network/ifcfg-wlan0
# Copyright (C) 2012 GuoWenxue <guowenxue@gmail.com QQ:281143292>

DEVICE=wlan0
ONBOOT=yes
NAME="RT3070"
TYPE=WLAN

#The WiFi Module should work on AP or STA mode
#AP mode 是类似于一个不带有限接口lan的无线路由,即市面上的迷你无线路由,STA  mode是无线上网终端一般所用的模式。我们要向无线上网就必须使用STA mode
WORKMODE=STA
#WORKMODE=AP

#BOOTPROT should be static or dhcp, it will only take effact
#when the NIC work on STA mode
#可以说静态分配ip,也可以使用DHCP动态分配ip.这里使用静态,静态建立连接到速度快。
BOOTPROTO=static
#这是AP模式要使用的配置
#Work on AP mode IP address
IPADDR_AP=192.168.5.1
NETMASK_AP=255.255.255.0

#Work on STA mode IP address
IPADDR_STA=192.168.1.166
NETMASK_STA=255.255.255.0

#Gateway Settings
GATEWAY=192.168.1.1
DEFROUTE=yes

#DHCP Server configuration, only take effact when the NIC work on AP mode
#这是AP模式要使用的配置
DHCP_SERVER=yes
DHCP_START_IP=192.168.5.10
DHCP_END_IP=192.168.5.100
DHCP_NETMASK=255.255.255.0
DHCP_GATEWAY=192.168.5.1
DHCP_DNS1=4.2.2.2
DHCP_DNS2=8.8.8.8
DHCP_LEASE=18800

1.2. ifup-wlan脚本#ifup-wlan脚本解析
/apps/etc/init.d >: vim /apps/tools/ifup-wlan
#!/bin/sh                                                           
# FILE:/usr/sbin/ifup-wlan0                                                  
# Copyright (C) 2011 GuoWenxue <guowenxue@gmail.com QQ:281143292>                    
# This file used to configure the specified network interface device                 

source /etc/profile                                                                       

#判断目录是否存在,如果不存在,则赋值为/apps/etc/network目录。
                                                                                                
if [ -z "$network_cfg_dir" ];  then                                                      
   export network_cfg_dir=/apps/etc/network                              
fi                                                            

#将传入的参数赋值给DEVICE $1${1}的区别,例如:
val=10
test=${val}ue  这种情况下,是获取val变量的值,则test=10ue
text=$value    这种情况下,是获取value变量的值,这里value未定义
这两个是不一样的:
带括号的话所以{}使用来标识哪一部分是变量名
/*****************************转载声明****************************/     


DEVICE=${1}                                                                                      


#下面这个是一个很巧妙的语句,关键是&&[]这个也具有判断的功能,一般执行与判断时,如果第一个判断语句是假,则不必往下执行,如果为真就会判断下一个语句。这里如果传进来的参数有不为空,即为真时,就会执行与后面的语句打印信息,并退出脚本。

[ -z "${DEVICE}" ] && {                                                                        
   echo $"Usage: $0 <device name>" >&2                                       
   exit 1                                                                    
}

#下面的判断语句中-o是或的意思,查看man test
( EXPRESSION )
              EXPRESSION is true  真判定
! EXPRESSION
              EXPRESSION is false 否判定
EXPRESSION1 -a EXPRESSION2
              both EXPRESSION1 and EXPRESSION2 are true 与判定
EXPRESSION1 -o EXPRESSION2
              either EXPRESSION1 or EXPRESSION2 is true 或判定
-d
FILE
              FILE exists and is a directory  
-f
FILE
              FILE exists and is a regular file                                                                                   
if [ ! -d $network_cfg_dir -o ! -f "$network_cfg_dir/ifcfg-${DEVICE}" ]; then   
   echo "$0: configuration<$network_cfg_dir/ifcfg-${DEVICE}> not found." >&2                     
   echo "Usage: $0 <device name>" >&2                                                            
   exit 1                                                                                 
fi                                                                        

#判断/sys/class/net/wlan0是否存在,说明没有wlan0适配器退出
                                                                  
if [ ! -d /sys/class/net/$DEVICE/ ] ; then                                                      
   echo  "Wireless network adapter $DEVICE dosn't exist, exit now..."               
   exit                                                                                         
fi                                                                                   

#其中有个“。”相当于source命令。查看
[lingyun@vmlinux fulinux]$ man source
        .  filename [arguments]
这里是使能ifcfg-wlan0配置文件。
使能了这些文件后上面的一些参数就成为系统中的全局参数,比如说我在下面加入如下代码时,
cd $network_cfg_dir
. ifcfg-${DEVICE}
echo "print wifi workmode is $WORKMODE"
会打印如信息
/apps/tools >: sh ifup-wlan wlan0
print wifi workmode is STA
因为是在脚本中使能了这个文件,所以相当于创建了一个子进程,如果退出这个脚本后出来运行echo $WORKMODE不会有什么显示。                                                                              
cd $network_cfg_dir                                                                             
. ifcfg-${DEVICE}
继承事业,薪火相传
返回列表