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,最先到http://www.gtk.org/download下载如下的包:pkg-config、glib2.x;atk、pango、DirectFB、gtk+2.x。其次到http://www.eclipse.org/download下载swt.tgr.gz。
下一步就是在/home/XXX/目录下建立 SWT 和GTK两个目录并且配置环境变量。如下:
ewindows xp ort SWT_HOME=/home/XXX/SWT
ewindows xp ort SWT_HOME=/home/XXX/GTK
ewindows xp ort PKG_CONFIG_PATH=$GTK_HOME /lib/pkgconfig
ewindows xp ort 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也必须是可定制的。