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. 双缓冲技术(Double Buffering)(1、简介和源代码部分)

    这一节实在是有些长,翻译完后统计了一下,快到2w字了.考虑到阅读的方便和网络的速度,打算把这节分为5个部分,第一部分为双缓冲技术的一个 简介和所有的代码,如果能够看懂代码,不用看译文也就可以了.第二部 ...

  2. 演示:纯CSS实现自适应布局表格

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. page-object使用(2)---elements

    elements就是html元素下所有的标签.用page-object你可以找到并定位html页面下绝大多数的元素,这个文章列出了可定位的这些元素,生成的方法,和依据什么关键字来找到这些元素. BUT ...

  4. SPI,UART,I2C都有什么区别,及其各自的特点

    区别: SPI:高速同步串行口.3-4线接口,收发独立.可同步进行 UART:通用异步串行口.按照标准波特率完成双向通讯,速度慢 I2C:一种串行传输方式,三线制,网上可找到其通信协议和用法的 3根线 ...

  5. lightoj1057 - Collecting Gold (tsp问题)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1057 题目大意:在二维矩阵中,给你一个起点和至多15个的目标点.要你求出从起点出发经过 ...

  6. 详解集群内Session高可用的实现原理

    在这个互联网高度发达的时代,许多应用的用户动辄成百上千万,甚至上亿.为了支持海量用户的访问,应用服务器集群这种水平扩展的方式是最常用的.这种情形下,就会涉及到许多单机环境下完全不需要考虑的问题,这其中 ...

  7. 【设计模式 - 15】之解释器模式(Interpreter)

    1      模式简介 解释器模式允许我们自定义一种语言,并定义一个这种语言的解释器,这个解释器用来解释语言中的句子.由于这种模式主要用于编译器的编写,因此在日常应用中不是很常用. 如果一种特定类型的 ...

  8. C#-Mdi多文档窗体及其子窗体的排列 ---ShinePans

    MdiLayout枚举成员及说明 Casecade s全部Mdi层叠在父窗体 TileHorizontal 水平平铺 TitleVertical 垂直平铺 Form1.cs (mdi) using S ...

  9. [CSS] @keyframes

    @keyframes swing{ 0% { transform: rotate(0deg)} 100% {transform: rotate(-30deg)} } #sweetlandia{ ani ...

  10. 10个精妙的Java编码最佳实践

    这是一个比Josh Bloch的Effective Java规则更精妙的10条Java编码实践的列表.和Josh Bloch的列表容易学习并且关注日常情况相比,这个列表将包含涉及API/SPI设计中不 ...