openwrt中ubus的具體使用

轉自: http://www.fx114.net/qa-26-169704.aspx#__RefHeading__28_50040687


openwrt ubus的wiki


ubus是爲了OpenWrt中守護進程和應用程序之間通訊開發的,類似桌面的DBus,設計理念上與DBus基本保持一致,區別是簡化的API和簡練的模型,以適應embeddedrouter的特殊環境。與DBus一樣也是使用socket實現。
核心部分是ubusd守護進程,它提供了其他守護進程將自己註冊以及發送消息的接口。因爲這個,接口通過使用Unixsocket來實現,並使用TLV(type-length-value)消息,ubus內部使用Blob_buf,Blob_attr等結構來表示。
ubus有兩種調用,一個是method調用,一個是notification,其中method包括等待函數返回和不用等待返回,notification是廣播和DBus的signal類似。ubus使用是先建立連接,然後把連接加入epollset中。下面是它的一些調用API。
uloop_init(); 創建epoll句柄,最多監聽32個fd
ubus_connect(); 創建ubus連接
ubus_add_uloop(); 把創建的ubus連接註冊到epoll中。
ubus_add_object(); 註冊對象到的ubus連接。
uloop_run(); 等待I/O事件發生,調用相對應的對象的功能函數。
ubus_free(); 關閉ubus連接
uloop_done(); 關閉epoll句柄


ubus調試有一個命令行工具叫ubus,ubus可以和ubusd服務器交互(和當前所有已經註冊的服務).它對研究和調試註冊的命名空間以及編寫腳本非常有用。可以調用帶參數和返回信息的方法,它使用友好的JSON格式。JSON(JavaScriptObjects Notation)是一種輕量級的數據交換方式,JSON是humannice type,有兩種數據結構對象和數組。
對象: {“firstname”:“Brett”,“lastname”:“Mical”}
數組:[“aaa”,“bbb”, “ccc”]


下面是它的命令說明。
ubus Commands:


-list [<path>] List objects


-call <path> <method> [<message>] Call an objectmethod


-listen [<path>...] Listen for events


-send <type> [<message>] Send an event


-wait_for <object> [<object>...] Wait for multipleobjects to appear on


ubuslist缺省列出所有向服務器註冊的命名空間,如果調用時包含參數-v,將會顯示指定命名空間更多方法參數等信息。
ubuscall 調用指定命名空間中指定的方法,並且通過消息傳遞給它,消息參數必須是有效的JSON字符串,並且攜帶函數所要求的鍵及值。
Ubuslisten 設置一個監聽socket並觀察進入的事件。
Ubussend 發送一個事件提醒。
root@uplink:~#ubus listen &



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