首 页 | 新 闻 | 文 档 | 代 码 | 工 具 | 论 坛

Mp4Tech 首页  >  文 档  >   驱动开发
 
 

嵌入式Linux系统GUI设计分析


摘  要:本文主要对嵌入式Linux系统中的GUI设计进行了分析,并对图形用户界面的概念进行了描述,介绍了当前主要几种GUI软件及其优缺点,并通过实例介绍了Qt/Embedded在嵌入式Linux系统中的应用。
关键词: 嵌入式Linux;GUI; Qt/Embedded
 
图形用户界面概述
l         所谓GUI(Graphics User Interface)就是图形用户界面,是指计算机与其使用者之间的对话接口,是计算机系统的重要组成部分。
一个图形用户界面系统通常由三个基本层次组成,即显示模型、窗口模型和用户模型。用户模型包含了显示和交互的主要特征。图1给出了图形用户界面系统的结构。
桌面管理系统
用户模型
窗口模型
显示模型
操作系统
硬件平台
图1 图形用户界面系统的结构
嵌入式系统的GUI简介
嵌入式GUI就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统。所以嵌入式GUI不但要有GUI的特征,在实际应用中,嵌入式系统对它来说还有如下的基本要求:
l         占用资源少
l         高性能
l         高可靠性
l         可配置
下面,我们将简要介绍集中常见的嵌入式系统的GUI,并对他们的优缺点进行比较。
1)OpenGUI
OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口。它和MiniGUI一样,也是使用LGPL许可证。OpenGUI提供了2维绘图原语,消息驱动的API、BMP文件格式支持。OpenGUI功能强大、使用方便。用户甚至可以实现Borland BGI风格的应用程序,或者是QT风格的窗口。OpenGUI支持鼠标和键盘的事件。在Linux上基于Framebuffer3或者SVGALib4实现绘图。Linux下OpenGUI也支持Mesa3D。颜色模型方面,OpenGUI已经支持8、16、32位模型。
由于其基于汇编实现的内核并利用MMX指令进行了优化,OpenGUI运行速度非常快,可以用UltraFast形容,它支持32位的机器,能够在MS-DOS,QNX5和Linux下运行,主要用来在这些系统中开发图形应用程序和游戏。OpenGUI非常稳定,但可移植性因为其内核使用汇编语言实现会受到影响。
2)MiniGUI
MiniGUI 是 Linux 控制台上运行的,基于 SVGALib 和 LinuxThread6 库的多窗口图形用户界面支持系统。MiniGUI 采用了类 Win32 的 API 接口, 实现了简化的类 Windows 98 风格的图形用户界面。 MiniGUI也是一个窗口系统,他的主要组成元素是窗口,在这个基础上 MiniGUI 中的窗口可以基本分四类,分别为主窗口、对话框、控件和主窗口中的窗片。MiniGUI 中的主窗口和 Windows 应用程序的主窗口概念类似, MiniGUI 中的每个主窗口对应于一个单独的线程,通过函数调用可建立主窗 口以及对应的线程。每个线程有一个消息队列,主窗口从这一消息队列中获取消息并由窗口过程(回调函数)进行处理。 MiniGUI的目标是保持现有小巧的特点,在 Linux 控制台上提供一个小 的窗口系统支持,“小”是MiniGUI的特色。同时MiniGUI又将尽力与微软的 MSWindows API保持兼容。这么定位是希望MiniGUI可以在未来以Linux 为基础的应用平台上提供一个简单可行的 GUI 支持系统,让MiniGUI 可以 应用在 Windows CE 可以应用的任何场合。
3)QT/Embedded
Qt是Trolltech 公司的一个产品,是一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。 自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,KDE是所有主要的Linux发行版的一个标准组件。

Qt/Embedded 是 Trolltech 公司的另一个产品,虽然走Open Source开发路线,采用GPL授权,但商业用的要付费。Qt/Embedded是Qt的嵌入式Linux端口,是完整的自包含C++GUI和基于Linux的嵌入式平台开发工具。大范围的Qt/Embedded API可用于多种开发项目。Qt/Embedded可以开发市场上多种类型的产品和设备,从消费电器(移动电话、联网板和set top盒)到工业控制设备(如医学成像设备、移动信息系统等)。这套环境提供的API和Qt/Windows 与Qt/X11相同,但不需要使用到X11,取而代之的提供从硬件接口、绘图程序库和完整的GUI工具。Qt/Embedded 对存储内存的需求约在800kB到3MB(Intel 下x86)。其另一个特点就是跨平台,用Qt API开发出来的应用程序,可以在不同的操作系统和视窗系统上执行,如图2所示。

Qt视窗环境架构图

图2 Qt视窗环境架构图
综上所述,我们把前面几种GUI进行了对比,如表1所示。
          名称
