0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Openwrt開發(fā)指南 第14章 統(tǒng)一接口配置UCI

嵌入式大雜燴 ? 來(lái)源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-06-29 09:11 ? 次閱讀

1 UCI系統(tǒng)介紹

UCI即統(tǒng)一接口配置(UnifiedConfigurationInterface)的簡(jiǎn)稱,它被應(yīng)用于OpenWrt系統(tǒng)上面。

UCI是簡(jiǎn)單、實(shí)用、直接了當(dāng)?shù)?。UCI是OpenWrt上面主要的配置用戶接口,用來(lái)作為主要的系統(tǒng)設(shè)置,這些設(shè)置通常對(duì)設(shè)備是至關(guān)重要的,例如網(wǎng)絡(luò)接口、無(wú)線設(shè)置、遠(yuǎn)程登陸權(quán)限設(shè)置等都是通過(guò)UCI來(lái)實(shí)現(xiàn)配置的。他是構(gòu)建一整套系統(tǒng)的必須部分。

此外,大部分第三方軟件也被集成到UCI中,因此他們?cè)趏penwrt中也能很簡(jiǎn)單的配置。許多程序有他們自己的配置文件,像/etc/network/interfaces、/etc/exports、/etc/dnsmasq.conf、/etc/samba/smb.conf,并且他們有他們自己的語(yǔ)法,opewnrt不需要改變他們,只需要改UCI設(shè)置就行,opewnrt開發(fā)者已經(jīng)對(duì)許多軟件做了UCI集成,當(dāng)然openwrt開發(fā)者不可能把所有軟件都集成進(jìn)來(lái)。因?yàn)樗麄兊木σ彩怯邢薜摹?/p>

大部分被集成到UCI系統(tǒng)中的軟件通過(guò)修改UCI配置文件,都能很簡(jiǎn)單的被配置,這些配置主要應(yīng)用于系統(tǒng)初始化腳本,他們?cè)?etc/ini.d下面,開啟被UCI系統(tǒng)集成的進(jìn)程就需要用UCI配置文件。比如運(yùn)行/etc/init.d/sambastart就會(huì)用到/etc/config/samba配置文件。

2 UCI系統(tǒng)規(guī)則

Openwrt中UCI配置文件被放在/etc/config目錄下面,每一個(gè)配置文件設(shè)計(jì)到系統(tǒng)的一種配置。你可以用文本編輯器修改這個(gè)配置文件,或者用uci命令修改。當(dāng)然它也可以用其他API接口來(lái)修改,比如shell、lua等,而且web接口像luci、webif也可以改變它。當(dāng)配置文件被改變后,必須重啟程序才能生效。

下面舉一個(gè)修改ip地址的例子,如果你想把默認(rèn)的ip:192.168.1.1改為192.168.2.1,可以通過(guò)vi來(lái)編輯配置文件。

$vi /etc/config/network

在/etc/config/network中找到:

option ipaddr192.168.1.1

把他改變?yōu)?/p>

option ipaddr192.168.2.1

然后重啟網(wǎng)絡(luò)/etc/init.d/networkrestart就會(huì)發(fā)現(xiàn)系統(tǒng)的ip已經(jīng)變?yōu)樾耰p地址了。

3 UCI文件語(yǔ)法

UCI配置文件通常一個(gè)或者更多的config語(yǔ)句,一個(gè)config語(yǔ)句中包括一個(gè)或者更多的option語(yǔ)句來(lái)表示配置內(nèi)容。下面一個(gè)UCI配置文件的內(nèi)容:

package'example'

config'example''test'

option'string''somevalue'

option'boolean''1'

list'collection''firstitem'

list'collection''seconditem'

config'example''test'這條語(yǔ)句是一個(gè)config語(yǔ)句的開始,表示類型是example,test代表名字,其中類型是必不可少的,而且不同的config語(yǔ)句不能有相同的類型,它對(duì)啟動(dòng)腳本有非常重要的意義,但是名字不是必不可少的,可以沒(méi)有,也可以有。

