Dbus总线及使用方法介绍

D-Bus是一种高级的进程间通信机制,它由freedesktop.org项目提供,使用GPL许可证发行。D-Bus的主要概念为总线,注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令。

DBus的三层架构:

底层接口层:主要是通过libdbus这个函数库,使进程拥有使用DBus的能力。

总线层:主要是由Dbus 总线守护进程(daemon)提供的,在Linux/Qnx系统启动时运行,负责进程间的消息路由和传递,其中包括内核和桌面环境的消息传递。总线守护进程可同时与多个进程相连,并能把来自一个进程的消息路由到一个或者多个进程。

应用封装层:通过一系列基于特定应用程序框架将DBus的底层接口封装成友好的Wrapper库,供应用开发人员使用。

通信类型:

信号(Signal),最常用的通信方式。一个进程可以发送一个或多个信号给另一个进程(或多个进程),发送进程指定Dbus接口(interface)和信号(member),接收进程通过监听相应的接口和成员来接收信号。

方法(Method),处理比较复杂或比较大量的数据。通过Dbus调用另一个进程的方法,当方法执行完毕时会通过回调函数(Callback)来通知调用进程,调用进程可以在回调函数内处理返回的数据。

接收信号流程:

1.调用dbus_bus_register进行Dbus总线注册。注册dbus的进程需要设定一个dbus name用来在总线上标识自己,注册完成后会创建一个DBusConnection,相当于该进程与dbus总线的连接点。

2.调用dbus_bus_add_match()添加信号匹配条件,一般是以字符串列表(包含interface和member)的形式添加。告诉dbus总线该进程想要接收信号对应的接口和信号名,当dbus总线接收到对应的信号时就会发送给添加条件的进程。

3.调用dbus_connection_add_filter(conn, function, NULL, NULL)添加接收到消息时的处理函数。当进程接收到dbus总线通知的消息时会进入到该函数,在该函数内可以根据不同接口收到的信号分别进行处理。

发送信号流程:

1.第一步和接收信号流程的第一步一样,需要先进行注册,为dubs连接取名,创建一个发送信号的通道。

2.调用dbus_message_new_signal(obj_path,interface,member)创建要发送的接口名和信号名。

3.调用dbus_message_append_args 设置发送消息的相关参数

4.调用dbus_connection_send(connection,msg) 把消息发送到指定的dubs连接

5.调用dbus_connection_flush(connection) 冲刷dbus连接,此时消息就会发送到dbus总线上。

欢迎关注微信公众号“汽车软件后花园”获取更多相关知识及学习资料,如果想看哪一方面的内容或信息,可以在公众号后台发送消息,谢谢。

你可能感兴趣的:(Dbus总线及使用方法介绍)