1.什么是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数据的接口,编程时不需要直接