option'string''somevalue'和option'boolean''1'定義了值的內(nèi)容,這里string和boolean在語(yǔ)法上面沒(méi)有差異。在boolean中‘0’,‘no’,‘off’,‘disable’,‘false’都代表0,而‘1’,‘yes’、‘on’、‘true’,‘enable’都代表1。

用list語(yǔ)句可以定義多個(gè)值,他們都有相同的名字,在這里為collection。

其中option和list對(duì)配置文件是非常重要的,每個(gè)字段都是用option或者list來(lái)表示,option代表字段值唯一(后面叫option字段),list代表字段有多個(gè)值(后面叫l(wèi)ist字段),他們是配置文件賦值的重要表示。但是在一個(gè)配置文件中,它們不是必須的語(yǔ)法。通常值不需要用引號(hào)括起來(lái),只有有空格或者TAB建的時(shí)候才需要用引號(hào)。而且單引號(hào)和雙引號(hào)要一一對(duì)應(yīng),下面表示合法的語(yǔ)言:

optionexamplevalue

option'example'value

optionexample"value"

option"example"'value'

option'example'"value"

4 UCI命令

用vi、腳本、lua等工具修改uci配置文件比較麻煩還容易出錯(cuò),openwrt提供了uci命令工具來(lái)操作uci配置文件。uci工具可以獲取一個(gè)值,設(shè)置一個(gè)值等功能。在終端下面運(yùn)行uci命令可以查看他的幫助說(shuō)明。

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'

下面的表格詳細(xì)的介紹了他們的主要用法:

名字 Config****字段 描述
commit [] 把改變的uci配置的改變寫入文件系統(tǒng)中,所有的"uciset","uciadd","ucirename"和"ucidelete"都是通過(guò)ucicommit寫入flash中。
batch - 執(zhí)行uci腳本
export [] 導(dǎo)出一個(gè)配置,供使用人員閱讀
import [] 輸入一個(gè)uci語(yǔ)句
changes [] 顯示在沒(méi)有運(yùn)行ucicommit之前的所有配置文件改變記錄
add 增加一個(gè)config
get .[.] 得到option字段值
set .[.]= 設(shè)置option字段值
delete [.]] 刪除一個(gè)option或者list字段
add _list..= 增加一個(gè)存在的list字段鏈表
rename .[.]= 給option字段重命名
show [[.[.]]] 展示一個(gè)配置的具體內(nèi)容

下面我們舉例說(shuō)明常用的一些用法。

獲取一個(gè)值:

獲取lan口的ip地址:ucigetnetwork.lan.ipaddr

#ucigetnetwork.lan.ipaddr192.168.1.1

設(shè)置一個(gè)值:

設(shè)置lan口的ip地址為192.168.2.1

#ucisetnetwork.lan.ipaddr=192.168.2.1

完成之后需要要使其生效,運(yùn)行ucicommit

#ucisetnetwork.lan.ipaddr=192.168.2.1

#ucicommit

設(shè)置好之后重啟network,/etc/config/networkrestart,我們發(fā)現(xiàn)網(wǎng)口ip已經(jīng)被改變了。

運(yùn)行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)

已經(jīng)變?yōu)?92.168.2.1了。

導(dǎo)出顯示一個(gè)選項(xiàng)的配置,現(xiàn)在我們導(dǎo)出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的具體內(nèi)容,和export不同的是,export時(shí)導(dǎo)出配置文件的內(nèi)容,show時(shí)顯示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字段的內(nèi)容,現(xiàn)在說(shuō)一下怎么增加list字段。首先看一下system的配置內(nèi)容,他的ntp服務(wù)器就是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'這個(gè)命令可以增加4.de.pool.ntp.org進(jìn)入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'

如果增加一個(gè)新的配置,只需要按照UCI系統(tǒng)的語(yǔ)法,增加一個(gè)配置文件就可以,或者用uci add命令。下面列出用uci命令增加一個(gè)新配置的用法:

#touch/etc/config/playapp

新建一個(gè)配置文件

#ucishowplayapp

顯示配置內(nèi)容,可以看到無(wú)內(nèi)容

#uciaddplayappblah

增加一個(gè)配置項(xiàng)

