DirectFB 简介
作者: 网络
日期: 2009-09-25
本文从概念上介绍了 DirectFB,着重介绍了它与其它 GUI 系统的不同之处:硬件加速。

首先 DirectFB 类似于桌面中的 XFree86 。桌面中的 XFree86 不需要 Frame Buffer 设备,而 DirectFB 需要。

显卡加速在嵌入式 GUI 中需要实现很多图形功能,包括图形绘制以及拷贝等。 其中的许多功能需要进行大量的数据传递(如图形拷贝),或者需要进行大量的数 值运算(如画样条曲线)。如果这些功能都由纯软件实现的话,会占用大量的 CPU 时间并且需要传递大量的数据,从而影响了图形性能。许多显卡芯片带有图形处 理器,能够从硬件上实现一部分图形功能。支持硬件加速的图形库可以通过图形 处理器实现这些图形功能,从而减轻了 CPU 的负担并减少了数据在总线上的传 输时间,提高了图形性能。

DirectFB 项目是由德国 Convergence 公司推动的 Open source 计划的一部分, 它是专门为满足嵌入式设备要求而开发的小巧、强大、灵活和易于使用的图形系 统,并且试图成为一个建构于 Linux Framebuffer Device 之上的新图形标准。 它在 FrameBuffer 的基础上提供了图形加速、输入设备处理提取、透明窗口和 多重显示层的功能,能够对嵌入式系统 GUI 有较好的支持。与那些通用的嵌入 式 GUI 系统相比,它具有非常简洁、高效的体系结构和硬件图形加速功能。

DirectFB 依赖已有的内核接口即帧缓冲设备(/dev/fb)访问图形处理器,也就是 说 DireetFB 需要一个正在工作的帧缓冲驱动。Linux 内核有专门的帧缓冲驱动 支持某些图形处理器。对于不支持的图形处理器,内核提供 VE—SA 帧缓冲(这种 帧缓冲有一些限制)。DirectFB 利用帧缓冲设备做如下工作:

  • 设置显卡工作模式(分辨率,颜色深度,时序);
  • 映射显存。

如果某种显卡被 DirecFB 支持并且在 Linux 内核中也有这种图形处理器的帧缓 冲驱动,DirectFB 利用帧缓冲设备做如下额外的工作:

  • 映射显存IO端口(如果加速驱动在用户空间实现,需要这步。如果在内核空间实现,则不需要映射,但需要有相应的驱动接口。也可以重新写一个驱动程序来专门实现加速功能);
  • 关闭帧缓冲驱动中自带的加速功能

针对具体的图形操作(例如图片拷贝、区域填充、区域拷贝、画线、图形拉伸等), DirectFB 加速驱动(对映射到用户空间的控制寄存器访问)访问显存映射的图 形处理器 I/O 端口向图形处理器提交命令,由显卡来实现相应的命令。也就是 说真正的硬件加速完全是在用户空间实现。这样 DirectFB 就可以对它支持的图 形处理器提供最大限度的硬件图形加速。这些加速功能需要显卡控制器的支持。 一些嵌入式的显示控制器中并没有相应的功能。需要外接显卡来实现。

上层 API 支持 DirectFB 的有:XdirectFB、DirectFBGL、GTK+、DFBTerm、DFBSee、DFBPoint、MythTV、Qt on DirectFB、SDL等。

DirectFB 也需要窗口管理器。DirectFB 采用模块化设计,它并不依赖于某种具 体的窗口管理器,只要具体的窗口管理器实现接口 DirectFB 中的 CoreWMFuncs 中定义的函数,就可以挂到 DirectFB 中运行。DirectFB 自带有两个窗口管理 器:default 和 unique,可以在配置文件中用 wm=xxx 来选择用哪一个作为当 前的窗口管理器。

参考文档:

Linux图形界面中客户端、服务器、窗口管理器之间的关系