二.目前,主流的嵌入式Linux系统的GUI解决方案有: 1. MicroWindows
MicroWindows是一个著名的开放源码的嵌入式GUI软件。MicroWindows提供了现代图形窗口系统的一些特性。MicroWindows API接口支持类Win32 API,接口试图和Win32完全兼容。它还实现了一些Win32用户模块功能。MicroWindows采用分层设计方法,以便不同的层面能够在需要的时候改写,基本上用 C 语言实现。MicroWindows能够在没有任何操作系统或其他图形系统的支持下运行,它能对裸显示设备进行直接操作。这样,MicroWindows就显得十分小巧,便于移植到各种硬件和软件系统上。MicroWindows已经支持 Intel 16位和32位CPU、MIPS R4000 以及 ARM 芯片;但作为一个窗口系统,该项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完备,键盘和鼠标等的驱动还很不完善。其图形引擎也存在许多问题,可以归纳如下:
(1) 无任何硬件加速能力。
(2) 图形引擎中存在许多低效算法,如在圆弧图函数的逐点判断剪切的问题。 值得一提的是,该项目的许多控件是从 MiniGUI 中移植过去的,扫雷游戏也是从 MiniGUI 中移植过去的。由于该项目缺乏一个强有力的核心代码维护人员,2003年Microwindows推出版本0.90后,该项目的发展开始陷于停滞状态。 2.OpenGUI
OpenGUI在Linux系统上存在已经很长时间了。这个库是用C++编写的,只提供C++接口。OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口。OpenGUI提供了二维绘图原语、消息驱动的API及BMP文件格式支持。OpenGUI功能强大,使用方便。OpenGUI 支持鼠标和键盘的事件,在Linux上基于Frame buffer或者SVGALib实现绘图。由于其基于汇编实现的内核并利用MMX指令进行了优化,OpenGUI运行速度非常快。正由于其内核用汇编实现,可移植性受到了影响。通常在驱动程序一级,性能和可移植性是矛盾的,必须找到一个折衷。OpenGUI采用LGPL条款发布。OpenGUI比较适合于基于x86平台的实时系统,跨平台的可移植性较差,目前发展较慢。 3.Qt/ Embedded
QT/Embedded 是著名的 QT 库开放商正在进行的面向嵌入式系统的 QT 版本。这个版本的主要特点是可移植性较好,许多基于 QT 的 X Window 程序可以非常方便地移植到嵌入式版本。但是该系统不是开放源码的,如果你要使用这个库,可能需要支付昂贵的授权费用。目前,已经有了 QT/Embedded 的演示版,预计明年初将出现 QT/Embedded 的正式发行版。Q T 库是一个跨平台的C + +类库,可以用于多种U n i x、L i n u x、Wi n 3 2等操作系统。Q T 并不是遵从G P L或L G P L协议的软件包,获取Q T 库的许可证很不方便。
Qt/Embedded延续了Qt在X上的强大功能,在底层摒弃了X lib,仅采用framebuffer作为底层图形接口。同时,将外部输入设备抽象为keyboard和mouse输入事件,底层接口支持键盘、GPM鼠标、触摸屏以及用户自定义的设备等。 Qt/Embedded类库完全采用C++封装。丰富的控件资源和较好的可移植性是Qt/Embedded最为优秀的一方面。它的类库接口完全兼容于同版本的Qt-X11,使用X下的开发工具可以直接开发基于Qt/Embedded的应用程序GUI界面。
与前两种GUI系统不同的是,Qt/Embedded的底层图形引擎只能采用 framebuffer。这就注定了它是针对高端嵌入式图形领域的应用而设计的。由于该库的代码追求面面俱到,以增加它对多种硬件设备的支持,造成了其底层代码比较凌乱,各种补丁较多的问题。Qt/Embedded的结构也过于复杂臃肿,很难进行底层的扩充、定制和移植,尤其是用来实现 signal/slot机制的moc文件。
相对其他GUI来说, Qt/Embedded 系统消耗资源较大,应该说是肥美型的产品,功能丰富,但能消化它的东西只能是高端产品,32MB内存是运行它的最小要求。因此,如果开发的产品不是高端的信息终端类产品,不应优先考虑 Qt/Embedded。
上图是使用QT完成的一款PDA的主界面 4.G t k +
G t k + (GIMP Tool Ki t,G I M P工具包)是一个用于创造图形用户接口的图形库。G t k +是基于L G P L授权的,因此可以用G t k +开发开放源码软件、*软件,甚至商业的、非*的软件,并且不需要为授权费或版权费花费一分钱。G t k已在大量软件项目,包括G n o m e中得到了广泛应用。
G t k +图形库使用一系列称为“构件”的对象来创建应用程序的图形用户接口。它提供了窗口、标签、命令按钮、开关按钮、检查按钮、无线按钮、框架、列表框、组合框、树、列表视图、笔记本、状态条等构件。可以用它们来构造非常丰富的用户界面。
G T K本质上是面向对象的应用程序编程接口( A P I )。虽然完全是用C写成的,但它仍然是用类和回调函数(指向函数的指针)的方法实现的。因为G t k +是用C语言编写的,所以在开发L i n u x下的G U I程序时使用C语言是非常方便的。 在G T K下还可以使用图形化编程工具G l a d e—一种G U I生成器,可以快速生
成创建界面的C源程序。
自从Qt推出了嵌入式版本之后,虽然GTK+并非商业公司所发展,但也加紧脚步推出了GtkFB方案,其宗旨就是要为嵌入式系统推出一套基于GTK+的GUI解决方案。与Qt/Embedded类似,GtkFB也跳过X层直接与FrameBuffer沟通,因此也具有Qt/Embedded的几项优点,不过由于不是商业软件,在发展的速度上较为缓慢。
5.MiniGUI
MiniGUI 是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。它主要运行于 Linux 控制台,实际可以运行在任何一种具有 POSIX 线程支持的 POSIX 兼容系统上。MiniGUI 同时也是国内最早出现的几个*软件项目之一。MiniGUI 的主要特色有:
遵循 LGPL 条款的纯*软件。 提供了完备的多窗口机制。这包括: 多个单独线程中运行的多窗口。 单个线程中主窗口的附属。
对话框和预定义的控件类(按钮、单行和多行编辑框、列表框、进度条、工具栏等)。
消息传递机制。
多字符集和多字体支持,目前支持 ISO8859-1、GB2312、Big5 等字符集,并支持各种光栅字体和 TrueType、Type 1 等矢量字体。
全拼、五笔等汉字输入法支持。
BMP、GIF、JPEG、PCX、TGA 等常见图像文件的支持。 Windows 的资源文件支持,如位图、图标、光标等。 插入符、定时器、加速键等。
其他(Beep、ETC/INI 文件操作等)。
小巧。包含全部功能的库文件大小为 300 K左右。
配置。可根据项目需求进行定制配置和编译。
高稳定性和高性能。MiniGUI 已经在Linux 发行版安装程序、CNC 系统、蓝点嵌入式系统等关键应用程序中得到了实际的应用。
可移植性好。目前,MiniGUI 可以在 X Window 和 Linux 控制台上运行。中科院 EEOS 开发组已经成功地将 MiniGUI 移植到了他们的 POSIX 兼容系统上。蓝点软件(北京)研发中心也已经成功地将 MiniGUI 移植到了两款基于 StrongARM 的嵌入式系统上。
MiniGUI的GAL层技术SVGA lib、LibGGI、基于framebuffer的native图形引擎以及哑图形引擎等,对于Trolltech公司的QVFB在X Window下也有较好的支持。IAL层则支持Linux标准控制台下的GPM鼠标服务、触摸屏、标准键盘等。
MiniGUI下丰富的控件资源也是MiniGUI的特点之一。当前MiniGUI的最新版本是1.6.x。该版本的控件中已经添加了窗口皮肤、工具条等桌面GUI中的高级控件支持。
上图是运用MiniGUI编写的应用程序界面
MiniGUI和MicroWindows均为*软件,但这两个系统的技术路线却有所不同。MiniGUI的策略是建立在比较成熟的图形引擎之上,比如Svgalib和LibGGI,开发的重点在于窗口系统、图形接口之上。而MicroWindows的开发重点则在底层的图形引擎之上,所以可以对裸显示器直接操作,而窗口系统和图形接口方面的功能还稍有欠缺。比如说,MiniGUI有一套用来支持多字符集和多编
码的函数接口,可以支持各种的字符集,包括GB、BIG5、UNI-CODE等,而MicroWindows在多字符支持上尚没有统一接口。