我们知道,其实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为例:

config system

option hostname 'OpenWrt'

option timezone 'UTC'

config timeserver 'ntp'

list server '0.openwrt.pool.ntp.org'

list server '1.openwrt.pool.ntp.org'

list server '2.openwrt.pool.ntp.org'

list server '3.openwrt.pool.ntp.org'

option enabled '1'

option enable_server '0'

config led 'led_power'

option name 'power'

option sysfs 'xiaomi:red:status'

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:

uci show system.ntp #query by name

uci show system.@timeserver[0] #query by type

参考资料:

openwrt c语言配置文件,OpenWrt学习笔记7 -- 让人类重建巴别塔的UCI之UCI配置文件相关推荐

  1. 《Go语言圣经》学习笔记 第十一章 测试

    <Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...

  2. 语言 提取列名_学习健明老师发布的R语言练习题的学习笔记(二)

    学习者:骆栢维 题目来源:生信基石之R语言 中级10 个题目:http://www.bio-info-trainee.com/3750.html 备注:本文为笔者学习健明老师GitHub答案代码的学习 ...

  3. 《Go语言圣经》学习笔记 第十章 包和工具

    <Go语言圣经>学习笔记 第十章 包和工具 目录 包简介 导入路径 包声明 导入声明 包的匿名导入 包和命名 工具 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. G ...

  4. 《Go语言圣经》学习笔记 第九章 基于共享变量的并发

    <Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...

  5. 《Go语言圣经》学习笔记 第八章 Groroutines和Channels

    <Go语言圣经>学习笔记 第八章 Groroutines和Channels 目录 Goroutines 实例:并发的Clock服务 实例:并发的Echo服务 Channels 并发的循环 ...

  6. 《Go语言圣经》学习笔记 第六章 方法

    <Go语言圣经>学习笔记 第六章 方法 目录 方法声明 基于指针对象的方法 通过嵌入结构体来扩展类型 方法值和方法表达式 示例:Bit数组 封装 注:学习<Go语言圣经>笔记, ...

  7. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  8. 《Go语言圣经》学习笔记 第四章 复合数据类型

    <Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...

  9. 《Go语言圣经》学习笔记 第三章 基础数据类型

    <Go语言圣经>学习笔记 第三章 基础数据类型 目录 整型 浮点数 复数 布尔型 字符串 常量 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记, ...

最新文章

  1. win7 64安装oracle10g 客户端,关于win7 64位 只 安装 oracle 10g的client
  2. grafana监控linux,Grafana –美观、强大的可视化监控指标展示工具 | Linux大学
  3. Docker + gunicron + supervisord 部署python应用
  4. jmeter linux安装,Linux下安装Jmeter
  5. python应用实战案例:python如何实现异步爬虫?
  6. soso街景开发——在移动应用(网站)中的应用
  7. “Linaro”将推动开源软件新一波开发潮
  8. 宁德时代拟再投240亿元扩产宜宾基地
  9. layui 自动渲染_Layui表格自动渲染
  10. 计算机二级c语言题库选择题,计算机二级C语言真题选择题
  11. 【数据库】MS SQL SERVER数据库日志压缩方法
  12. 我赔了10万元,因为PPT中用了这些字体-百格活动
  13. can总线程序讲解_CANOpen系列教程02_理解CAN总线协议
  14. kali linux ap热点,Kali(debian)创建WIFI AP热点
  15. pdf关键字高亮 java_Java PDF查找和高亮文本-Go语言中文社区
  16. AWS韩小勇为创业者详细解读云服务商如何为他们提供服务
  17. 2020-01-04
  18. GameFramework源码学习(一)
  19. 白帽子学习——Metasploit渗透测试指南
  20. Echart - 双柱状图(bar)

热门文章

  1. 【转】嵌入式开发正在日薄西山_有道理哦
  2. DQL:数据库查询语句
  3. 离线状态能不能翻译?手机翻译软件离线小测试,以备不时之需
  4. 本土微电子走向成功策略分析
  5. pve7 安装rhel9.0报错之Fatal glibc error: CPU does not support x86-64-v2处理及Kernel panic - not syncing
  6. 语音合成TTS(Text-To-Speech,从文本到语音)
  7. 程序猿也爱学英语,有图有真相 1
  8. 数据库卸载后安装不成功的问题
  9. sketch使用教程:高效的快捷方式
  10. 旧瓶装新酒系列-Python每日多题(一)