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. java or spring +jython +python (Error:python.home,Determine if the following attributes are correct:)

    最近更新 :16年3月10日更 首先你在用JAVA,你需要运行Python,于是你找了Jython,我不介绍什么是Jythyon了 如何在Java中调用Python的方法,一百度一大堆, 如下:是一种 ...

  2. ibatis动态的传入表名、字段名

    ibatis动态的传入表名.字段名,主要传入表名和字段名的不一致. Java代码: Map<String,Object> params = new HashMap<String,Ob ...

  3. 大整数相乘的C实现

    //之前有个测试这个题没做完,现在把它做完,通过这个程序可以对乘法了解更深刻.分析:运用整数乘法,当然进制越高越好,考虑到乘法不要越界,故考虑进制底数N应该满 //足,N^2<2^32次方.所以 ...

  4. 如何测试 Android 中的定时事件

    测试定时事件不太容易,比如要测试 AlarmManager 中定时明天4点的一个事件,你总不能等到明天4点再看看吧. Roman Nurik 提供了两个用来测试定时事件的命令:adb shell du ...

  5. System.in.read()

     用读取键盘输入必须构建       1.输入流   System.in;       2.字符输入流   InputStreamReader       3.缓存输入流   BufferedRead ...

  6. 14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构

    14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构 一个InnoDB 表的物理行结构取决于在创建表指定的行格式 默认, Inno ...

  7. 14.6.3.5 Configuring InnoDB Buffer Pool Flushing

    14.6.3.5 Configuring InnoDB Buffer Pool Flushing InnoDB 执行某些任务在后台, 包括脏叶的刷新(那些已经发生改变的pages 但是没有写入到数据文 ...

  8. Qt新建项目No valid kits found解决思路

    Qt新建项目No valid kits found解决思路 第一次用Qt Creator创建Project时,进入Kit Selection窗口后,会提示No Valid kits found. Pl ...

  9. Google Map API 学习四

  10. Ubuntu系统下为IDEA创建启动图标

    默认情况下,ubuntu将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,需要在该目录下创建一个名为“idea.desktop”的文件. ...