openwrt高级配置(汗 照着标题就翻译过来了

openwrt Kamikaze 8.09的一般配置文件都在目录 /etc/config 下面,可以使用脚本来调用参数和设置参数。 比如 sbin/wifi(函数库在 madwifi.sh 脚本)里面就是这样配置本机上的无线网卡的。

一般来说,每个configure文件都是由一些 section 组成的,section 里面包含了option ,option 都会有一个值。 section定义包含了type和name ,其中 name不是必须定义的,若没有定义,系统会按照cfg**的形式分配给该section一个name。

举例来说,wifi的配置文件 /etc/config/wireless 内容如下:

******************************file: /etc/config/wireless ******************************************

config wifi-device wifi0
option type atheros
option channel auto
option hwmode 11g
option disabled 0

config wifi-iface
option device wifi0
option network lan
option mode adhoc
option ssid OpenWrt
option encryption none

*****************************************************************************************************

这个配置文件里面有两个section, 其type分别是wifi-device 和wifi-iface。其中wifi-device拥有一个name是 wifi0 而wifi-iface没有。

可以看到,option 具体设置了驱动或者应用程序的配置,每一项option都有name和value。

##################################华丽的分割线#######################

利用脚本可以配置这些configure file 。

首先,脚本需要添加. /etc/functions.sh库。然后,使用命令config_load <name> 来加载相应的配置文件,<name>代表配置文件的文件名,函数会在 /etc/config 目录下寻找名字为 name 的文件。

配置文件加载后,可以使用函数 config_cb() option_cb() config_foreach() config_get() 以及命令config_foreach 。详细使用如下:

1)config_cb()和option_cb() 函数是指每一个section或option执行的callback函数。就是说,config_load 命令加载的config文件中 , 每一个section都会调用config_cb()一次,每一个option都会调用option_cb()一次。其中,最后一个section的name可以用CONFIG_SECTION引用到。在所有section被调用完之后,config_cb()还会被调用一次,需要注意的是,config_cb()和option_cb() 函数需要在config_load 命令前定义(在. /etc/functions.sh被添加后)。

代码如下:

config_cb() {
local type="$1"
local name="$2"
# commands to be run for every section
}

注:变量$1 和$2分别代表section的type和name

option_cb() {
# commands to be run for every option
}

注:变量$1 和$2分别代表option的name和value

2)config_foreach命令在config_load后使用,方法如下:

config_foreach <function name> [<sectiontype>] [<arguments...>]

这条命令表示对每一个section都执行函数function name,该函数在其他地方定义。函数的参数 $1表示该section的name。如果添加sectiontype ,则只有该type的section才可以执行function name 函数。

3)config_get 命令,很简单,不作解释。

# print the value of the option
config_get <section> <option>

# store the value inside the variable
config_get <variable> <section> <option>

注:section栏填写的是section的name,注意文件中没有设定的name是由系统分配的,此种情况最好还是用config_cb()或者option_cb()函数来完成功能比较好。

4)config_set 命令:

config_set <section> <option> <value>
这个 也很简单不做解释 。只是貌似不能更改实际文件中的option的value而已,仅仅是在当前load的“文件下”。

脚本实例:

file: config_custom.sh

#this scripts is for advanced configure test , by huasion

. /etc/functions.sh

config_cb(){
local type="$1"
local name="$2"
if [ "$1" != "" ] && [ "$2" != "" ]; then
echo "my type is $1, my name is $2"
fi
#echo "last my type is $1, my name is $2"
}
option_cb(){
echo "option is $1 and option name is $2"
}
test(){
echo "fisrt varible is $1"
}
config_load wireless
echo "now do the last job"
config_get foo wifi0 type

echo "$foo"
echo "$CONFIG_SECTION"
config_get wifi0 channel
config_set wifi0 hwmode 11b
config_foreach test wifi-iface

#file is over

file: /etc/config/wireless

config wifi-device wifi0
option type atheros
option channel auto
option hwmode 11g
# REMOVE THIS LINE TO ENABLE WIFI:
#option disabled 1

config wifi-iface
option device wifi0
option network lan
option mode adhoc
option ssid OpenWrt
option encryption none
config wifi-device wifi1
option type atheros
option channel auto

# REMOVE THIS LINE TO ENABLE WIFI:
#option disabled 1

config wifi-iface
option device wifi1
option network lan
option mode adhoc
option ssid OpenWrt
option encryption none

#file is over

执行结果如下:

my type is wifi-device, my name is wifi0
option is type and option name is atheros
option is channel and option name is auto
option is hwmode and option name is 11g
my type is wifi-iface, my name is cfg03c84e
option is device and option name is wifi0
option is network and option name is lan
option is mode and option name is adhoc
option is ssid and option name is OpenWrt
option is encryption and option name is none
my type is wifi-device, my name is wifi1
option is type and option name is atheros
option is channel and option name is auto
my type is wifi-iface, my name is cfg0695cf
option is device and option name is wifi1
option is network and option name is lan
option is mode and option name is adhoc
option is ssid and option name is OpenWrt
option is encryption and option name is none
now do the last job
atheros
cfg0695cf
auto
option is hwmode and option name is 11b
fisrt varible is cfg03c84e
fisrt varible is cfg0695cf

