UCI(Unified Configuration Interface)统一配置接口
OpenWrt的应用软件多种多样,如何简化配置呢,UCI就是为了解决这个问题的。前面几篇我们也使用过UCI的方法对路由器进行配置。这里展开讲一下基础的东西。
UCI格式书写的配置文件是如何生效的
1、集成在openwrt中的软件包一般在启动时会通过脚本加在对应的配置文件,然后转换成应用可以识别的配置文件。 我们可以看下刷机后的/etc/init.d文件夹

这个是应用在启动时走的启动脚本,我们可以选择一个看一下
都是读取uci配置文件的函数。 那么这个文件在代码中放在哪里呢。 在各自的包里面
我们再对应的模块(这里选择uhttpd)的makefile来作分析。 在安装时会将此文件安装到对应的目录中去。 详细的不做深入,毕竟道行尚浅。

UCI 配置文件是怎么编辑的
第一种方式我们直接在代码里面编辑。 因为我觉得看图比较清晰,所以大部分就作为图片粘贴来看。

在这里我们可以直接修改配置文件。
借用上面的图,我们看到配置文件被安装到/etc/config/文件夹下的uhttpd,我们用ssh去看一下。

是不是对应上了。 其实这里有个差异,就是注释,编译之后的uci,没有注释的,只识别符合UCI格式的配置信息。
讨论完第一种开发者在开发过程中修改配置文件的方案,讨论下在ssh中通过uci 指令进行修改的方法吧。
2、uci指令的命令行用法
1)我们首先在命令行输入uci 来看下参数
root@OpenWrt:/etc/config# uci
Usage: uci [<options>] <command> [<arguments>]
Commands:
batch
export [<config>]
import [<config>]
changes [<config>]
commit [<config>]
add <config> <section-type>
add_list <config>.<section>.<option>=<string>
del_list <config>.<section>.<option>=<string>
show [<config>[.<section>[.<option>]]]
get <config>.<section>[.<option>]
set <config>.<section>[.<option>]=<value>
delete <config>[.<section>[[.<option>][=<id>]]]
rename <config>.<section>[.<option>]=<name>
revert <config>[.<section>[.<option>]]
reorder <config>.<section>=<position>
Options:
-c <path> set the search path for config files (default: /etc/config)
-d <str> set the delimiter for list values in uci show
-f <file> use <file> as input instead of stdin
-m when importing, merge data into an existing package
-n name unnamed sections on export (default)
-N don't name unnamed sections
-p <path> add a search path for config change files
-P <path> add a search path for config change files and use as default
-t <path> set save path for config change files
-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'
简单说一下,option我们用的较少,现在我还没用到过,可以自己尝试看后面的注释使用。 讲下config,config就是配置包名,比如我们上面举例的uhttpd。
下面我们自己新建一个UCI配置文件,来测试一下一些指令,只贴代码和输出。
root@OpenWrt:/etc/config# touch helloworld
root@OpenWrt:/etc/config# ls
dhcp firewall network ubootenv wireless
dropbear helloworld rpcd ucitrack
easycwmp luci system uhttpd
root@OpenWrt:/etc/config# uci add helloworld firstConfigNoName
cfg01a4c1
root@OpenWrt:/etc/config# uci export helloworld
package helloworld
config firstConfigNoName
root@OpenWrt:/etc/config# uci set helloworld.secondHasName=xgy
root@OpenWrt:/etc/config# uci export helloworld
package helloworld
config firstConfigNoName
config xgy 'secondHasName'
root@OpenWrt:/etc/config# uci set helloworld.secondHasName.age=28
root@OpenWrt:/etc/config# uci export helloworld
package helloworld
config firstConfigNoName
config xgy 'secondHasName'
option age '28'
root@OpenWrt:/etc/config# uci add_list helloworld.secondHasName.wifi=liuyifei
root@OpenWrt:/etc/config# uci add_list helloworld.secondHasName.wifi=jy
root@OpenWrt:/etc/config# uci add_list helloworld.secondHasName.wifi=zhangjunni
ng
root@OpenWrt:/etc/config# uci export helloworld
package helloworld
config firstConfigNoName
config xgy 'secondHasName'
option age '28'
list wifi 'liuyifei'
list wifi 'jy'
list wifi 'zhangjunning'
root@OpenWrt:/etc/config# uci del_list helloworld.secondHasName.wifi=zhangjunnin
g
root@OpenWrt:/etc/config# uci export helloworld
package helloworld
config firstConfigNoName
config xgy 'secondHasName'
option age '28'
list wifi 'liuyifei'
list wifi 'jy'
root@OpenWrt:/etc/config# uci changes helloworld
helloworld.cfg01a4c1='firstConfigNoName'
helloworld.secondHasName='xgy'
helloworld.secondHasName.age='28'
helloworld.secondHasName.wifi+='liuyifei'
helloworld.secondHasName.wifi+='jy'
helloworld.secondHasName.wifi+='zhangjunning'
helloworld.secondHasName.wifi-='zhangjunning'
root@OpenWrt:/etc/config# uci commit helloworld
root@OpenWrt:/etc/config# uci changes helloworld
root@OpenWrt:/etc/config#
上面是创建了一个新的配置文件helloword,使用add添加匿名配置节。使用set 增加配置节,选项。 changes 查看修改记录,commit进行提交。
这里补充一下UCI配置的格式,其实经过操作之后,已经可以理解了。
- 配置节(section),是UCI配置的一个独立配置单元。
- UCI配置文件是由一个或多个配置节组成。是以“config”开头,并且有一个可选名称。配置节包含一个或多个配置选项语句。
- 每一个配置节(section)都需要有一个类型标识(type),但不一定需要名称(name)。
- 每一个选项对(option)都有名称(name)和值(value),写在其所属于的配置节中。 UCI标识符和配置文件的名称只能包含字母a~z、0~9 和_。例如连字符(-)是不允许的。 选项的值可以包含任何字符,但需要将它们正确地加上引号。
- 没有名称标识的配置节称为匿名配置节。
——UCI 使用&spm=1001.2101.3001.5002&articleId=120350449&d=1&t=3&u=1c6c291e87974fbb9d370b6cc5971ddb)
9309

被折叠的 条评论
为什么被折叠?



