0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Openwrt开发指南 第14章 统一接口配置UCI

嵌入式大杂烩 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2023-06-29 09:11 次阅读

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

    文章

    8485

    浏览量

    150802
  • 无线
    +关注

    关注

    31

    文章

    5427

    浏览量

    173049
  • 命令
    +关注

    关注

    5

    文章

    678

    浏览量

    21981
  • 编辑器
    +关注

    关注

    1

    文章

    800

    浏览量

    31108
  • OpenWrt
    +关注

    关注

    10

    文章

    127

    浏览量

    39261
收藏 人收藏

    评论

    相关推荐

    Openwrt开发指南 25 配置OpenWrt支持网络摄像头

    Openwrt开发指南 25 配置OpenWrt支持网络摄像头
    的头像 发表于 07-13 08:56 2301次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>25<b class='flag-5'>章</b> <b class='flag-5'>配置</b><b class='flag-5'>OpenWrt</b>支持网络摄像头

    Openwrt开发指南 1 OpenWrt入门

    如果要学习openwrt的话,买些列表中二手的路由器来实践下更容易学习,大部分要升级下rom芯片和内存芯片,典型配置都是4M、64M。
    的头像 发表于 06-27 09:09 4216次阅读

    Openwrt开发指南 2 OpenWrt开发环境搭建

    开发PC机上的软件时,可以直接在PC机上编辑、编译、调试软件,最终发布的软件也是在PC机上运行。对于物联网OpenWrt开发,最初的嵌入式设备是个空白的系统,需要通过主机为它构建基本
    的头像 发表于 06-27 09:09 6907次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>2<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b><b class='flag-5'>开发</b>环境搭建

    Openwrt开发指南 3 OpenWrt下载及配置

    编译OpenWrt首先需要下载源码,OpenWrt的源码是通过git下载,OpenWrt目前已经很好的支持了MT7620、MT7821等芯片,因此OpenWrt系统完全可以用于MT76
    的头像 发表于 06-27 09:10 5545次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>3<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b>下载及<b class='flag-5'>配置</b>

    Openwrt开发指南 7 添加Web界面

    LUA语言的官方版本只包括个精简的核心和最基本的库。这使得LUA体积小、启动速度快,从而适合嵌入在别的程序里。UCIOpenWrt中为实现所有系统配置
    的头像 发表于 06-29 09:04 3659次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>7<b class='flag-5'>章</b> 添加Web界面

    Openwrt开发指南 12 添加OpenWrt软件包

    OpenWrt个比较完善的嵌入式Linux开发平台,在无线路由器应用上已有4000多个软件包。我们可以在其基础上增加软件包,以扩大其应用范围。在OpenWrt中增加软件包极其方便,
    的头像 发表于 06-29 09:09 8646次阅读

    Openwrt开发指南 13 OpenWrt启动流程

    任何系统的启动都是开发人员首要关注的问题,因为只有了解了系统的启动流程和启动机制,才能真正掌握个系统,如果对启动的启动不熟悉的话,是不可能真正用好个系统,openwrt系统也不例外
    的头像 发表于 06-29 09:09 3412次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>13<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b>启动流程

    Openwrt开发指南 22 Openwrt串口的使用2

    在上一章中,我们成功的让驱动程序支持了串口 2,并且做了简单的测试。接下来,我们就为串口 2 添加个应用程序,从而实现 Wi-Fi 串口。实现过程非常简单,首先进入 OpenWrt 系统源码,然后运行 make menucon
    的头像 发表于 07-05 09:09 3960次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>22<b class='flag-5'>章</b> <b class='flag-5'>Openwrt</b>串口的使用2

    Openwrt开发指南 24 配置开发板支持U盘

    Openwrt开发指南 24 配置开发板支持U盘
    的头像 发表于 07-13 08:55 2949次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>24<b class='flag-5'>章</b> <b class='flag-5'>配置</b><b class='flag-5'>开发</b>板支持U盘

    Openwrt开发指南 29 OpenWrt 防火墙介绍

    Openwrt个 GNU/Linux 的发行版, 和其他大多数的发行版样,Openwrt 的防火墙同样也是基于 iptables。 在 Op
    的头像 发表于 07-15 16:24 3454次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>29<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b> 防火墙介绍

    CPLD/FPGA高级应用开发指南 光盘

    `CPLD/FPGA高级应用开发指南1可编程逻辑器件与EDA技术2Xilinx CPLD系列产品第3
    发表于 06-02 10:13

    AVR单片机应用开发指南及实例

    图书简介及目录:《AVR单片机应用开发指南及实例精解》结构清晰,由浅入深,通俗易懂,结合ATmega128单片机阐述AVR单片机的理论和工程应用。《AVR单片机应用开发指南及实例精解》共分9,主要
    发表于 07-28 10:28

    openwrt开发教程1~6

    openwrt开发教程1~6
    发表于 03-17 14:23 53次下载

    《嵌入式-STM32开发指南》第二部分 基础篇 - 4 定时器(HAL库)

    《嵌入式-STM32开发指南》第二部分 基础篇 - 4 定时器(HAL库)
    发表于 12-05 14:51 15次下载
    《嵌入式-STM32<b class='flag-5'>开发指南</b>》第二部分 基础篇 - <b class='flag-5'>第</b>4<b class='flag-5'>章</b>  定时器(HAL库)

    Tina Linux配置开发指南

    Tina Linux配置开发指南
    的头像 发表于 03-02 15:28 1.6w次阅读
    Tina Linux<b class='flag-5'>配置</b><b class='flag-5'>开发指南</b>