打不动字了 分析以上结果就可以清晰地看到每个函数在什么时候被调用,参数情况和函数都做了些什么事,完了,撒花。

openwrt advanced configuration的更多相关文章

  1. Advanced Configuration Tricks

    Advanced Configuration Tricks Configuration of zend-mvc applications happens in several steps: Initi ...

  2. Google Analytics Advanced Configuration - Google Analytics 高级配置

    该文档提供了Android SDK v3的部分元素的高级配置说明. Overview - 概述 Android Google Analytics SDK提供了Tracker类,应用可以用它给Googl ...

  3. 搭建OpenWrt开发环境(包括编译过程)

    OpenWrt是一个高度模块化.高度自动化的嵌入式linux发行版,其编译和安装过程比普通的linux发行版而言,要简单太多了.如果您是新手,您那恐惧的心大可放到肚子里,呵呵.对于新手来说最麻烦的恐怕 ...

  4. ./scripts/feeds update -a OpenWrt大招系列

    ./scripts/feeds update -a Updating feed 'packages' from 'https://github.com/openwrt/packages.git' .. ...

  5. CentOS6 上OpenWRT交叉编译

    目的不是为了编译固件,而是为了一个是编译可执行文件,放倒op的路由器上跑,另一个目的是安装一些开源软件折腾下(例如ss-lib),需要打包成 .ipk 格式 路由设备信息 erya@ERYA:~$ c ...

  6. openwrt undefined reference to ‘getpwent_r’

    由于须要安装 su sudo useradd groupadd chown login 等用户管理命令,会訪问passwd文件. 用到了 getpwant_r 函数.详细是哪个命令引起的,临时不知. ...

  7. 使用外部 toolchain 编译 openwrt

    默认编译 openwrt 时会先编译一套 toolchain. 这个步骤耗时较长. 使用外部 toolchain 可以多个 project 共用一套 toolchain , 而且也不重再编译它了. 省 ...

  8. Nginx - Configuration File Syntax

    Configuration Directives The Nginx configuration file can be described as a list of directives organ ...

  9. Openwrt 远程调试

    此文已由作者吴志勐授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文以自己的程序WFD为例: 1,为路由器固件刷上gdbserver 在宿主端,使用make menucon ...

随机推荐

  1. 使用Sass和Compass组合写CSS

    最近开始在尝试开始使用Sass来写CSS代码,刚开始虽然还是不太习惯用链式的方式写css,不过这是暂时的阶段. 如果你还不了解Sass,可以看之前发表过的文章来了解详情,Sass主要有下面这几种特性( ...

  2. [cocos2d] 调用动画方法

    利用texture atlases生成动画 中讲到如何添加动画,如果想要调用已添加的动画怎么办? 在1.0.1版本以前的cocos2d添加动画的方法为: CCAnimation *anim = [CC ...

  3. 实现对properties文件的有序读写

    最近遇到一项需求,要求把properties文件中的内容读取出来供用户修改,修改完后需要再重新保存到properties文件中.很简单的需求吧,可问题是Properties是继承自HashTable的 ...

  4. LINUX系统中动态链接库的创建与使用

    大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部 ...

  5. 学习嵌入式Linux有没有一个最佳的顺序(持续更新)

    作为一个嵌入式Linux的初学者,我知道我可能将长期处于初学者阶段,因为我至今仍然没有能够摸索出一条很好的道路让我由初学者进入到更高级阶段.但是我始终没有放弃,本篇文章就是用来记录我学习嵌入式Linu ...

  6. 265行JavaScript代码的第一人称3D H5游戏Demo【个人总结1】

    本文目的是分解前面的代码.其实,它得逻辑很清楚,只是对于我这种只是用过 Canvas 画线(用过 Fabric.js Canvas库)的人来说,这个还是很复杂的.我研究这个背景天空也是搞了一天,下面就 ...

  7. TCP Connection Establishment and Termination

    Three-Way Handshake The following scenario occurs when a TCP connection is established: The server m ...

  8. LaTeX手动安装宏包(package)以及生成帮助文档的整套流程

    注意:版权所有,转载请注明出处. 我使用的是ctex套装,本来已经自带了许多package,但是有时候还是需要使用一些没有预装的宏包,这时就需要自己安装package了.下载package可以从CTA ...

  9. 青云QingCloud业内率先支持云端全面透明代理功能 | SDNLAB | 专注网络创新技术

    青云QingCloud业内率先支持云端全面透明代理功能 | SDNLAB | 专注网络创新技术 青云QingCloud业内率先支持云端全面透明代理功能

  10. 最详细的JavaScript和事件解读

    与浏览器进行交互的时候浏览器就会触发各种事件.比如当我们打开某一个网页的时候,浏览器加载完成了这个网页,就会触发一个 load 事件:当我们点击页面中的某一个“地方”,浏览器就会在那个“地方”触发一个 ...