libubox / uci / ubus 的移植【轉】

(轉自:http://blog.chinaunix.net/uid-27057175-id-5793181.html

uci配置管理和ubus通信框架是openwrt系統上非常好的輕量級服務。
以至於,在非openwrt系統上都想用它們來搞事情。

而它們又都是cmake來自動編譯的。
這裏記錄下HOWTO。
sourouce ${你的交叉環境變量}
CC=${CROSS}gcc
CXX=${CROSS}g++

0.先搞定libubox依賴的libjson-c
./autogen.sh   # newly configure
install_dir="`pwd`/target_install/"
LIBS=" -ldl "
./configure --build=`sh config.guess` --host=arm-oe-linux-gnueabi --target=arm-oe-linux-gnueabi --prefix="$install_dir"
make clean
make V=s
make install

1. libubox
git clone git://nbd.name/luci2/libubox.git
cmake -DBUILD_LUA=off -DCMAKE_INSTALL_PREFIX=${PWD}/target_install -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm
cmake -DCMAKE_C_FLAGS:STRING="$CFLAGS $CPPFLAGS $LDFLAGS $LIBS" --debug-output --trace
# 依賴json-c.so 路徑錯誤,不得其解,沒搞清楚 cmake 自動補上的 LDFLAGS 總是包含 /usr/local/lib 路徑
# 這裏給顯式指定 target json-c.so 的絕對路徑。
# cmake 傳入的所有定義見於CMakeCache.txt
cmake -Djson:FILEPATH="${你的交叉編譯庫路徑}/usr/lib/libjson-c.so"
make V=s
make install


2. uci + libuci.so
git clone git://nbd.name/uci.git

cmake -DBUILD_LUA=off -DCMAKE_INSTALL_PREFIX=${PWD}/target_install -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm
cmake -DCMAKE_C_FLAGS:STRING="$CFLAGS $CPPFLAGS $LDFLAGS $LIBS" --debug-output --trace
make V=s
make install

3. ubus + ubusd + libubus.so
git clone git://nbd.name/luci2/ubus.git
cmake -DBUILD_LUA=off -DENABLE_SYSTEMD=off -DCMAKE_INSTALL_PREFIX=${PWD}/target_install -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm --debug-output --trace
cmake -DCMAKE_C_FLAGS:STRING="$CFLAGS $CPPFLAGS $LDFLAGS $LIBS" --debug-output --trace
# 同樣 指定json-c.so絕對路徑

make V=s
make install

注意:

ubus可用於兩個進程之間的通信,並以json格式進行數據交互。ubus的常見場景爲:

  • “客戶端-服務器”形式的交互,即進程A註冊一系列的服務,進程B去調用這些服務;

  • ubus支持以“訂閱-通知”的方式進行進程通信,即進程A提供訂閱服務,其它進程可以選擇訂閱或退訂該服務,進程A可以向所有訂閱者發送消息。

由於ubus實現方式的限制,在一些場景中不適宜使用ubus:

  • ubus用於少量數據的傳輸,如果數據量很大或是數據交互很頻繁,則不宜用ubus,當ubus一次傳輸數據量超過60KB,就不能正常工作了;

  • ubus對多線程支持的不好,例如在多個線程中去請求同一個服務,就有可能出現不可預知的結果;

  • 不建議遞歸調用ubus,例如進程A去調用進程B的服務,而B的該服務需要調用進程C的服務,之後C將結果返回給B,然後B將結果返回給A。

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