随着 Internet 与网络的迅速发展并向家庭领域不断扩展,使消费电子、计算机、通信(3C)一体化趋势日趋明显,嵌入式系统再度成为研究与应用的热点。嵌入式实时 Linux 操作系统以价格低廉、功能强大又易于移植而正在被广泛采用,成为新兴的力量,如今随着 WAP 手机、PDA、机顶盒、及 DVD/VCD 播放机已经迅速普及,用户对这些手持式设备的 GUI 提出了更高的要求,希望能看到像 PC 机才拥有的华丽美观的 GUI。GUI 已经成为了人与机器沟通的桥梁,嵌入式系统对 GUI 的需求越来越高,而这一切均要求有一个轻型、占用资源少、高性能、高可靠、可配置及美观的 GUI 支持。
 
1 Java 的图形界面工具
Java 技术对于服务器,个人电脑和嵌入式系统来说是一项伟大的技术。由于其具有跨平台等特性。Java 在服务器和桌面电脑方面的应用是非常成功的。然而在 GUI 方面,Java 只用非常有限的一些特征去构建图形用户界面。其思想就是采用平台无关的 Java 应用程序接口打包到不同的操作系统来开发本地图形用户界面,被称之为抽象的窗口工具(AWT)。仅有普通的部件如文件域、文本区、选择框、单选按钮、列表框和按钮被 AWT 支持,图形和图像的特性支持非常有限,也就是说,只足够构建简单的 applet 程序。
认识到需要更高级的图形用户界面组件和图形能力,Sun 公司开发了 Swing,Java 2D,Java3D,图像的输入 / 输出,以及 Java 高级图像(JAI)。Swing 是用来构建 Java 图形界面的标准 API(应用程序接口),一些 AWT 类由 Swing 基础而来。它有一套完全的组件从按钮到文件域、表格、树型和文件编辑器。这些组件不依赖于操作系统本地的部件,而是用原始的图形像直线、矩形、文字画出。这种画代表感观插件,它能够模仿本地的感观。SWT 是基于 Java 开发的,它的设计理念是最大化了操作系统的图形构件的 API,就是说只要操作系统提供了相应图形的构件,那么 SWT 只是简单应用 JNI 技术调用它们,只有那些操作系统中不提供的构件,SWT 才自己去做一个模拟的实现。另外 SWT 还提供对操作系统本地图形用户界面的直接访问,因此,基于 SWT 的 Java 应用程序拥有本地的图形用户界面并且可以和本地别的应用程序和部件集成在一起。使用 SWT 开发包,简单、跨平台、可靠等这些 Jaya 语言本身所具有的优点正渐渐融合到图形界面的应用程序开发中去。Java 语言的另一扇成功之门正在逐渐打开。
 
 
2 SWT+GtkFB 图形系统的体系结构
2.1 SWT+GtkFB 图形系统的体系结构
 
2.1.1 SWT
SWT 处于体系机构的最上层,它与 Java 内的 AwT 和 Swing 同属于设计图形界面所需的高级函数库。而且 SWT 针对 AWT 以及 Swing 的一些问题作了改善,如今它已发展成一套与作业系统无关的图形元件函数库。在元件的产生方面采用了适当的模拟,在基本的元件方面是采用原有作业系统的,对于较复杂的元件才用仿真的技术。基于 SWT 的 Java 应用程序拥有本地的图形用户界面,并且可以和本地别的应用程序,以及部件集成在一起。
 
SWT 是基于 Java 语言开发出来的高级图形元件库,如图 2 所示 SWT 在 Java 端通过 JNI(Java Native InteRFace)技术直接调用 native 端的 GtkFB 来使用操作系统的资源,JNI 技术使得 SWT 程序可以与其他语言编写的 Native 端的代码互相协作,将它们整合在一起;另一方面可使运行在 JVM(JAava 虚拟机)中的 SWT 代码调用 GtkFB 库函数或其他程序;此外利用 InvocatiON API,可将 Java 虚拟机嵌入到 native 端的应用中。JNI 这个接口是双向的,相当于桥梁和纽带,它将 SWT 代码和 native 端的 GtkFB 代码连接起来。
 
 
2.1.2 Gtk 库
 
如图 1 所示,GTK 会用到几个连接库,如基本数据类型用的 Glib 库,它是由基础类、核心应用支持类、实用功能类、数据类和对象系统类五个部分组成的。
 
Pango 是用于国际化文本的布局和显示的全功能框架。Pango 可以处理以非从左到右方向排列的文本,并且可以容易地管理复杂语言,甚至还可以处理根据使用环境而采用不同形式的信函。例如它支持双向文本,用户可以将从左到右的文本和从右到左的文本混合编排;还可有用于确定各种复杂文本(如阿拉伯语和泰米尔语)形状的插件。Pango 不仅仅是国际化,而且 Pango 库在 Xft 和 XRender 的支持下能很好地处理抗锯齿字体文本的显示。
 
Pango 还支持各种图形格式如 libpng,libjpeg,libtiff 和 Framebuffer port 用的 FreeType 等。实际上 GTK 提供 gdk-pixbuf,gdk 和 gtk 三个连接库,其中 Gdk-pixbuf 让我们可做相关的图像工作,gdk 是窗口绘图系统的抽象层,framebuffer 相关的工作大部分在此完成,而 gtk 则是高层的应用程序接口。
 
 
Atk(Accessibility Toolkit)可访问性工具箱。GTK 充分利用 ATK 使残障人士(如视力低下或行动不便)与 GTK 应用程序交互成为可能。
 
2.1.3 GtkFB 的工作原理
 
