深入浅出DBUS

DBUS简介

D-Bus 是 Freedesktop.org 项目开发的一种系统间消息传递机制,用于系统中不同进程间进行通信问题。

在 Linux 桌面系统中,应用程序通常需要与其他应用程序进行通信,例如播放器需要与音频设备进行通信,桌面环境需要与屏幕保护程序进行通信。传统上,应用程序间通信通常使用共享内存、信号量、管道、socket等方式进行。这些方式存在一些问题,例如:

  • 通信方式不统一,需要应用程序自行实现通信接口,增加了开发复杂度和维护成本。D-Bus基于unix socket,提供了统一的通信开发框架。该框架支持多种开发语言,可以更加便捷地实现进程间的通信。
  • 通信效率较低,影响系统性能。D-Bus 采用高效的消息传递机制,传统的RPC方案,免不了需要对数据进行序列化和反序列化操作,而D-Bus没有这一操作,减少了数据解析成本,以及序列化操作所带来的数据负载,可以有效提升系统性能。
  • 动态注册注销机制:D-Bus 采用动态注册注销机制,可以动态注册注销服务,实现服务的动态加载或卸载。

D-Bus 通信模型

  • D-Bus 通信模型
  • Method Call过程

D-Bus 基本概念

消息总线

  • 系统总线:系统级的通信通道,用于操作系统的核心部分和系统级服务。随系统启动而启动,持久的。它主要用于系统服务之间的交流,如硬件状态的变更、系统设置的更新等。
  • 会话总线:用户会话级的通信通道,用于同一用户会话中运行的应用程序。

总线名(Bus Name)

总线名是服务注册到总线的名称,总线名又分为两类:

Unique name 以:开始,Unique name是dbus-daemon分配的,类似于:1.30,技术规范明确要求其永不重复

Well Known name 为了方便人脑记忆引入的名字。为了命名不冲突,技术规范推荐使用逆转域名方式命名,例如org.freedesktop.DBus

对象(Object Path)

一个进程可以包含多个对象,D-Bus用Object path来标识对象,一般以/org/freedesktop/DBus这种形式命名。

接口(Interface)

Interface包含方法(Method)、属性(Property)和信号(Signal),以org.freedesktop.DBus这种形式命名。

方法(Method)

方法,程序可以通过D-Bus提供的机制,调用另外一个进程提供的Method,即RPC的概念

信号(Signal)

信号,D-Bus中Pub-Sub通信模型的具体实现。

属性(Property)

属性,类似于C++类中成员变量的Getter-Setter,可以定义为只读、只写、读写类型。

签名字符串(Signature)

D-Bus技术规范规定使用String类型来编码方法、信号的签名(参数)。例如i代表int32_t类型,a代表数组等等。

消息类型

连接到总线的进程可通过总线接收或传递消息,总线收到消息时,根据不同的消息类型进行不同的处理。D-Bus中消息分为四类:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值