#ucishowplayapp

顯示配置內(nèi)容

playapp.@blah[0]=blah

root@OpenWrt:/#ucicommit&&cat/etc/config/playapp

configblah

顯示文件內(nèi)容,可以看到用uci命令設(shè)置進(jìn)去了。其他的命令大家可以都自己試一試,這里就不一一列舉了。Opewnrt界面采用luci,他很好的應(yīng)用了uci系統(tǒng),學(xué)好uci系統(tǒng)對(duì)學(xué)習(xí)luci有很好的幫助,所以大家需要好好學(xué)習(xí)這個(gè)章節(jié)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8596

    瀏覽量

    151145
  • 無(wú)線
    +關(guān)注

    關(guān)注

    31

    文章

    5453

    瀏覽量

    173301
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    684

    瀏覽量

    22021
  • 編輯器
    +關(guān)注

    關(guān)注

    1

    文章

    806

    瀏覽量

    31171
  • OpenWrt
    +關(guān)注

    關(guān)注

    10

    文章

    130

    瀏覽量

    39304
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Openwrt開發(fā)指南 25 配置OpenWrt支持網(wǎng)絡(luò)攝像頭

    Openwrt開發(fā)指南 25 配置OpenWrt支持網(wǎng)絡(luò)攝像頭
    的頭像 發(fā)表于 07-13 08:56 ?2424次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>25<b class='flag-5'>章</b> <b class='flag-5'>配置</b><b class='flag-5'>OpenWrt</b>支持網(wǎng)絡(luò)攝像頭

    Openwrt開發(fā)指南 1 OpenWrt入門

    如果要學(xué)習(xí)openwrt的話,買些列表中二手的路由器來(lái)實(shí)踐下更容易學(xué)習(xí),大部分要升級(jí)下rom芯片和內(nèi)存芯片,典型配置都是4M、64M。
    的頭像 發(fā)表于 06-27 09:09 ?4416次閱讀

    Openwrt開發(fā)指南 2 OpenWrt開發(fā)環(huán)境搭建

    開發(fā)PC機(jī)上的軟件時(shí),可以直接在PC機(jī)上編輯、編譯、調(diào)試軟件,最終發(fā)布的軟件也是在PC機(jī)上運(yùn)行。對(duì)于物聯(lián)網(wǎng)OpenWrt開發(fā),最初的嵌入式設(shè)備是個(gè)空白的系統(tǒng),需要通過(guò)主機(jī)為它構(gòu)建基本
    的頭像 發(fā)表于 06-27 09:09 ?7163次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>2<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b><b class='flag-5'>開發(fā)</b>環(huán)境搭建

    Openwrt開發(fā)指南 3 OpenWrt下載及配置

    編譯OpenWrt首先需要下載源碼,OpenWrt的源碼是通過(guò)git下載,OpenWrt目前已經(jīng)很好的支持了MT7620、MT7821等芯片,因此OpenWrt系統(tǒng)完全可以用于MT76
    的頭像 發(fā)表于 06-27 09:10 ?5825次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>3<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b>下載及<b class='flag-5'>配置</b>

    Openwrt開發(fā)指南 7 添加Web界面

    LUA語(yǔ)言的官方版本只包括個(gè)精簡(jiǎn)的核心和最基本的庫(kù)。這使得LUA體積小、啟動(dòng)速度快,從而適合嵌入在別的程序里。UCIOpenWrt中為實(shí)現(xiàn)所有系統(tǒng)配置
    的頭像 發(fā)表于 06-29 09:04 ?3800次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>7<b class='flag-5'>章</b> 添加Web界面

    Openwrt開發(fā)指南 12 添加OpenWrt軟件包

    OpenWrt個(gè)比較完善的嵌入式Linux開發(fā)平臺(tái),在無(wú)線路由器應(yīng)用上已有4000多個(gè)軟件包。我們可以在其基礎(chǔ)上增加軟件包,以擴(kuò)大其應(yīng)用范圍。在OpenWrt中增加軟件包極其方便,
    的頭像 發(fā)表于 06-29 09:09 ?8908次閱讀

    Openwrt開發(fā)指南 13 OpenWrt啟動(dòng)流程

    任何系統(tǒng)的啟動(dòng)都是開發(fā)人員首要關(guān)注的問(wèn)題,因?yàn)橹挥辛私饬讼到y(tǒng)的啟動(dòng)流程和啟動(dòng)機(jī)制,才能真正掌握個(gè)系統(tǒng),如果對(duì)啟動(dòng)的啟動(dòng)不熟悉的話,是不可能真正用好個(gè)系統(tǒng),openwrt系統(tǒng)也不例外
    的頭像 發(fā)表于 06-29 09:09 ?3555次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>13<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b>啟動(dòng)流程

    Openwrt開發(fā)指南 22 Openwrt串口的使用2

    在上一章中,我們成功的讓驅(qū)動(dòng)程序支持了串口 2,并且做了簡(jiǎn)單的測(cè)試。接下來(lái),我們就為串口 2 添加個(gè)應(yīng)用程序,從而實(shí)現(xiàn) Wi-Fi 串口。實(shí)現(xiàn)過(guò)程非常簡(jiǎn)單,首先進(jìn)入 OpenWrt 系統(tǒng)源碼,然后運(yùn)行 make menucon
    的頭像 發(fā)表于 07-05 09:09 ?4110次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>22<b class='flag-5'>章</b> <b class='flag-5'>Openwrt</b>串口的使用2

    Openwrt開發(fā)指南 24 配置開發(fā)板支持U盤

    Openwrt開發(fā)指南 24 配置開發(fā)板支持U盤
    的頭像 發(fā)表于 07-13 08:55 ?3367次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>24<b class='flag-5'>章</b> <b class='flag-5'>配置</b><b class='flag-5'>開發(fā)</b>板支持U盤

    Openwrt開發(fā)指南 29 OpenWrt 防火墻介紹

    Openwrt個(gè) GNU/Linux 的發(fā)行版, 和其他大多數(shù)的發(fā)行版樣,Openwrt 的防火墻同樣也是基于 iptables。 在 Op
    的頭像 發(fā)表于 07-15 16:24 ?3634次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>29<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b> 防火墻介紹

    CPLD/FPGA高級(jí)應(yīng)用開發(fā)指南 光盤

    `CPLD/FPGA高級(jí)應(yīng)用開發(fā)指南1可編程邏輯器件與EDA技術(shù)2Xilinx CPLD系列產(chǎn)品第3
    發(fā)表于 06-02 10:13

    AVR單片機(jī)應(yīng)用開發(fā)指南及實(shí)例

    圖書簡(jiǎn)介及目錄:《AVR單片機(jī)應(yīng)用開發(fā)指南及實(shí)例精解》結(jié)構(gòu)清晰,由淺入深,通俗易懂,結(jié)合ATmega128單片機(jī)闡述AVR單片機(jī)的理論和工程應(yīng)用?!禔VR單片機(jī)應(yīng)用開發(fā)指南及實(shí)例精解》共分9,主要
    發(fā)表于 07-28 10:28

    openwrt開發(fā)教程1~6

    openwrt開發(fā)教程1~6
    發(fā)表于 03-17 14:23 ?55次下載

    《嵌入式-STM32開發(fā)指南》第二部分 基礎(chǔ)篇 - 4 定時(shí)器(HAL庫(kù))

    《嵌入式-STM32開發(fā)指南》第二部分 基礎(chǔ)篇 - 4 定時(shí)器(HAL庫(kù))
    發(fā)表于 12-05 14:51 ?15次下載
    《嵌入式-STM32<b class='flag-5'>開發(fā)指南</b>》第二部分 基礎(chǔ)篇 - <b class='flag-5'>第</b>4<b class='flag-5'>章</b>  定時(shí)器(HAL庫(kù))

    Tina Linux配置開發(fā)指南

    Tina Linux配置開發(fā)指南
    的頭像 發(fā)表于 03-02 15:28 ?1.6w次閱讀
    Tina Linux<b class='flag-5'>配置</b><b class='flag-5'>開發(fā)指南</b>