DirectFB 访问图形硬件设备依赖于操作系统提供的内核接口,即帧缓冲设备(FrameBuffer)。
FrameBuffer 实际上是用一块硬件来做显卡和软件之间的桥梁,Linux 的内核将其开放出来,使用户的程序可以通过块内存来存取显卡。例如设定显示分辨率和色彩数、存取显示内存区等。不同的 Linux 需要提供针对不同显示硬件 FrameBuffer 的驱动程序,这就是说 DirectFB 需要运行于 FramBuffer 之上,然而 Linux 内核提供了常见芯片的 FrameBuffer 驱动。
 
当一个应用程序连接到 GtkFB 时会调用 gtk_init(),如图 3 所示,此时 GtkFB 启动 Linux 的 Framebiffer,设定分辨率和色彩数,接下来打开键盘和鼠标等外设(PDA 打开按键和触控屏幕). 然后到特定目录去读取字型,最后对窗口和事件管理作初始化操作。GtkFB 可以支持 8、16、24、32bpp 的 framebuffer。
 
为了执行一个特定的图形操作,DirectFB 芯片驱动程序将访问图形设备内存映射的 I/O 端口,并且把命令传递到图形设备卡的加速引擎。实际的硬件加速是完全在用户空间内完成的。
 
2.2 SWT+GtkFB 图形系统的优点
 
2.2.1 内存消耗小、运行速度快特别适合嵌入式产品
 
由于 GtkFB 直接运行在 FrameBufer 之上,跳过 X 系统,这样省下了 X Server 这一部分资源,这使得在内存消耗、运行速度上得到显著提高。另外采用的 JNI 技术使得程序运行速度、事件的响应有较高的提高,能满足时间要求较为严格的实时应用场合。
 
2.2.2 系统稳定性好
 
SWT 的稳定性,关键是源于 SWT 的设计理念。SWT 最大化了操作系统的图形构件 API,就是说只要操作系统提供了相应图形的构件,那么 SWT 只是应用 JNI 技术调用它们,只有那些操作系统中不提供的构件,SWT 才自己去做一个模拟的实现。可以看出 SWT 性能上的稳定很大程度上取决于相应操作系统图形构件的稳定性。
 
2.2.3 易于移植和共享
 
SWT 的 API 和桌面版完全相同,因而代码可以很容易地在桌面和嵌入式设备之间移植与共享。
 
2.2.4 小巧可配置
 
SWT 采用了 LGPL 授权方式,用户可以自由地甚至是鼓励修改源代码使其更加满足用户的需求,很容易根据用户的需求来裁减特定的 SWT+GtkFB,依据 LGPL 许可证,用户需要公布修改的源代码,但用户不必公布自给应用程序的源代码。
 
2.2.5 易于开发
 
SWT 是基于 Java 语言开发的,具有平台独立性、面向对象、可移植、安全等 Java 语言所拥有特点。用户可以很容易的基于 SWT 提供的 Widget(构件)开发出满足自己需要的 Widget,而且很容易地使用这些 Widget 去构建应用程序。
 

 

3 SWT+GtkFB 图形系统的实现
3.1 前期准备
 
在 Linux 编译和安装 SWT+GtkFB,首先到 https://www.gtk.org/download 下载如下的包:pkg-config、glib2.x;atk、pango、DirectFB、gtk+2.x。其次到 https://www.eclipse.org/download 下载 swt.tgr.gz。
 
下一步就是在 /home/XXX/ 目录下创建 SWT 和 GTK 两个目录并且设置环境变量。如下:
 
export SWT_HOME=/home/XXX/SWTexport SWT_HOME=/home/XXX/GTKexport PKG_CONFIG_PATH=$GTK_HOME /lib/pkgconfigexport LD_LIBRARY_PATH=$GTK_HOME/lib;$LD_LIBRARY_PATH 此外增加“/home/XXX/GTK/bin”到系统的环境变量 PATH 下。
 
3.2 编译和安装 Gtk+2.0
 
3.2.1 编译和安装 pkg-config
 
tar zxvf glib-2.0.6.tar.gz -C $GTK_HOME/src
 
cd $GTK HOME/src/glib-2.0.6
 
。/configure --prefix=$GTK_HOME
 
make
 
make inSTall
 
3.2.2 编译和安装 atk
 
tar zxvf atk-1.0.1.tar.gz -C $GTK_HOME/src
 
cd $GTK_HOME/src/atk-1.0.1
 
。/configure --prefix=$GTK_HOME
 
make
 
make install
 
3.2.3 编译和安装 pango、Direct FB、gtk+2.0 、swt-forgtk2.2
 
步骤类似 atk 的安装。
 
4 嵌入式 Linux GUI 的应用前景展望
嵌入式 Linux GUI 的应用领域很多,既可以用于家电市场,还可以用于商业市场、工业及自动化市场、国防市场、通讯市场等。例如,在通讯市场,手机、可视电话、机顶盒等可能成为嵌入式 Linu.x 的运行平台,一个人性化的用户界面是赢得消费者关键因素。因此嵌入式 Linux 图形系统将担任着更加重要的角色。
 
未来几年,嵌入式 Linux GUI 将朝以下方向发展:第一,轻型、占用资源少,不希望建立在庞大累赘的、非常消耗系统资源的操作系统和 GUI 之上。第二,高性能、高可靠性,特别是工业实时控制系统,对实时性的要求非常高,并且比起嵌入式系统来说,对 GUI 的要求也更高。第三,可配置,我们必须清楚的意识到,嵌入式系统是一种定制设备,它们对 GUI 的需求各不相同,有的系统只要求一些图形功能,而有些系统要求完备的 GUI 支持,因此,GUI 也必须是可定制的。