DBus入门实践(1): 基本概念

☆樱花仙子☆ 提交于 2019-12-06 07:50:17

基本概念

可以参考下面链接.或者是官方的教程.

 1. linux,dbus示例 Knowing some basic things by example, 推荐:

http://laokaddk.blog.51cto.com/368606/943133

        http://laokaddk.blog.51cto.com/368606/943148/  

2. Documents Reference    D-Bus Specification would give some basic overview  of the concepts

                        https://dbus.freedesktop.org/doc/dbus-specification.html


DBUS可以完成1对1的IPC, 多对多的IPC, 多对多需要daemon,和android中的service_manger类似,如同router.


DBus的组成

DBus = 对象+消息+link+DbusDaemon

对象

特征

  • 其中对象是一个处理消息的实体, 因此其实是服务端server
  • 对象中有一个或者多个接口
  • 每个interface有一个或者多个method
  • 每个method都是对具体消息的处理

所以最终落实到消息, 消息共有四种,包括了signal,见下面的说明. 对象的寻址用路径表示

路径

在多对多的IPC中,使用路径来表明一个对象的位置, 这个路径和router中的路由很类似. 都是寻址. 

消息的传递变成了先到Daemon中转,然后由DBus Daemon转发.

消息

消息传输

  • 双向传输:这样子就可以在调用一个method接收返回值
  • 传输方式:同步+异步

消息的类型

  • 调用消息
  • 结果返回消息
  • 错误消息
  • 信号消息

Dbus Daemon

可以有多个,一般一个系统中至少有两个,一个是system,一个是session, 这个Linux中的OS的组成有关,想象一下,我们使用Remote Desktop,同一个账号,分两个,登陆到Linux中,分别使用的Desktop environment分别为gnome和KDE, 这两个Desktop Env各种两套不同的NetworkManger, 两套Software Updater, 此时就需要相互通讯, 同时管理这两个或者多个Desktop Env/Session的是X Window Manager, 这个WM也需要管理和给这两个不同的Desktop Env/Session发送消息, 因此就出现了:

  • DBUS_BUS_SYSTEM: 系统相关的,例如将update消息发送到session中
  • DBUS_BUS_SESSION: 在同一个DE环境下的不同Application的通讯

这两种daemon. 且两者管理的内容不一样.


DBus的使用

这个过程和使用路由器来连接不同的电脑非常类似. 可以认为是3步:

  1. DBus Daemon的启动
  2. 对象Server的注册
  3. 客户端使用服务,即IPC通讯

下面是详细的说明.

对象Server的注册与连接

对于多对多的IPC通讯, 首先需要有一个DBus Daemon, 然后各个对象(即Server)到Daemon中注册并建立连接, 这个过程如同在路由器中分配了一个IP地址, 此时其他电脑才可能能够通过这个IP来访问这台电脑, "IP"就是前面的路径.

其中这里面的注册和连接也是使用代理(想象一下, 其实这个时候Server对象其实也是DBus Daemon的client, 所以和下面的客户端使用服务是类似的), 通过接口dbus_g_object_type_install_info, 将安装信息(对象的信息), 传递给DBus Daemon, 然后使用Daemon的Proxy调用RequestName来注意个对象的名字/路径.


其中安装信息由XML文件,通过dbus-binding-tool转换成对象的头文件。参考: 

https://fabricioepa.wordpress.com/2010/12/16/d-bus-tips-3-0-performing-asynchronoussynchronous-method-invocations-and-dbus-binding-tool/


客户端使用服务

建立与DBus Daemon的连接

创建对象的代理(Proxy),就如同如果想和某个公司沟通,那么可以找到他们的服务部的代表人员

然后通过Proxy来完成所有的操作, 如同和公司的业务部门人员洽谈买芯片.

  这里的操作都是使用Msg来传递的, 看前面message的种类. 同时这些Message的发送接收可以是同步也可以是异步


消息的组成

消息= Msg Header + Msg Content

Msg Header

由固定的字段来组成,这样子的约定才能让Dbus Daemon可以解析

Msg Content

由string组成, 开头需要为8Byte对齐


参考

http://linoxide.com/how-tos/d-bus-ipc-mechanism-linux/

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!