本文首先概述了 Linux 图形领域的基本设施,然后描述了一些可供嵌入式 Linux 系统使用的高级图形库以及图形用户界面支持系统。希望对嵌入式 Linux 系统的开发有所帮助。
1 Linux 图形领域的基础设施
本小节首先向读者描述 Linux 图形领域中常见的基础设施。之所以称为基础 设施,是因为这些系统(或者函数库),一般作为其他高级图形或者图形应用程 序的基本函数库。这些系统(或者函数库)包括:X Window、SVGALib、 FrameBuffer 等等。
1.1 X Window
提起 Linux 上的图形,许多人首先想到的是 X Window。这一系统是目前类 UNIX 系统中处于控制地位的桌面图形系统。无疑,X Window 作为一个图形环境 是成功的,它上面运行着包括 CAD建模工具和办公套件在内的大量应用程序。但 必须看到的是,由于 X Window 在体系接口上的原因,限制了其对游戏、多媒体 的支持能力。用户在 X Window 上运行 VCD 播放器,或者运行一些大型的三维 游戏时,经常会发现同样的硬件配置,却不能获得和 Windows 操作系统一样的 图形效果――即使使用了加速的 X Server,其效果也不能令人满意。另外,大 型的应用程序(比如 Mozilla 浏览器)在 X Window 上运行时的响应能力,也 相当不能令人满意。当然,这里有 Linux 内核在进程调度上的问题,也有 X Window 的原因。
X Window 为了满足对游戏、多媒体等应用对图形加速能力的要求,提供了 DGA(直接图形访问)扩展,通过该扩展,应用程序可以在全屏模式下直接访问 显示卡的帧缓冲区,并能够提供对某些加速功能的支持。
1.2 SVGALib
SVGALib 是 Linux 系统中最早出现的非 X 图形支持库。这个库从最初对标 准 VGA 兼容芯片的支持开始,一直发展到对老式 SVGA 芯片的支持以及对现今 流行的高级视频芯片的支持。它为用户提供了在控制台上进行图形编程的接口, 使用户可以在 PC 兼容系统上方便地获得图形支持。但该系统有如下不足:
1)接口杂乱。SVGALib 从最初的 vgalib 发展而来,保留了老系统的许多接 口,而这些接口却不能良好地迎合新显示芯片的图形能力。
2)未能较好地隐藏硬件细节。许多操作,不能自动使用显示芯片的加速能力 支持。
3)可移植性差。SVGALib 目前只能运行在 x86 平台上,对其他平台的支持 能力较差(Alpha 平台除外)。
4)发展缓慢,有被其他图形库取代的可能。SVGALib 作为一个老的图形支持 库,目前的应用范围越来越小,尤其在 Linux 内核增加了 FrameBuffer 驱动支 持之后,有逐渐被其他图形库替代的迹象。
5)对应用的支持能力较差。SVAGLib 作为一个图形库,对高级图形功能的支 持,比如直线和曲线等等,却不能令人满意。尽管 SVGALib 有许多缺点,但 SVGALib 经常被其他图形库用来初始化特定芯片的显示模式,并获得映射到进程 地址空间的线性显示内存首地址(即帧缓冲区),而其他的接口却很少用到。另 外,SVGALib 中所包含的诸如键盘、鼠标和游戏杆的接口,也很少被其他应用程 序所使用。
因此,SVGALib 的使用越来越少,笔者也不建议用户使用这个图形库。当然 ,如果用户的显示卡只支持标准 VGA 模式,则 SVGALib 还是比较好的选择。