1、引言
近年来,随着信息家电、手持设备、无线设备的迅速发展,人们对嵌入式系统的需求逐渐增多,要求也越来越高。这使为嵌入式系统提供一个友好方便、稳定可靠的G UI系统成为非常紧迫要求[5]。嵌入式技术是当前微电子与计算机技术中的一个重要分支[1], 它是指以应用为中心, 以计算机技术为基础,软件、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等的严格要求的专用计算机系统[2]。常用的PC机上的GU I因嵌入式设备对资源的严格要求显得过于庞大,而不适合嵌入式系统[6]。与普通环境下的GUI 系统相比较.嵌入式环境下的GUI 系统要求轻型、占用资源少、高性能、高可靠性、可配置等。同时,由于嵌入式环境的多样性,跨平台、高移植性也是嵌入式GUI系统必须具备的特点。
尽管嵌入式系统对GUI 的需求越来越明显,但目前GUI的实现方法各有不同,主要有二种; 第一种方法是某些大型厂商针对自身需要自主开发满足自身需要的GUI 系统;第二种方法是某些厂商使用某些比较成熟的GUI系统。对于大部分厂商来说,第二种方法不失为一个省时省力、又可取得较好效果的方法。
2 GUI 系统发展概况
目前国内外已经推出了很多基于Linux的GUI产品, 比较成熟的面向嵌入式的GUI 系统有QtEmbedded 、MicroWindows 、MiniGUI 、WinCE 等[4]。
1)Microwindows 是一个公开源码(LGPL)的项目。它致力于为一些小型的设备和平台提供现代图形窗口环境的一些特性,其主要特色是一个基于客户/服务器体系结构的GUI 系统,采用了面向硬功件的驱动程序层、对硬件的接口层、向高层操作系统的API 层的三层体系结构。并提供了相对完善的图形功能, 以及一些其他较高级的功能,比如Alpha 混合、三维支持、TrueType 字体支持等。但是有如下缺点:无任何硬件加速能力,图形引擎中存在许多低效算法,且代码质量较差。
2)MiniGUI是在Linux 控制台上运行的,基于SVGALib 和LinuxThread 库的多窗口图形用户界面支持系统。主要特色是基于线程来编写,所有的应用研究程序都运行在同一个地址空间,这样可以提高系统的效率。底层增加了图形抽象层GAL 和基于输入设备的输入抽象层作为提供底层Linux 控制台或者XWindow 上的图形接口以及输入接口。但是API没有封装,不便移植,功能限制其不能用于更大的嵌入式系统。
3)Qt/Embedded 是著名的Qt库开发商Trolltech 公司开发的,是一个专门为嵌入式系统设计的图形用户界面工具包。它的主要特点是可移植到不同平台上、拥有自己的窗口系统、拥有自己强大的开发工具和编程接口、提供压缩字体格式、支持Unicode, 可以轻松地使程序支持多种语言。但是Qt/Embedded 不是免费的,使用者必须支持license 费用。
4)OpenGL 采用LGPL 条款发布。OpenGUI 比较适合于基于x86 平台的实时系统,基于汇编实现的内核,并利用MMX 指令进行了优化使其运行速度快,但可移植性稍差。
这几种GUI 的设计目标仍然是通用性,它们大多支持多窗口的随意切换、覆盖,以及可移动、可动态改变尺寸的窗口,诸如此类在多数嵌入式应用中几乎永远用不到的特性,使得应用程序的开发要考虑很多不必要的细节[5]。
以上的嵌入式GUI 系统已很成熟,但是对于一些需求自主开发轻型、功能简洁、专用性强GUI 系统的用户来说,以上的产品并不是一个很好的选择。以上的GUI 系统一部分是收费的商业产品,另外是通用的GUI功能系统,对硬件资源非常看重的嵌入式系统来说,多余无用的功能浪费硬件资源绝不是好的选择。本文针对开发小型专用的嵌入式GUI 系统进行了研究,实现专用的GUI 系统的开发。
3 轻量级GUI 的设计与实现嵌入式GUI 系统采取分层设计的结构,对不同层次进行封装。在最低层建立了硬件抽象层(HAL,Hard Abstract Layer),为基于图形显示设备(如VGA 卡)的图形抽象层(Graphic Abstract Layer,GAL)和基于输入设备(如键盘、触摸屏等)的输入抽象层(Input Abstract Layer,IAL) 。图形抽象层GAL 建立在各种流行的绘图引擎之上,屏蔽各种绘图引擎的具体实现,对上层提供统一的底层绘图接口。输入抽象层IAL建立在各硬件设备驱动程序之上,屏蔽各种不同的输入设备硬件实现,对上层提供统一的应用输入接口;图形引擎通过FrameBuffer 来获得,而输入设备的处理却没有统一的接口。在PC上,通常使用键盘和鼠标,而在嵌入式系统上, 可能只有触摸屏或为数不多的几个键,在这种情况下,提供一个抽象输入层就显得格外重要。图形设备接口(GDI,Ggraphic Device Interface) 建立在图形抽象层之上,主要包括点、线、面、文本、的绘制等功能。图形用户接口及相关API则建立在图形设备接口之上,实现消息队列、窗口、控件以及应用程序管理等各种功能。系统的层次结构如图1所示。
3.1 嵌入式LIGHT GUI系统层次结构