这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 开源硬件 » 【麦克丢了】UCI教程

共3条 1/1 1 跳转至

【麦克丢了】UCI教程

菜鸟
2015-02-05 19:41:30     打赏
UCI教程  【原文作者:吴彦】

一、UCI系统介绍

UCI是统一接口配置(Unified Configuration Interface )的简称,它被应用于OpenWrt系统上面。

UCI是简单、实用的,是OpenWrt上面主要配置用户的接口,用来作为主要的系统设置,这些设置通常对设备是至关重要的,例如网络接口、无线设置、远程登陆权限设置等都是通过UCI来实现配置的。由此可见,UCI是构建一整套系统的必须部分。

此外,大部分第三方软件也被集成到UCI中,因此,在OpenWrt中,这些第三方软件通过UCI简单方便地进行配置。许多程序有它们自己的配置文件,像/etc/network/interfaces/etc/exports/etc/dnsmasq.conf /etc/samba/smb.conf,并且它们拥有自己的语法,OpenWrt不需要改变它们,只需要通过修改UCI配置文件即可以完成软件配置。这些软件配置主要应用于系统初始化脚本,他们在/etc/ini.d下面,启动被UCI系统集成的进程就会调用UCI配置文件。例如运行/etc/init.d/samba start就会调用/etc/config/samba配置文件。

尽管OpenWrt开发者已经对许多软件做了UCI集成,但因为他们的精力也是有限的,因此并不是所有软件都集成到UCI中。

二、UCI系统规则

OpenWrt系统中,UCI配置文件位于/etc/config目录下,该目录下每一个配置文件对应系统中一种配置。你可以通过文本编辑器修改配置文件,或者使用uci命令修改。除了上面两种修改方式之外,还可以通过调用API接口进行修改(例如shelllua等)或者web接口(例如luciwebif)进行修改。

值得注意的是,当配置文件被修改之后,必须重启程序才能生效。

下面举一个通过文本编辑器修改ip地址的例子,如果你想把默认的IP地址192.168.1.1改为192.168.2.1,其操作步骤如下所述:

1、使用vi编辑配置文件;

2、在/etc/config/network中找到option ipaddr 192.168.1.1,并将这里修改为option ipaddr 192.168.2.1

3、执行/etc/init.d/network restart命令重启网络;

4、通过ifconfig命令查看IP地址,此时你会发现系统的IP地址已经变为192.168.2.1

三、UCI配置文件语法

UCI配置文件通常由一个或者更多的config语句组成,一个config语句中包括一个或者更多的option语句来表示配置内容。

下面以一个UCI配置文件对UCI配置文件的语法进行说明:

package 'example'

    config 'example' 'test'

        option   'string'      'some value'

        option   'boolean'     '1'

        list     'collection'  'first item'

        list     'collection'  'second item'

config 'example' 'test'这条语句是一个config语句的开始,表示类型是exampletest代表名字,其中类型是必不可少的,而且不同的config语句不能有相同的类型,这对启动脚本有非常重要的意义,但是名字并不是必须的,可以没有,也可以有。

option 'string' 'some value'   option 'boolean' '1'定义了值的内容,这里stringboolean在语法上面没有差异。因为在boolean0nooffdisablefalse都代表0 1yesontrueenable都代表1

list语句可以定义多个值,它们拥有相同的名字,在这里为collection

其中optionlist对配置文件是非常重要的,每个字段都是用option或者list来表示,option代表字段值唯一(后面叫option字段),list代表字段有多个值(后面叫list字段)。在配置文件中需要赋值时通过optionlist字段表示。

另外,字段值通常不需要用引号括起来,只有在字段值中含有空格或者TAB建的时候才需要用引号。而且值得注意的是,单引号和双引号要一一对应,合法的语言如下所示:

option example value

option 'example' value

option example "value"

option "example" 'value'

option 'example' "value"

四、UCI命令

由于使用vilua等工具修改UCI配置文件不仅麻烦而且容易出错。因此,OpenWrt提供了通过UCI命令修改UCI配置文件。通过UCI命令可以获取值、设置值等功能。在终端下面运行UCI命令便可以查看该命令的帮助说明,如下所示:

Usage: UCI [][]

Commands:

        batch

        export     []

        import     []

        changes    []

        commit    []

        add       

        add_list    ..=

        show      [[.[.]]]

        get       .[.]

        set       .[.]=

        delete    [.

        rename   .[.]=

        revert    [.[.]]

        reorder   .=

Options:

        -c  set the search path for config files (default: /etc/config)

        -d   set the delimiter for list values in UCI show

        -f  useas input instead of stdin

        -a         apply new configuration after commit

        -L         do not load any plugins

        -m         when importing, merge data into an existing package

        -n         name unnamed sections on export (default)

        -N         don't name unnamed sections

        -p  add a search path for config change files

        -P  add a search path for config change files and use as default

        -q         quiet mode (don't print error messages)

        -s         force strict mode (stop on parser errors, default)

        -S         disable strict mode

        -X         do not use extended syntax on 'show'

如表1所示,详细介绍各命令的主要使用方法:

1 UCI命令

名字

Config字段

描述

commit

[]

把所改变的UCI配置写入文件系统中,包括所有的"UCI set""UCI add" "UCI rename" "UCI delete"都是通过UCI commit写入flash中。

batch

-

执行UCI脚本

export

[]

导出一个配置,供使用人员阅读。

import

[]

输入一个UCI语句。

changes

[]

显示在没有运行UCI commit之前所有配置文件的改变记录。

add

增加一个config

get

.[.]

得到option字段值

set

.[.]=

设置option字段值

delete

[.

删除一个option或者list字段

add_list

..=

增加一个存在的list字段链表。

rename

.[.]=

option字段重命名。

下面举例说明常用的UCI命令:

u  获取一个值:例如获取lan口的IP地址

root@OpenWrt:/# UCI get network.lan.ipaddr

192.168.1.1

u  设置一个值:例如设置lan口的IP地址为192.168.2.1

root@OpenWrt:/# UCI set network.lan.ipaddr=192.168.2.1

root@OpenWrt:/# UCI commit

root@OpenWrt:/# /etc/config/network restart

注:运行UCI commit使其生效;运行/etc/config/network restart重启network

u  运行ifconfig命令,查看IP地址修改结果:

root@OpenWrt:/# ifconfig

br-lan    Link encap:Ethernet  HWaddr 00:11:22:33:44:55 

inet addr:192.168.2.1  Bcast:192.168.2.255                          Mask:255.255.255.0

          inet6 addr: fd18:75c3:2be6::1/60 Scope:Global

          inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:16 errors:0 dropped:0 overruns:0 frame:0

          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:4904 (4.7 KiB)  TX bytes:976 (976.0 B)

通过ifconfig命令可以看到IP地址已经修改为192.168.2.1

OpenWrt界面采用luci,它很好的应用了UCI系统。因此,学好UCI系统对学习luci有很好的帮助,所以大家需要好好学习这个章节。


院士
2015-02-06 09:06:21     打赏
2楼

菜鸟
2015-04-16 17:23:44     打赏
3楼
~\(≧▽≦)/~

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]