ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

12 ubus

2022-01-19 14:31:07  阅读:170  来源: 互联网

标签:12 对象 接口 ubus 调用 send 注册


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" }'

标签:12,对象,接口,ubus,调用,send,注册
来源: https://www.cnblogs.com/burnk/p/15818781.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有