Ubus介绍

  1. Ubus介绍

OpenWrt 提供了一个系统总线ubus ,它是为了OpenWrt中守护进程和应用程序之间通讯开发的,类似桌面的DBus,目标是提供系统级的进程间通信(IPC)功能。设计理念上与DBus基本保持一致,提供了系统级总线功能。与d-Bus相比减少了系统内存占用空间,可适应于嵌入式Linux操作系统的低内存和低端CPU性能的特殊环境。与DBus一样也是使用socket实现。

通俗点说,ubus就是一个用于进程间通信的通用框架。ubus具有很强的可移植性,可以很方便的移植到其他Linux平台上使用。

ubus模块被设计用于提供守护进程(daemons)和应用程序(applications)间的通讯,包含了守护进程ubusd、库以及一些例子。ubusd可以认为是一个消息管理服务器(Server),需要通信的进程可以通过提供的libubus使用ubus,而ubus又依赖于ubox

  1. Ubus 模块的组成

Ubus 模块由3 部分组成

  1. Ubusd守护进程
  2. ubus接口库(libubus.so)
  3. ubus命令行工具

ubus的内部框架大致如下图1所示:

图1 ubus内部框架

ubus提供的功能主要有以下4个方面

  • 提供注册对象和方法供其他实体调用。
  • 调用其他应用程序提供的注册对象的控制接口。
  • 在特定对象上注册监听事件。
  • 向特定对象发送事件消息。

    1. ubusd 守护进程

ubus模块的核心是ubusd精灵进程,它提供了一个总线层,在系统启动时运行,负责进程间的消息路由和传递。其他进程注册到 ubusd进程进行消息的发送和接收。这个接口是用Linux文件socket和TLV(类型-长度-值)收发消息来实现的。每一个进程在指定命名空间下注册自己的路径。每一个路径都可以提供带有各种参数的多个函数处理过程,函数处理过程程序可以在完成处理后返回消息。

/etc/init.d/ubus:ubusd精灵进程是由/etc/init.d/ubus启动的,ubusd精灵进程在系统进程启动完成之后立即启动。它是在网络进程 netifd之前启动的,该进程监听一个文件套接字接口和其他应用程序通信。

当ubusd精灵进程启动之后:其他应用程序可基于libubus提供的接口或使用ubus命令行程序来和ubusd进程进行通信。

ubus是为进程间发送消息而设计的,不适合传输大量数据(进程间传输大量数据应采用共享内存)。

    1. ubus接口库(libubus.so)

ubus接口库libubus.so 通过提供下面的API接口,来体现对外实现的功能

函数

含义

ubus_add_object

将对象加入的ubus空间中,即客户端可以访问对象。

ubus_register_subscriber

增加订阅通知。

ubus_connect

连接指定的路径,创建并返回路径所代表的ubus上下文。

ubus_send_reply

执行完成方法调用后发送响应。

ubus_notify

给对象所有的订阅者发送通知。

ubus_lookup

查找对象,参数path为对象的路径,如果为空则查找所有的对象。

cb为回调函数,对查找结果进行处理。

ubus_lookup_id

查找对象的id,并将id参数在指针中返回。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值