参数
MiniGUI
OpenGUI
Qt/Embedded
API(完备性)
Win32(很完备)
私有(很完备)
Qt(C++)(很完备)
函数库典型大小
300KB
300KB
600KB
移植性
很好
只支持x86平台
较好
授权条款
LGPL
LGPL
QPL/GPL
系统消耗
最小
最大
操作系统支持
Linux
Linux,DOS,QNX
Linux
表1 常见GUI参数比较
利用Qt/Embedded 进行GUI设计
前面介绍了几种常用的嵌入式GUI软件,现在我们将结合实例,通过使用Qt/Embedded 介绍如何进行GUI设计,以及GUI设计的基本结构和过程。
在本例中,我们采用摩托罗拉龙珠系列开发板MC9328MXL7进行试验,该开发板具有64M SDRAM和32M FLASH。内核基于linux2.4.18,上层应用Qt/Embedded 编写简单的自定义用户图形界面GUI。
首先分析GUI。该GUI程序由Qt/Embedded设计而成,主要由七个模块和一个主程序组成,分别为“首页”模块,“时钟”模块,“电话薄”模块,“俄罗斯方块”模块,“连子棋”模块,“记事本”模块,“移动生活”模块以及main主程序。
(1)“首页”模块主要提供了一个封面图片。
(2)“时钟”模块提供的功能包括时间显示和日期显示。
(3)“电话薄”模块主要提供了一个简单的可记录姓,名,城市,邮件地址的“电话薄”。
(4)“俄罗斯方块”模块提供了一个游戏。
(5)“连子棋”模块提供了一个游戏。
(6)“记事本”模块提供了一个简单的记事本。
(7)“移动生活”模块提供了一个界面框架。

Qt/Embedded GUI软件模块结构图
如图3所示。

图3 Qt/Embedded GUI软件模块结构图
在对将要设计的GUI进行分析后,我们就可以着手进行GUI程序编制。
首先,我们需要建立好硬件开发环境。在这里,我们需要通过串口和usb接口将MC9328MXL开发板(client机)和PC机(主机)相连接。
然后,我们需要在主机上安装软件开发环境,过程如下:
在PC上安装RedHat Linux 9.0 操作系统。
安装arm编译器cross-2.95.38,安装过程如下:
mkdir /root/Chagall
Cp cross-2.95.3.tar /root/Chagall/
Cd /root/Chagall
Tar –xvf cross-2.95.3.tar
Mkdir /usr/local/arm
Cd /usr/local/arm
Ln –s /root/Chagall/2.95.3/ 2.95.3
再安装qt-embedded-free-3.3.2.tar.gz,具体步骤可以参考其readme文件。
然后进行GUI程序编制。(其中包括了一个工程文件tetrix.pro9,各种模块的c和h源程序,以及一个main.c源程序(源程序内容略)。在程序编写完成后,我们通过arm编译器进行交叉编译,将产生的二进制文件通过主机的超级终端下载到开发板上运行。编译和下载运行过程如下:
    编译环境配置
export TMAKEPATH=/qt332/qmake/lib/qws/linux-arm-g++
  export QTDIR=/qt332
由工程文件产生Makefile文件
  /qt332/qmake –o Makefile tetrix.pro
得到Makefile文件
修改Makefile 使之相关内容如下:
  vi Makefile
  cc=/usr/local/arm/2.95.3/bin/arm-linux-gcc
  c++=/usr/local/arm/2.95.3/bin/arm-linux-g++
  IncPATH=/qt332/include
  LINK=/usr/local/arm/2.95.3/bin/arm-linux-g++
  LIBS=/qt332/lib –lm –lqte
  Moc=/qt332/bin/moc
  Uic=/qt332/bin/uic
运行Makefile编译源程序产生二进制可执行程序
Make
得到二进制执行文件tetrix。
最后将该二进制文件下载到开发板上运行。
综上所述,我们简单的通过Qt/Embedded 了解了嵌入式GUI的设计过程,并对Qt/Embedded有了初步的认识。
结束语
本文着眼于嵌入式Linux环境下的图形用户界面技术,主要介绍了当前嵌入式Linux系统的GUI设计,并比较了常见的集中嵌入式Linux系统GUI开发软件的优缺点,最后通过对Qt/Embedded的使用,了解了GUI设计的步骤。同时,嵌入式Linux系统在自由软件社区和众多开发商的推助下,已经取得了长足的发展。同样,作为底层支持的GUI系统来讲,各种嵌入式的Linux的GUI开发也非常活跃。总而言之,嵌入式系统的GUI开发正处于一个开始的阶段,在这个领域,有许多技术难题等待人们来解决。
参考书目:
1  邹思轶. 嵌入式Linux设计与应用 .清华大学出版社 ,2001-12
2 李善平,刘文峰, 王焕龙等 .Linux与嵌入式系统.清华大学出版社,2003-01-01
3 飞漫软件, miniGUI技术白皮书 , 2004-09-21
4 飞漫软件 MiniGUI 用户手册  V1.3-1
5 候业勤等编译.分布式嵌入式实时操作系统QNX.宇航出版社,1999
6 魏永明. 基于Linux 和 MiniGUI 的嵌入式系统软件开发指南. www-900.ibm.com 2001-11
7 王祖林等 .新一代嵌入式微处理器——龙珠I.MX结构及应用基础.北京航空航天大学出版社,  2004-4-1
8 探矽工作室.嵌入式系统开发圣经(第二版).中国铁道出版社, 2003-05-01
9 Trolltech  Qt /E Whitepaper www.trolltech.com 2001

 


联系我们
便携式多媒体技术中心
All Rights Reserved