Ubus簡單理解

2022-06-17 10:54:11 字數 1785 閱讀 6424

摘自:

這篇文章講了三種ubus使用的例項,內含**

(首先明確一下,文章中提到的「object」是乙個「ubus_object」結構體,這個結構體有很多成員,但是目前我在例子中只看到以下幾個成員的使用。

ubus_object.name :obj的名字,字串

ubus_object.type :另外乙個結構體指標,是和methods有關的結構體

ubus_object.methods :obj的一些方法,結構體陣列

ubus_object. n_methods: obj方法數量

ubus_object. subscribe_cb :obj的methods被訂閱時的**函式

【第一種使用場景】subscriber和notifier

notifier:傳送訊息的一方,使用以下函式

ubus_add_object()

ubus_notify():通知訊息

subscriber: 訂閱(接收)訊息的一方,使用以下函式

ubus_register_subscriber()

ubus_lookup_id()

ubus_subscribe():訂閱訊息

*函式使用方法自行調查

【第二種使用場景】invoke(遠端呼叫)

pro1作為被呼叫者,需要有乙個obj

pro2作為呼叫者可以使用ubus_invoke()函式進行呼叫pro1的某個method。

/*主要使用函式ubus_invoke()的宣告如下:

int ubus_invoke(struct ubus_context *ctx, uint32_t obj, const char *method, struct blob_attr *msg, ubus_data_handler_t cb, void priv, int timeout);

其中cb引數是訊息**函式,其函式型別定義為:

typedef void (ubus_data_handler_t)(struct ubus_request *req, int type, struct blob_attr *msg);

引數type是請求訊息的型別,如ubus_msg_invoke,ubus_msg_data等。

引數msg存放從服務端得到的回覆訊息,struct blob_attr型別,同樣用blobmsg_parse()來解析。

引數req儲存了請求方的訊息屬性,其中req->priv即ubus_invoke()中的priv引數,

用這個引數可以零活的傳遞一些額外的資料。

*/【第三種使用場景】event方式廣播通知

在event方式廣播通知下,pro1向pro2,pro3和pro4廣播名為"add_device"的事件,但是在三個其他程序中只有pro2對這個event註冊了監聽,所以也只有pro2會對這個事件進行處理。

pro1廣播event函式:ubus _send_event()

pro2對這個event註冊監聽:ubus_register_event_handler()

以上

ubus庫包使用

編譯平台 ubuntu 14.04 目標板平台 mt7688 的主要目錄如下 include libs makefile src 其中,include存放的是所移植的庫包的標頭檔案 libs存放的是移植的庫包的動態庫 src下存放的測試原始碼.c cpp,我這裡比較簡單,主要是為了測試ubus的功能...

ubus 相關資料整理

ubuntu編譯ubus及相關依賴庫 大昱的部落格 csdn部落格 交叉編譯libubox eric csdn部落格 openwrt ubus編譯安裝 segmentfault 思否 好!ubuntu編譯ubus及相關依賴庫 大昱的部落格 csdn部落格 看起來靠譜 openwrt ubus 移植到...

基於OpenWrt新增ubus支援

平台 openwrt 14.07 一台路由器 需求 為乙個守護程序新增ubus支援,使之能夠使用ubus call來獲取相關資訊 參考 netifd,ubus原始碼 尤其是examples目錄下的示例 思路 聽聞ubus有封裝好的api,那麼,一定有某些規則讓我們這些開發者去遵循,帶著這個問題去尋找...