1 UCI系统介绍
UCI即统一接口配置(UnifiedConfigurationInterface)的简称,它被应用于OpenWrt系统上面。
UCI是简单、实用、直接了当的。UCI是OpenWrt上面主要的配置用户接口,用来作为主要的系统设置,这些设置通常对设备是至关重要的,例如网络接口、无线设置、远程登陆权限设置等都是通过UCI来实现配置的。他是构建一整套系统的必须部分。
此外,大部分第三方软件也被集成到UCI中,因此他们在openwrt中也能很简单的配置。许多程序有他们自己的配置文件,像/etc/network/interfaces、/etc/exports、/etc/dnsmasq.conf、/etc/samba/smb.conf,并且他们有他们自己的语法,opewnrt不需要改变他们,只需要改UCI设置就行,opewnrt开发者已经对许多软件做了UCI集成,当然openwrt开发者不可能把所有软件都集成进来。因为他们的精力也是有限的。
大部分被集成到UCI系统中的软件通过修改UCI配置文件,都能很简单的被配置,这些配置主要应用于系统初始化脚本,他们在/etc/ini.d下面,开启被UCI系统集成的进程就需要用UCI配置文件。比如运行/etc/init.d/sambastart就会用到/etc/config/samba配置文件。
2 UCI系统规则
Openwrt中UCI配置文件被放在/etc/config目录下面,每一个配置文件设计到系统的一种配置。你可以用文本编辑器修改这个配置文件,或者用uci命令修改。当然它也可以用其他API接口来修改,比如shell、lua等,而且web接口像luci、webif也可以改变它。当配置文件被改变后,必须重启程序才能生效。
下面举一个修改ip地址的例子,如果你想把默认的ip:192.168.1.1改为192.168.2.1,可以通过vi来编辑配置文件。
$vi /etc/config/network
在/etc/config/network中找到:
option ipaddr192.168.1.1
把他改变为
option ipaddr192.168.2.1
然后重启网络/etc/init.d/networkrestart就会发现系统的ip已经变为新ip地址了。
3 UCI文件语法
UCI配置文件通常一个或者更多的config语句,一个config语句中包括一个或者更多的option语句来表示配置内容。下面一个UCI配置文件的内容:
package'example'
config'example''test'
option'string''somevalue'
option'boolean''1'
list'collection''firstitem'
list'collection''seconditem'
config'example''test'这条语句是一个config语句的开始,表示类型是example,test代表名字,其中类型是必不可少的,而且不同的config语句不能有相同的类型,它对启动脚本有非常重要的意义,但是名字不是必不可少的,可以没有,也可以有。
option'string''somevalue'和option'boolean''1'定义了值的内容,这里string和boolean在语法上面没有差异。在boolean中‘0’,‘no’,‘off’,‘disable’,‘false’都代表0,而‘1’,‘yes’、‘on’、‘true’,‘enable’都代表1。
用list语句可以定义多个值,他们都有相同的名字,在这里为collection。
其中option和list对配置文件是非常重要的,每个字段都是用option或者list来表示,option代表字段值唯一(后面叫option字段),list代表字段有多个值(后面叫list字段),他们是配置文件赋值的重要表示。但是在一个配置文件中,它们不是必须的语法。通常值不需要用引号括起来,只有有空格或者TAB建的时候才需要用引号。而且单引号和双引号要一一对应,下面表示合法的语言:
optionexamplevalue
option'example'value
optionexample"value"
option"example"'value'
option'example'"value"
4 UCI命令
用vi、脚本、lua等工具修改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 setthesearchpathforconfigfiles(default:/etc/config)
-d setthedelimiterforlistvaluesinucishow
-f useasinputinsteadofstdin
-a applynewconfigurationaftercommit
-L donotloadanyplugins
-m whenimporting,mergedataintoanexistingpackage
-n nameunnamedsectionsonexport(default)
-N don'tnameunnamedsections
-p addasearchpathforconfigchangefiles
-P addasearchpathforconfigchangefilesanduseasdefault
-q quietmode(don'tprinterrormessages)
-s forcestrictmode(stoponparsererrors,default)
-S disablestrictmode
-X donotuseextendedsyntaxon'show'
下面的表格详细的介绍了他们的主要用法:
名字 | Config****字段 | 描述 |
---|---|---|
commit | [] | 把改变的uci配置的改变写入文件系统中,所有的"uciset","uciadd","ucirename"和"ucidelete"都是通过ucicommit写入flash中。 |
batch | - | 执行uci脚本 |
export | [] | 导出一个配置,供使用人员阅读 |
import | [] | 输入一个uci语句 |
changes | [] | 显示在没有运行ucicommit之前的所有配置文件改变记录 |
add | 增加一个config | |
get | .[.] | 得到option字段值 |
set | .[.]= | 设置option字段值 |
delete | [.]] | 删除一个option或者list字段 |
add | _list..= | 增加一个存在的list字段链表 |
rename | .[.]= | 给option字段重命名 |
show | [[.[.]]] | 展示一个配置的具体内容 |
下面我们举例说明常用的一些用法。
获取一个值:
获取lan口的ip地址:ucigetnetwork.lan.ipaddr
#ucigetnetwork.lan.ipaddr192.168.1.1
设置一个值:
设置lan口的ip地址为192.168.2.1
#ucisetnetwork.lan.ipaddr=192.168.2.1
完成之后需要要使其生效,运行ucicommit
#ucisetnetwork.lan.ipaddr=192.168.2.1
#ucicommit
设置好之后重启network,/etc/config/networkrestart,我们发现网口ip已经被改变了。
运行ifconfig。
#ifconfig
br-lanLinkencap:EthernetHWaddr00:11:22:33:44:55
inetaddr:192.168.2.1Bcast:192.168.2.255
Mask:255.255.255.0
inet6addr:fd18:75c3:2be6::1/60Scope:Global
inet6addr:fe80::211:22ff:fe33:4455/64Scope:Link
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
RXpackets:16errors:0dropped:0overruns:0frame:0
TXpackets:8errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:0
RXbytes:4904(4.7KiB)TXbytes:976(976.0B)
已经变为192.168.2.1了。
导出显示一个选项的配置,现在我们导出uhttp的配置,效果如下所示:
#uciexportuhttpd
packageuhttpd
configuhttpd'main'
listlisten_http'0.0.0.0:80'
listlisten_http'[::]:80'
listlisten_https'0.0.0.0:443'
listlisten_https'[::]:443'
optionhome'/www'
optionrfc1918_filter'1'
optionmax_requests'3'
optionmax_connections'100'
optioncert'/etc/uhttpd.crt'
optionkey'/etc/uhttpd.key'
optioncgi_prefix'/cgi-bin'
optionscript_timeout'60'
optionnetwork_timeout'30'
optionhttp_keepalive'20'
optiontcp_keepalive'1'
optionubus_prefix'/ubus'
configcert'px5g'
optiondays'730'
optionbits'1024'
optioncountry'DE'
optionstate'Berlin'
optionlocation'Berlin'
optioncommonname'OpenWrt'
用show可以展示uhttp的具体内容,和export不同的是,export时导出配置文件的内容,show时显示uhttp配置的值。效果如下:
#ucishowuhttpd
uhttpd.main=uhttpd
uhttpd.main.listen_http=0.0.0.0:80[::]:80
uhttpd.main.listen_https=0.0.0.0:443[::]:443
uhttpd.main.home=/www
uhttpd.main.rfc1918_filter=1
uhttpd.main.max_requests=3
uhttpd.main.max_connections=100
uhttpd.main.cert=/etc/uhttpd.crt
uhttpd.main.key=/etc/uhttpd.key
uhttpd.main.cgi_prefix=/cgi-bin
uhttpd.main.script_timeout=60
uhttpd.main.network_timeout=30
uhttpd.main.http_keepalive=20
uhttpd.main.tcp_keepalive=1
uhttpd.main.ubus_prefix=/ubus
uhttpd.px5g=cert
uhttpd.px5g.days=730
uhttpd.px5g.bits=1024
uhttpd.px5g.country=DE
uhttpd.px5g.state=Berlin
uhttpd.px5g.location=Berlin
uhttpd.px5g.commonname=OpenWrt
前面大部分是option字段的内容,现在说一下怎么增加list字段。首先看一下system的配置内容,他的ntp服务器就是list字段。用export我们先看一下:
#uciexportsystem
packagesystem
configsystem
optionhostname'OpenWrt'
optiontimezone'UTC'
configtimeserver'ntp'
listserver'0.openwrt.pool.ntp.org'
listserver'1.openwrt.pool.ntp.org'
listserver'2.openwrt.pool.ntp.org'
listserver'3.openwrt.pool.ntp.org'
optionenabled'1'
optionenable_server'0'
看到server就是list字段,从表格可以看到,add_list可以增加list字段。uciadd_listsystem.ntp.server='4.de.pool.ntp.org'这个命令可以增加4.de.pool.ntp.org进入list字段。增加完之后可以看一下,如下所示:
#uciexportsystem
packagesystem
configsystem
optionhostname'OpenWrt'
optiontimezone'UTC'
configtimeserver'ntp'
listserver'0.openwrt.pool.ntp.org'
listserver'1.openwrt.pool.ntp.org'
listserver'2.openwrt.pool.ntp.org'
listserver'3.openwrt.pool.ntp.org'
listserver'4.de.pool.ntp.org'
optionenabled'1'
optionenable_server'0'
如果增加一个新的配置,只需要按照UCI系统的语法,增加一个配置文件就可以,或者用uci add命令。下面列出用uci命令增加一个新配置的用法:
#touch/etc/config/playapp
新建一个配置文件
#ucishowplayapp
显示配置内容,可以看到无内容
#uciaddplayappblah
增加一个配置项
#ucishowplayapp
显示配置内容
playapp.@blah[0]=blah
root@OpenWrt:/#ucicommit&&cat/etc/config/playapp
configblah
显示文件内容,可以看到用uci命令设置进去了。其他的命令大家可以都自己试一试,这里就不一一列举了。Opewnrt界面采用luci,他很好的应用了uci系统,学好uci系统对学习luci有很好的帮助,所以大家需要好好学习这个章节。
审核编辑:汤梓红
-
接口
+关注
关注
33文章
8770浏览量
152348 -
无线
+关注
关注
31文章
5487浏览量
174256 -
命令
+关注
关注
5文章
705浏览量
22217 -
编辑器
+关注
关注
1文章
808浏览量
31394 -
OpenWrt
+关注
关注
10文章
131浏览量
39727
发布评论请先 登录
相关推荐
Openwrt开发指南 第1章 OpenWrt入门
Openwrt开发指南 第2章 OpenWrt开发环境搭建
Openwrt开发指南 第3章 OpenWrt下载及配置
Openwrt开发指南 第7章 添加Web界面
Openwrt开发指南 第12章 添加OpenWrt软件包
Openwrt开发指南 第13章 OpenWrt启动流程
Openwrt开发指南 第22章 Openwrt串口的使用2
Openwrt开发指南 第29章 OpenWrt 防火墙介绍

AVR单片机应用开发指南及实例
《嵌入式-STM32开发指南》第二部分 基础篇 - 第4章 定时器(HAL库)

评论