在嵌入式系统领域有不少GUI系统如QNX Photon MicroGUI等可是具体到嵌入式Linux领域又有哪些可供选择的GUI系统呢?
在嵌入式环境底下GUI系统的整体构架跟PC Desktop相去不远例如绘图函数库字型事件处理等也都是嵌入式GUI系统所要面临的但是嵌入式系统本身由于体积小资源少的特点所以在整体设计上必须较为严谨必须考虑的条件更多有时很像又回到了Dos下编制程序的年代对于软件所占的存储量有时可以说是锱铢必较
Unix环境下的图形视窗标准为X Window System(以下简称X标准)Linux是类Unix系统所以顶层运行的GUI系统是兼容X标准的XFree系统X标准大致可以划分X ServerGraphic Library(底层绘图函数库)ToolkitsWindow ManagerInternationalization(IN)等几大部分(详细内容见链接)
笔者认为虽然X架构不错但却不怎么适用于嵌入式环境因为实际工作起来实在太过于庞大因此许多嵌入式Linux GUI系统会把上述几点合并甚至全部绑到一起当然这样同时也会失去很多弹性与扩展功能但为了适应于嵌入式系统这也是一个解决问题的方法本文下面就介绍一下现存的主流嵌入式Linux下GUI解决方案
主流解决方案介绍
Qt/Embedded
Qt是Trolltech这家商业公司所开发的一个跨平台FrameWork环境在X环境下可以看作是一套功能完整的用户界面工具包它采用类似C++的语法并且具备物件导向功能跨平台的特性可以让使用Qt编写的软件在Microsoft Windows // Microsoft Windows NTMacOS XLinuxSolarisHPUXTru (Digital UNIX)IrixFreeBSDBSD/OSSCOAIX等许多平台上执行虽然是商业公司的产品但是Qt走的却是开源路线并遵循同样的游戏规则提供免费下载全部都是开放源代码非商业用途亦采用GPL的版权宣告着名的Open Source KDE 项目便是采用Qt所开发的
Trolltech也针对嵌入式环境推出了Qt/Embedded产品与桌面版本不同Qt/Embedded已经直接取代掉X Server及X Library等角色所有的功能全部整合在一起
Qt/Embedded 同样具有跨平台的特点省掉了不少移植软件的功夫这样的概念和Java十分接近同时它还采用模块化设计其最大的好处是有弹性 Qt/Embedded号称最小可以缩到Kb左右最多可以长到Mb(for Intel x)这样的弹性也让Qt/Embedded更适合在嵌入式环境下生存
图 QPE的主界面另外Trolltech公司还推出了针对PDA软件的整体解决方案QPE(Qt Plamtop Environment)它从底层的GUI系统Window MangerSoft Keyboard到上层的PIM浏览器多媒体等全部都考虑进去了其主界面如图所示 内部包括地址簿计算器世界时间时间设置记事本终端文件浏览器帮助媒体播放器图像浏览器文本编辑器等
相对其他GUI来说 Qt/Embedded 应该说是肥美型的产品功能丰富但能消化它的东西只能是高端产品MB内存是运行它的最小要求因此如果开发的产品不是高端的信息终端类产品不应优先考虑 Qt/Embedded
GtkFB
自从Qt推出了嵌入式版本之后虽然GTK+并非商业公司所发展但也加紧脚步推出了GtkFB方案其宗旨就是要为嵌入式系统推出一套基于GTK+的GUI解决方案与Qt/Embedded类似GtkFB也跳过X层直接与FrameBuffer沟通因此也具有Qt/Embedded的几项优点不过由于不是商业软件在发展的速度上较为缓慢
Microwindows
Microwindows Open Source Project成立的宗旨在于针对体积小的装置建立一套先进的视窗环境在Linux桌面上通过交叉编译可以很容易地制作出microwindows的程序MicroWindows能够在没有任何操作系统或其他图形系统的支持下运行它能对裸显示设备进行直接操作这样MicroWindows就显得十分小巧便于移植到各种硬件和软件系统上
然而MicroWindows 的免费版本进展一直很慢几乎处于停顿状态而且至今为止国内没有任何一家专业对 MicroWindows 提供全面技术支持服务和担保的公司
MiniGUI
图 MiniGUI应用程序截图MiniGUI是中国人做得比较好的自由软件之一它是在Linux控制台上运行的多窗口图形操作系统可以在以Linux为基础的应用平台上提供一个简单可行的MiniGUI支持系统小是MiniGUI的特色MiniGUI可以应用在电视机顶盒实时控制系统掌上电脑等诸多场合由于这是由中国人自己开发的GUI系统所以MiniGUI对于中文的支持最好它支持GB与BIG字元集其他字元集也可以轻松加入界面如图所示
Pure X架构
Tiny X Server是XFree Project的一部分由Keith Pachard先生所发展而他本身就是XFree专案的核心成员之一一般的X Server都太过于庞大因此Keith Packard就以XFree为基础精简了不少东西而成Tiny X Server它的体积可以小到几百Kb而已非常适合应用于嵌入式环境
以纯X Window System搭配Tiny X Server架构来说最大的优点就是弹性与开发速度因为与桌面的X架构相同因此相对于很多以QtGTK+FLTK等开发的软件可以很容易地移植上来
虽然移植方便但是却有体积大的缺点由于很多软件本来是针对桌面环境开发的因此无形之中具备了桌面环境中很多复杂的功能因此调校变成采用此架构最大的课题有时候重新改写都可能比调校所需的时间还短
OpenGUI
OpenGUI在Linux系统上已经存在很长时间了最初的名字叫FastGL只支持色的线性显存模式但目前也支持其他显示模式并且支持多种操作系统平台比如MS
DOSQNX和Linux等不过目前只支持x硬件平台OpenGUI分为三层: 最低层是由汇编语言编写的快速图形引擎中间层提供了图形绘制API包括线条矩形圆弧等并且兼容Borland的BGIAPI第三层用C++编写提供了完整的GUI对象库
OpenGUI采用LGPL条款发布OpenGUI比较适合于基于x平台的实时系统跨平台的可移植性较差目前发展较慢
一点建议
综合上述GUI解决方案各方面的性能归结起来有在国内有四种GUI较为适用笔者对其做出推荐
. OpenGUI
由于基于汇编实现内核并利用MMX指令进行了优化OpenGUI运行速度非常快它支持位的机器能够在多种操作系统下运行主要用来在这些系统中开发图形应用程序和游戏由于历史悠久OpenGUI非常稳定但是由于其内核用汇编语言实现其内部使用的是私有的API所以其可移植性较差可配置性也较差
. Qt/Embedded
这个版本的主要特点是可移植性较好因为Qt是KDE等项目使用的GUI支持库所以许多基于Qt的X Window程序可以非常方便地移植到Qt/Embedded版本上因此自从Qt/Embedded以GPL条款发布以来就有大量的嵌入式Linux开发商转到了Qt/Embedded系统上如韩国的Mizi公司但是由于它是基于C++类库的所以和其他GUI相比系统消耗资源较大因此说Qt/Embedded是肥美型的产品功能丰富一般用于手持式高端信息产品
. MiniGUI和MicroWindows的比较
MiniGUI和MicroWindows均为自由软件但这两个系统的技术路线却有所不同MiniGUI的策略是建立在比较成熟的图形引擎之上比如Svgalib和LibGGI开发的重点在于窗口系统图形接口之上而MicroWindows的开发重点则在底层的图形引擎之上所以可以对裸显示器直接操作而窗口系统和图形接口方面的功能还稍有欠缺比如说MiniGUI有一套用来支持多字符集和多编码的函数接口可以支持各种的字符集包括GBBIGUNICODE等而MicroWindows在多字符支持上尚没有统一接口
链接
X Window System的分层架构
● X Server
X Window System架构上有一项特点是别的GUI系统所没有的这个特点就是Client/Server架构注意这里和一般我们所熟知的某某服务器(Server端)跟PC端(Client端)相连接的情形是不同的惟一类似的是X Window System本身也是采用网路架构设计具体而简单一点的说明就是X Client可以看作我们在X上执行的软件X Server则是负责显示及传递使用者输入事件(包括键盘鼠标等硬件装置的输入)
● Graphic Library
我们可以把一幅图案想象成有成千上万个细微小点所组成这种小点的单位通常为pixel在同一平方单位里这些小点数越高图案就越清晰画质就越好也就是说分辨率或解析率高事实上我们要设计的视窗当然不可能是这样一点一点地画上去的这样太过浪费时间基于这种观念我们就设计出高阶一点的函数来帮助我们解决这个繁琐的步骤例如各类视窗编程里用到的画点画线画矩形画圆形画不规则形上色等函数透过这些函数是的程序设计者不用去管画一条线要几个点以及如何让显示器显示等林林总总低阶的工作我们称绘图相关的一组函数库为GUI的基本Graphic Library
● Toolkits
有了点线面的函数之后虽然已经去除了大半的重复无聊工作但是就开发视窗程序来说还是显得非常没有效率怎么办呢?只有继续将构成视窗的抽象元件如按钮卷轴组合