Openwrt開發日誌——UCI API編…

Mission 4

                                                                                                  ——UCI API編程接口學習

Tool

XshellWinSCPOpenwrtNewifi

Reference:

《智能路由器開發指南》

Procedure

UCI不僅提供命令接口供腳本開發者使用,而且提供了C語言調用接口。下面在Ubantu下說明API的使用。首先準備UCI編程接口的使用環境。UCI軟件依賴Libubox,因此首先編譯Libubox

4.2.1 Libubox

       LibuboxOpenwrt的一個必備的基礎庫,包含大小端轉換、鏈表、MD5等實用工具基礎庫,採用Cmake來編譯。

libubox主要提供一下兩種功能:

        1、提供一套基於事件驅動的機制。

        2、提供多種開發支持接口。(如:鏈表、kv鏈表、平衡查找二叉樹、md5json

使用libubox開發的好處有如下幾點:

        1、可以使程序基於事件驅動,從而可實現在單線程中處理多個任務。

        2、基於libubox提供的開發API可以加快開發進度的同事提高程序的穩定性。

        3、能更好的將程序融入openwrt的架構中,因爲新的openwrt的很多應用和庫都基於libubox開發的。

       Cmake是跨平臺的產生Makefile的命令行工具,它應用於在腳本文件中配置工程。工程設置選項可以在命令行通過-D選項設置。-i選項可以打開交互提示來進行設置。它是一個跨平臺的編譯系統生成工具。通過平臺獨立Cmakelistfiles文件來指定構建過程。這個文件在每一個源碼目錄樹目錄下均有一個,文件名爲Cmakelists.txtLibuboxUCI均使用Cmake命令來產生目標平臺的構建系統命令。因此我們要首先安裝Cmake

       接着我們編譯Libuboxcd進入dl目錄下,找到libubox的壓縮包:

 

       隨後進行編譯,指令爲:

       tar -xfz libubox-2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb.tar.gz(你的libubox文件名)

    cd libubox-2015-11-08

    cmake -D BUILD_LUA:BOOL=OFF -D BUILD_EXAMPLES:BOLL=OFF .

    make;

    sudo make install;

       注意在Cmake生成Makefile時,後面有一個點,表示在當前目錄執行。

       生成Makefile時,設置了兩個編譯開關爲OFF,分別是lua和使用示例,我們不進行編譯,因此把編譯選項關閉。

 

 

 

       編譯結束後,進行安裝,安裝到系統目錄中。安裝內容包含頭文件和動態鏈接庫文件。頭文件默認在/usr/local/include/libubox/目錄中,動態鏈接庫libubox.solibubox.a安裝在/usr/local/lib/目錄下。

4.2.2 UCI

      Libubox安裝完成後即可編譯安裝UCI軟件了。同樣進入dl文件夾,編譯安裝UCI,代碼爲:

tar -xzf uci-2015-*****.1.tar.gz

cd uci-2015-***

cmake -D BUILD_LUA:BOOL=OFF .

make

sudo make install

sudo ldconfig

    UCI庫頭文件安裝在/usr/local/include目錄下,動態鏈接庫安裝在/usr/local/lib/libuci.so,可執行程序爲/usr/local/bin/uci。運行ldconfig命令是因爲系統還不知道動態鏈接庫已經安裝,運行該命令會告訴系統重新加載動態鏈接庫,這樣UCI動態鏈接庫就可以使用了。編譯時使用以下命令來鏈接UCI庫:

       gcc test.c -o test -luci

4.2.3 UCI API 接口

       UCI接口命名非常規範,統一以小寫uci打頭,並放在uci.h頭文件中。大多數函數的第一個參數均爲uci_context的指針變量。這個變量在程序初始化時調用uci_alloc_context函數分配空間並設置初始值。在程序執行結束時調用uci_free_context函數釋放空間,

       UCI接口有設置函數uci_set,但沒有相應的獲取函數uci_getUCI使用uci_lookup_ptr來提供查詢功能,如果查到則通過獲取ptr變量的值來獲取配置的值。

       UCI API 接口含義對照表(略)以後這個含義對照表也將會被用到。

4.3 系統內核設置

       Openwrt是一個linux操作系統,因此它的桌面操作系統和Ubuntu以及Fedora一樣,採用sysctl作爲系統的內核配置工具,是一個允許您改變正在運行中的Linux系統的接 口。它包含一些 TCP/IP 堆棧和虛擬內存系統的高級選項,這可以讓有經驗的管理員提高引人注目的系統性能。用sysctl可以讀取設置超過五百個系統變量。sysctl.conf作爲其內核配置文件在啓動時進行加載。

4.3.1 sysctl.conf

       此文件時系統啓動預加載的內核配置文件,通過sysctl命令讀取和設置到系統當中。配置文件的語法格式如下:

       # comment

       ; comment

       token = value

       以“#”和分號開頭的爲註釋,忽略空白行,配置值以key=value形式設置。如設置打開報文轉發爲net.ipv4.ip_forward=1

       這個文件在Openwrt源碼中保存在package/base-files/files/etc/sysctl.conf目錄下。

Openwrt常見內核配置項含義(略)

4.3.2 sysctl

       Sysctl是用於修改運行中的內核參數的命令,所有可用的內核參數均在/proc/sys目錄下。運行sysctl需要procfs文件系統支持。可以用sysctl讀取和修改內核參數數據。

       -n:查詢時輸出配置項的值,但不輸出配置項。

       -e:當碰到不認識的配置項時,忽略錯誤。

       -w:使用這個選項來修改系統設置。

       -p:從指定的配置文件中加載配置,如果沒有指定則使用默認的配置文件/etc/sysctl.conf

       -a:顯示當前所有可用的值。

       常用命令舉例如下:

       /sbin/sysctl -a,顯示所有的內核配置;

       /sbin/sysctl -n kernel.hostname,查詢kernel.hostname的值;

       /sbin/sysctl -w kernel.hostname = “sao”, 修改系統主機名稱爲sao

       /sbin/sysctl -p /etc/sysctl.conf,加載配置。

       內核的參數配置在啓動時由sysctl工具加載,默認加載/etc/sysctl.conf。啓動之後均可在/proc/sys下查詢,例如直接查詢是否打開路由轉發:

       cat /proc/sys/net/ipv4/ip_forward

       內核參數也可以通過直接修改/proc/sys下的文件來生效。例如打開路由轉發設置,可以執行以下命令:

       echo “1” > /proc/sys/net/ipv4/ip_forward

4.4 系統配置

       Openwrt還有一些配置不是通過UCI配置來實現的,這部分屬於大多數Linux系統都有的,用戶很少修改,因此不提供給用戶進行修改。

       主要有:

/etc/rc.local

       /etc/profile

       /etc/shells

       /etc/fstab

       /etc/services

       /etc/protools

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章