12 ubus


1 ubus

ubus 由三部分組成:精靈進程、接口庫和實用工具

  • 精靈進程它提供一個總線層,在設備啟動時負責進程的消息路由和傳遞。其他進程注冊到ubus進程進行消息的發送和接收。這個消息是由linux文件的socket收發實現的。
  • 接口庫名稱為libubus.so
  • 實用工具ubus是提供命令行的接口調試工具

2 ubusd

2.1 ubusd

ubusd是在netifd之前啟動的。該進程監聽一個文件套接字接口和其他應用程序通信。其他程序可基於libubus提供的接口或者實用ubus命令行程序來和ubusd進行通信

  • 提供注冊對象和方法供其他實體調用
  • 提供其他應用程序注冊對象的控制接口、
  • 在特定對象上注冊監聽事件
  • 向特定對象發送事件消息

2.2 ubus

ubus將消息處理抽象為對象和方法。
一個對象中包含多個方法。發送請求者需要在消息中指定要調用的對象和方法。
客戶端需要向服務器注冊收到特定消息時的處理方法。
ubus是一個總線型消息服務器,任何消息均可通過ubus進程傳遞


netifd模塊就是通過libubus動態鏈接庫提供API接口向ubus總線注冊了多個對象和方法

2.3 libubus常用接口

ubus_add_object     : 將對象加入ubus空間,即客戶端可以訪問的對象
ubus_connect        : 鏈接指定的路徑,創建並返回路徑所代表的ubus上下文
ubus_send_reply     : 發送響應
ubus_notify         : 給對象所有的訂閱者發送通知
ubus_lookup         :查找對象。path為路徑,如果為空則查找所有對象。cb為回調函數,對查找結果進行處理
ubus_lookup_id      : 查找對象的id
ubus_invoke         : 調用對象的方法
ubus_send_event     : 發送事件消息
ubus_register_event_handler : 注冊事件處理句柄
ubus_register_subscriber    : 增加訂閱通知

3 ubus命令行工具

3.1 list

輸出所有注冊到ubus RPC服務器的對象。list命令是通過調用ubus_lookup接口函數來列出所有的服務器的對象。返回信息由傳入ubus_lookup函數的第三個參數receive_list_result處理。這個參數是一個回調函數,結果將輸出到屏幕上。
-v參數指定對象

ubus list -v iwinfo

3.2 call

命令在指定對象里調用指定的方法並傳遞消息參數。
首先調用ubus_lookup_id,找到指定對象的ID,然后通過ubus_invoke來請求服務器。返回結果使用receive_call_result_data來處理。
ubus call iwinfo extralna '{"device":"ath0"}'


3.3 listen

設置一個監聽套接字來接收服務器發出的消息。listen命令是通過ubus_register_event_handler函數來注冊時間回調處理函數的
使用方法:
在一個終端中去啟動監聽ubus listen
在另一個終端中去執行downup。然后第一窗口便可觀察到對象狀態的變化

ubus call network.interface.wan down
ubus call network.interface.wan up

3.4 send

發送一個通知事件。此事件可使用listen進行監聽。send是通過調用ubus_send_event來實現。程序中調用blobmsg_add_json_from_string
第一個參數:指定對象
第二個參數:消息內容

ubus listen hello

ubus send hello '{ "book":"openwrt" }'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM