嵌入式linux系统开发概述之六----图形用户界面(GUI)

2019-07-12 14:23发布

  6  图形用户界面(GUI)     从用户的观点来看,图形用户界面(GUI)是系统的一个最至关重要的方面:用户通过GUI与系统进行交互。所以GUI应该易于使用并且非常可靠。但它还需要是有内存意识的,以便在内存受限的、微型嵌入式设备上可以无缝执行。所以,它应该是轻量级的,并且能够快速装入。
    另一个要考虑的重要方面涉及许可证问题。一些GUI分发版具有允许免费使用的许可证,甚至在一些商业产品中也是如此。另一些许可证要求如果想将GUI合并入项目中则要支付版税。 尽管嵌入式系统对GUI的需求越来越明显,但目前 GUI 的实现方法各有不同: 1.某些大型厂商有能力自己开发满足自身需要的GUI系统; 
2.某些厂商没有将GUI作为一个软件层从应用程序中剥离,GUI的支持逻辑由应用程序自己负责; 
3.采用某些比较成熟的GUI系统,比如XFree86或者其他。
在上述手段中,第2种方法是一种临时解决方案。利用这种手段编写的程序,无法将显示逻辑和数据处理逻辑划分开来,从而导致程序结构不好,不便于调试,并导致大量的代码重复。GUI是一种类似于操作系统的基础软件,这种软件系统应该遵循一定的标准,并且应该是开放源码的自由软件,从而可以让开放商集中精力开发自己的应用程序。目前看来,在linux之上进行(实时)嵌入式系统开发的厂商,一般选择如下几种GUI系统:紧缩的XFree86系统(Tiny-X)、MiniGUI、MicroWindows(Nano-X)、OpenGUI、QT/Embedded 等,下面将对这些系统进行简单介绍。   6.1 紧缩的XFree86系统(Tiny-X)     XFree86 Project, Inc.是一家生产XFree86的公司,该产品是一个可以免费重复分发、开放源码的X Windows系统。X Windows系统(X11)为应用程序以图形方式进行显示提供了资源,并且它是UNIX和类UNIX的机器上最常用的窗口系统。它很小但很有效,它运行在为数众多的硬件上,它对网络透明并且有良好的文档说明。X11为窗口管理、事件处理、同步和客户机间通信提供强大的功能 — 并且大多数开发人员已经熟悉了它的API。它具有对内核帧缓冲区的内置支持,并占用非常少的资源 — 这非常有助于内存相对较少的设备。X服务器支持VGA和非VGA图形卡,它对颜 {MOD}深度12481632提供支持,并对渲染提供内置支持。
    它的优点包括:
帧缓冲区体系结构的使用提高了性能;
占用的资源相对很小 — 大小在600K700K字节的范围内,这使它很容易在小型设备上运行;
非常好的支持:在线有许多文档可用,还有许多专用于XFree86开发的邮递列表;
X API
非常适合扩展。
它的缺点包括:
比最近出现的嵌入式 GUI 工具性能差。 
此外,当与 GUI 中最新的开发 — 象专门为嵌入式环境设计的 Nano-X  QT/Embedded — 相比时,XFree86似乎需要更多的内存。   6.2 Microwindows(Nano-X)
    Microwindows  Century Software的开放源代码项目,设计用于带小型显示单元的微型设备。它有许多针对现代图形视窗环境的功能部件。象X样,有多种平台支持Microwindows     Microwindows 体系结构是基于客户机/服务器的并且具有分层设计。最底层是屏幕和输入设备驱动程序(关于键盘或鼠标)来与实际硬件交互。在中间层,可移植的图形引擎提供对线的绘制、区域的填充、多边形、裁剪以及颜 {MOD}模型的支持。在最上层,Microwindows支持两种APIWin32/WinCE API实现,称为Microwindows;另一种APIGDK非常相似,它称为Nano-XNano-X用在linux 上。它是象XAPI,用于占用资源少的应用程序。     Microwindows支持128bpp(每像素的位数)的palletized显示,以及 8162432bpp的真彩 {MOD}显。Microwindows还支持使它速度更快的帧缓冲区。Nano-X服务器占用的资源大约在100K150K字节。原始Nano-X应用程序的平均大小在30K60K。由于Nano-X是为有内存限制的低端设备设计的,所以它不象X那样支持很多函数,因此它实际上不能作为微型XXfree86)的替代品。     可以在Microwindows上运行FLNX,它是针对Nano-X而不是X进行修改的 FLTK(快速轻巧工具箱(Fast Light Toolkit))应用程序开发环境的一个版本。本章将在后面描述FLTK
    Nano-X 
的优点包括:
Xlib实现不同,Nano-X仍在每个客户机上同步运行,这意味着一旦发送了客户机请求包,服务器在为另一个客户机提供服务之前一直等待,直到整个包都到达为止。这使服务器代码非常简单,而运行的速度仍非常快
占用很小的资源

    Nano-X 
