【openwrt】使用ubus实现进程通信

本文详细介绍了openwrt中的ubus,包括其作为进程间通信工具的基本概念、实现框架、原理及应用场景。ubus基于unix socket,提供高效可靠的数据交互,常用于本地服务之间的通信。文章还探讨了ubus的局限性并简要解析了源码流程。
摘要由CSDN通过智能技术生成

1.什么是openwrt

什么是openwrt?

2.ubus介绍

ubus为openwrt平台开发中的进程间通信提供了一个通用的框架。 它让进程间通信的实现变得非常简单,并且ubus具有很强的可移植性,可以很方便的移植到其他linux平台上使用。 本文描述了ubus的实现原理和整体框架。

ubus源码可通过Git库 git://nbd.name/luci2/ubus.git 获得, 其依赖的ubox库的git库:git://nbd.name/luci2/ubox.git。

3.ubus的实现框架

ubus实现的基础是unix socket,即本地socket,它相对于用于网络通信的inet socket 更高效,更具可靠性。unix socket客户端和服务器的实现方式和网络socket类似,读者如果还不太熟悉可查阅相关资料。

要实现一个简单的unix socket服务器和客户端需要做如下工作:

 1.建立一个socket server端,绑定到一个本地socket文件,并监听clients的连接。
 2.建立一个或多个socket。
 3.client端,连接server。 client和server相互发送消息。
 4.client或server收到对方消息后,针对具体消息进行相应处理。

在这里插入图片描述

ubus中同样实现了上述组件,并对socket连接以及消息传输和处理进行了封装:

 1. ubus提供了一个socket server:ubusd。因此开发者不需要自己实现server端。 
 2. ubus提供了创建socketclient端的接口,并且提供了三种现成的客户端供用户直接使用: 
 		1、为shell脚本提供的client端。
        2、为lua脚本提供的client接口。
        3、为C语言提供的client接口。
        ubus对shell和lua增加了支持。
 3. ubus对client和server之间通信的消息格式进行了定义:client和server都必须将消息封装成json消息格式。
 4. ubus对client端的消息处理抽象出“对象(object)”和“方法(method)”的概念。一个对象中包含多个方法,client需要向server注册收到特定json消息时的处理方法。对象和方法都有自己的名字,发送请求方只需在消息中指定要调用的对象和方法的名字即可

使用ubus时需要引用一些动态库,主要包括:

 1. libubus.so:ubus向外部提供的编程接口,例如创建socket,进行监听和连接,发送消息等接口函数。
 2. libubox.so:ubus向外部提供的编程接口,例如等待和读取消息。
 3. libblobmsg.so,libjson.so:提供了封装和解析json数据的接口,编程时不需要直接
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值