ubus入门

ubus功能介绍

OpenWrt提供了一个系统总线ubus,目标时提供系统级的进程间通信(IPC)功能。

ubus由三个部分组成: 精灵进程、接口库和实用工具。

精灵进程ubusd: 提供一个总线层,在系统启动时运行,负责进程间的消息路由和传递。其他进程注册到ubusd进程进行消息的发送和接受。、

接口库:libubus.so, 其他进程可以通过该动态库动态链接来简化对ubus的访问。

实用工具: ubus命令行接口。

ubusd

/etc/init.d/ubus中提供了ubusd进程的启动,在系统进程启动完成之后启动。

ubus提供如下几个功能:

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

ubus将消息处理成对象(object)和方法(methods)的概念,一个对象可以包含多个方法,对象和方法都有自己的名字,发送请求方在消息中指明要调用的对象和方法。

ubus的另一个概念是订阅(subscriber), 客户端需要向服务端注册收到特定消息时的处理方法,这样当服务端发生变化是可以通知客户端。

ubus可以用于两个进程间的通信,进程间以TLV格式传递消息,用户不用关心消息实际传递的格式,ubus能够以JSON格式和用户进行数据交换。

常见的用用场景:

  1. C/S模式。
  2. 订阅通知模式。一种一对多的依赖关系。当一个对象的状态发生变化时,订阅它的对象会自动接收到通知。

ubus是一个总线消息服务器,任何消息均通过ubusd进程传递,因此多个进程在相互通信时,均通过ubus收发消息。

ubus入门_第1张图片

 

netifd可以通过libubus.so提供的API接口向ubus总线注册很多对象和方法,其他进程就可以通过ubus调用netifd注册的对象的方法。

ubus API编程后面学习。

Ubus命令行工具

ubus命令行工具也是使用libubus.so提供的API接口来与ubusd服务器进程通信。ubus调用参数和返回响应都是以JSON数据格式。ubus提供了5种命令来消息通信。

  1. list命令默认输出所有注册到ubus RPC服务器的对象,如果使用-v参数,指定对象(命名空间路径),则输出对象的所有方法和参数.
ubus list object_name -v

2. call命令在指定对象里调用指定的方法并传递消息参数。

ubus call network.device statuc '{"name":"eth0"}'

3.listen命令设置一个监听套接字来接收服务器发出的消息。

4. send命令用来发送一个通知事件,listen命令可以监听到。

ubus listen hello

ubus send hello '{"book": "openwrt"}'

5. wair_for用来等待对个多个对象注册到ubus中,当等待注册的对象注册完成之后退出。

你可能感兴趣的:(OpenWrt,嵌入式)