的缺点包括:
联网功能部件至今没有经过适当地调整(特别是网络透明性)
还没有太多现成的应用程序可用
X相比,Nano-X虽然近来正在加速开发,但仍没有那么多文档说明而且没有很好的支持,但这种情形应该会有所改变。   6.3 OpenGUI OpenGUI在linux系统上存在已经很长时间了。最初的名字叫FastGL,只支持 256的线性显存模式。但目前也支持其他显示模式。这个库是用C++编写的,只提供 C++ 接口。   6.4 Qt/Embedded
    Qt/Embedded
Trolltech新开发的用于嵌入式linux的图形用户界面系统。Trolltech最初创建Qt作为跨平台的开发工具用于linux台式机。它支持各种有UNIX特点的系统以及Microsoft WindowsKDE — 最流行的linux 面环境之一,就是用Qt编写的。     Qt/Embedded以原始Qt为基础,并做了许多出 {MOD}的调整以适用于嵌入式环境。Qt Embedded通过Qt APIlinux I/O设施直接交互。那些熟悉并已适应了面向对象编程的人员将发现它是一个理想环境。而且,面向对象的体系结构使代码结构化、可重用并且运行快速。与其它GUI相比,QtGUI非常快,并且它没有分层,这使得Qt/Embedded成为用于运行基于Qt的程序的最紧凑环境。     Trolltech还推出了Qt掌上机环境(Qt Palmtop Environment,俗称Qpe)。Qpe提供了一个基本桌面窗口,并且该环境为开发提供了一个易于使用的界面。Qpe包含全套的个人信息管理(Personal Information Management (PIM))应用程序、因特网客户机、实用程序等等。然而,为了将Qt/EmbeddedQpe集成到一个产品中,需要从Trolltech获得商业许可证。(原始Qt自版本 2.2以后就可以根据 GPL 获得 。)     它的优点包括: 面向对象的体系结构有助于更快地执行  占用很少的资源,大约800K 抗锯齿文本和混合视频的象素映射 它的缺点是: Qt/EmbeddedQpe只能在获得商业许可证的情况下才能使用。   6.5 MiniGUI 简介     MiniGUI是近几年国人自己开发的一种面向嵌入式系统或者实时系统的图形用户界面支持系统。当初设计的初衷是面向工业领域这类资源存储比较紧张又需要快速响应的场合。它主要运行于linux控制台,实际可以运行在任何一种具有POSIX线程支持的POSIX兼容系统上。MiniGUI刚诞生时是免费的,现在也需要购买商业许可证。     MiniGUI的优点包括: 小巧,包含全部功能的库文件大小为300k左右; 运行速度快; 可根据项目需求进行定知和配置。 MiniGUI的缺点有: 控件制作比较粗糙; 需要商业许可证。   6.6  图形化的开发工具FLTK     FLTK是一个简单但灵活的GUI工具箱,它在linux世界中赢得越来越多的关注,它特别适用于占用资源很少的环境。它提供了您期望GUI工具箱中获得的大多数窗口构件,如按钮、对话框、文本框以及出 {MOD}的“赋值器”选择(用于输入数值的窗口构件)。还包括滑动器、滚动条、刻度盘和其它一些构件。
    针对 Microwindows GUI引擎的FLTK linux版本被称为FLNXFLNX由两个组件构成:Fl_WidgetFLUIDFl_Widget由所有基本窗口构件API组成。FLUID(快速轻巧的用户界面设计器(Fast Light User Interface Designer, FLUID))是用来产生FLTK源代码的图形编辑器。总的来说,FLNX是能用来为嵌入式环境创建应用程序的一个出 {MOD}的UI构建器。
    Fl_Widget占用的资源大约是40K48K,而FLUID(包括了每个窗口构件)大约占用380K。这些非常小的资源占用率使Fl_WidgetFLUID在嵌入式开发世界中非常受欢迎。
优点包括:
习惯于在象Windows这样已建立得较好的环境中开发基于GUI的应用程序的任何人都会非常容易地适应FLTK环境;
它的文档包括一本十分完整且编写良好的手册;
它使用LGPL进行分发,所以开发人员可以灵活地发放他们应用程序的许可证;
FLTK
是一个C++库(PerlPython绑定也可用)。面向对象模型的选择是一个好的选择,因为大多数现代GUI环境都是面向对象的;这也使将编写的应用程序移植到类似的API中变得更容易; 
Century Software
的环境提供了几个有用的工具,诸如ScreenToPViewML浏览器。

它的缺点是:
普通的FLTK可以与XWindows API一同工作,而FLNX不能。它与X的不兼容性阻碍了它在许多项目中的使用。
    嵌入式linux开发正如火如荼迅速发展着。作为一个开发者,每天都会接触到各种新鲜的软件的知识,必须不断地从中学习,丰富自己的知识,拓展自己的眼界。在开发过程中,从引导装载程序和分发版到文件系统和GUI的每一个事物的各种选项中作出选择。Linux上的嵌入式开发已经达到了新的境界,并且调整模块以适合您的规范从未比现在更简单。这已经导致出现了许多时新的手持和微型设备作为开放盒,这是件好事 — 因为事实是您不必成为一个专家从这些模块中进行选择来调整您的设备以满足您自己的要求和需要。     我们希望以上对嵌入式linux领域的介绍性概述能激起您进行试验的欲望,并且希望您将体会摆弄微型设备的乐趣以满足您的爱好。就从现在开始。