OpenWrt开发必备软件模块——ubus

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

作者|傅宽,单位:中国移动智慧家庭运营中心

​Labs 导读

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

ubus为openwrt平台开发中的进程间通信提供了一个通用的框架。它让进程间通信的实现变得非常简单。ubus实现的基础是unix socket,即本地socket,它比用于网络通信的inet socket更高效,更具可靠性。unix socket客户端和服务器的实现方式和网络socket类似。

图片

Part 01  如何实现一个简单的unix socket服务器和客户

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

Part 02  ubus通信框架 

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

ubus提供了一个socket server:ubusd。因此开发者不需要自己实现server端。

ubus提供了创建socket client端的接口,并且提供了的客户端供用户直接使用。

ubus的内部框架大体如下图:

图片

其中的Ubus Daemon就是ubusd,它是一个服务管理的服务器。上图右下角的组件是一个Client,用于向ubusd请求服务。而左下角是一个服务提供者(相对于ubusd它其实也是个Client,这里称之为Server实际上是相对于服务请求者Client而言,不要搞混了)。上图中Server和Client之间通讯的消息采用json格式。

Part 03  ubus消息格式及有效通信的方式

ubus对client和server之间通信的消息为json格式。

ubus对client端的消息处理抽象出“对象(object)”和“方法(method)”的概念。一个对象中包含多个方法,client需要向server注册自己的处理方法。对象和方法都有自己的名字,请求方只需在消息中指定要调用的对象和方法的名字即可。

Part 04  ubus引用的一些动态库 

libubus.so:创建socket,进行监听和连接,发送消息等接口函数。

libubox.so:等待和读取消息。

libblobmsg.so,libjson.so:提供了封装和解析json数据的接口,编程时不需要直接使用libjson.so,而是使用libblobmsg.so提供的更灵活的接口函数。

使用ubus进行进程间通信不需要编写大量代码,只需按照固定模式调用ubus提供的API接口即可。​

责任编辑:未丽燕 来源: 移动Labs
相关推荐

2011-09-30 15:05:02

Android应用十一

2023-07-18 08:46:34

开发必备软件工具

2012-11-19 08:27:15

傲游浏览器

2013-08-28 11:35:22

傲游

2012-05-16 14:03:30

软件、iphone

2021-01-27 22:27:58

电脑装机软件

2021-03-12 08:56:25

电脑装机软件Edge浏览器

2010-01-05 16:58:43

图片处理

2021-05-08 08:05:46

电脑装机软件Windows

2023-06-20 12:12:24

Zathura文档查看器

2010-07-06 11:47:19

RationalJazzWebServices

2015-07-16 17:14:21

终端开发

2020-01-18 15:15:11

程序员WindowsJava

2022-11-05 08:14:25

开发工具浏览器

2015-04-14 09:38:35

软件开发人员便利工具

2011-08-05 10:48:11

iPhone开发 Objective- Cocoa Touc

2014-06-13 10:55:15

移动WebApp开发

2018-05-13 15:34:15

软件定义存储SDS数据

2022-02-11 23:57:23

Windows 10微软软件

2019-02-22 10:52:01

点赞
收藏

51CTO技术栈公众号