14-Openwrt ubus

ubus是OpenWrt中的进程间通信机制,ubusd实现server,其他进程实现client,例如ubus(cli)、netifd、procd,两个client通信需要通过server转发。

ubus提供了创建socket client端的接口,并且提供了三种现成的客户端供用户直接使用:

  1. 为shell脚本提供的client端。
  2. 为lua脚本提供的client接口。
  3. 为C语言提供的client接口。

这边主要对C语言和shell进行说明

1 ubus method

ubusd已经由openwrt实现了,所以我们就实现client端的ubus,也是基于uloop来实现的,所以其三步骤也是必须的:

void ubus_test(void)
{    
    uloop_init();
    ztest_ubus_init();
    uloop_run();
    ztest_ubus_clean();
    uloop_done();
}

ubus的调用步骤ubus_connect、ubus_add_uloop、ubus_add_object

int ztest_ubus_init(void)
{
    int ret;

    g_ubus_ctx = ubus_connect(NULL);
    if (!g_ubus_ctx) {
        ULOG_ERR("Failed t
### OpenWrtUbus 的使用方法和功能介绍 Ubus 是为 OpenWrt 平台开发设计的一个进程间通信框架,它简化了不同组件之间的交互过程并增强了系统的模块化程度[^1]。 #### 功能特性 - **简易的IPC机制**:通过定义良好的API接口使得开发者能够轻松建立服务端与客户端间的高效通讯。 - `libubus.so` 提供了一系列用于操作Ubus的核心函数集,比如创建套接字、发起请求等基本动作。 - `libubox.so` 则包含了辅助性的工具类函数,像事件循环管理等功能。 - 对JSON格式的支持由专门的 `libblobmsg.so` 库来完成,该库内部实现了对二进制形式的消息编码解码逻辑,从而允许应用程序间接利用 JSON 结构传递复杂的数据结构而无需直接调用底层解析器[^3]。 #### 实现方式概述 当某个程序想要成为Ubus的服务提供商时,它可以注册特定的对象及其关联的方法;而对于消费者来说,则可以通过查询已存在的对象列表找到所需的服务,并按照既定协议发送命令获取响应。例如,有一个名为 "client1" 的应用实例分别暴露出了 “interface” 和 “dotalk” 这样的实体给外界访问,前者拥有设置或读取局域网IP地址的能力(即 getlanip/setlanip 方法),后者则能发出问候语句(sayhi/saybye 方法)。每当有来自远程节点的有效呼叫到达后,相应的回调处理器就会被触发执行具体的业务流程[^5]。 ```bash # 注册一个新的ubus对象和服务方法的例子 ubus add_object interface { methods = [ { name="getlanip", type=string }, { name="setlanip", type=string } ] } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Creator_Ly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值