爱板网论坛

查看: 254|回复: 1

[讨论] 跟我学openwrt6-重建巴别塔的UCI之UCI配置文件

[复制链接]

40

主题

3

好友

4056

积分

QQ游客

  • TA的每日心情
    开心
    2014-1-27 10:34
  • 签到天数: 67 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2017-7-13 13:29:06 |显示全部楼层
    我们知道,其实OpenWrt是由很多开源项目组成的操作系统。而这些开源项目所使用的配置文件语法又各不相同,例如samba、dhcp,dnsmasq,等等等等。而为了方便管理,OpenWrt创造了UCI,全称是Unified Configuration Interface,统一配置接口。它通过init脚步、uci配置文件将这些不同的语法统一成uci语法。首先要注意到三个目录:


    • /etc/config/:存放uci配置文件,每个文件对应系统一个部分,当我们通过luci修改系统设置时,其实修改的就是这些文件;
    • /etc/init.d/:存放init脚步,有一个非常重要的任务是读取上面的uci配置文件,生成对应daemon进程的配置文件,启动daemon进程;
    • /etc/rc.d/:存放符号链接,链向被使能(enable)的init脚步,这些符号链接的命名是S+2位数字+init脚步名。记得我们在分析开机流程 的时候看到的,S开头表示在开机时运行,2位数字表示运行顺序
         我们先来讲uci配置文件好了。

    UCI配置文件语法         如上所述,UCI配置文件放在/etc/config目录下。每一个文件都是一个config,这个是uci里的术语。
           以/etc/config/system为例:
    1. config system
    2.         option hostname 'OpenWrt'
    3.         option timezone 'UTC'

    4. config timeserver 'ntp'
    5.         list server '0.openwrt.pool.ntp.org'
    6.         list server '1.openwrt.pool.ntp.org'
    7.         list server '2.openwrt.pool.ntp.org'
    8.         list server '3.openwrt.pool.ntp.org'
    9.         option enabled '1'
    10.         option enable_server '0'

    11. config led 'led_power'
    12.         option name 'power'
    13.         option sysfs 'xiaomi:red:status'
    14.         option default '1
    复制代码
    config文件里面是一个个的section,分别以config关键字开头。例如上面的system就分成了3个section。
            每个section都由config关键字开头,后跟两个参数,对应section有两个属性,一个是type,一个是name。type的必须设置的,name可以省略。例如“config timeserver 'ntp'”表示type为timeserver,name为ntp。而“config system”则只设置了type为system,省略了name。
            section由option或者list组成。首先要注意到,uci并没有数据类型之说,数字、字符串、布尔值都是用字符串来表示,由uci上层自行分析。option 关键字后跟名字跟值(value)。list也一样,多个list可能享有同一个名字,表示大家都是list的element之一。如果值(value)中含有空格,则需要用双引号("")或者单引号('')括起来。

    命令行工具uci         UCI提供了多种语言的api,包括lua,c语言,还提供了一个名为uci的命令行工具。
            注意,使用uci修改配置之后,需要用uci commit + 配置名将修改实际写到 flash中。
            使用uci工具时,指定section有两种方式,一是指定section的名字,也就是confg关键字的第二个 参数。另一个是指定 type,type的写法比较麻烦,是@Type[index],因为一个type可能有多个section,所以要用下标来指定。例如查询system配置中的ntp:
    1. uci show system.ntp #query by name
    2. uci show system.@timeserver[0]  #query by type
    复制代码
    回复

    使用道具 举报

    55

    主题

    2

    好友

    1575

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    无聊
    2017-3-23 12:01
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-7-13 14:57:55 |显示全部楼层
    好资料 感谢分析
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /2 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-11-25 19:08 , Processed in 0.294463 second(s), 10 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部