admin 管理员组

文章数量: 1086019


2024年12月26日发(作者:alter table 语句与check约束冲突)

维普资讯

第21卷第3期 

2007年9月 

文章编号:1673—8691(2007)03—0201.04 

空军雷达学院学报 

Journal ofAir Force Radar Academy 

Vo1.21 NO.3 

Sep.2007 

嵌入式Linux图形用户界面实现 

颜 晶 ,石绍应 ,汤子跃 

(1.空军雷达学院研究生管理大队,武汉430019;2.空军雷达学院信息与指挥自动化系,武汉430019) 

摘要:针对嵌入式系统核心技术之一一嵌入式图形用户界面,提出了一种通用嵌入式GUI的设计思想 

和体系结构,然后给出了采用SDL- ̄计抽象层和基于消息驱动机制的Client/Server构等关键技术的实现,大 

大提高了嵌入式GUI系统的实时性 

关键词:嵌入式Linux嵌入式图形用户界面:Client/Sever结构 r

中图分类号:TP316 文献标识码:A 

近年来,嵌入式系统在工业控制智能仪表和 

消费电子产品等领域得到了广泛的应用,而Linux 

了嵌入式GUI系统的实时性问题. 

凭借其开放源码、广泛的硬件支持、可定制等优 

点,成为构建嵌入式系统的有力武器.各种嵌入式 

平台存在着巨大的差异性,随着硬件条件的提高, 

1 GUI在嵌入式系统中的层次及体系结构 

从系统的体系结构来看,GUI系统属于应用层 

的软件系统,但通常而言,GUI有别于一个简单的 

图形库,一个GUI系统通常会有自己的应用开发 

模式,从这个意义上讲,GUI系统应该属于中间件 

的范畴.GUI与操作系统、硬件平台和应用程序之 

间的关系如图1所示. 

嵌入式系统对轻量级图形用户界面(Graphic User 

Interface,GUI)的需求会越来越迫切 与一般图形用 

户界面相比较,嵌入式GUI要求体积小、占用资源 

少、高性能、高可靠性、可配置. 

目前国内外已经推出的比较成熟的GUI产品 

包括Qt/Embedded、OpenGUI、MicroWindOWS、Mini— 

GUI等.其中Qt属于商业化的产品,其它属于开源 

软件.从技术角度讲,上述这些GUI都有各自的特 

点和适用领域,但或多或少存在一些缺陷.如Qt/ 

Embedded尽管较为成熟,可移植性较好,但真正在 

1 堡 兰鱼 l 

图1 GUI在应用系统中的工作层次 

商品化产品中使用会面临高昂的授权费用,另外 

它采用的信号和槽机制增加了程序员二次开发的 

难度…;如MicroWidows图形引擎许多算法低效, 

无任何硬件加速能力,窗口处理功能还需进一步 

完善 ;如OpenGUI实现中较多代码采用汇编来 

实现,使得移植非常困难;如MiniGUI存在着对 

多进程支持弱,图形功能不完善,窗口剪切功能不 

完备等问题 J. 

GUI作为中间件建立在用户态,与Linux操作 

系统的接口通过系统调用方式实现,与应用程序 

的接口主要通过API函数共享库.GUI要求实现的 

基本功能是要能在指定的显示设备上显示用户设 

定的图形界面,解析外部输入以实现和图形界面 

的交互,并为应用程序开发者提供兼容Win32 API 

的编程接口以便于应用程序开发和移植.综合以 

上需求,采用以面向对象为主,面向过程为辅的方 

式进行GUI系统设计.GU1分为3层:抽象层、GUI 

核心层和API层 ,5j,其体系结构如图2所示. 

最底层是抽象层,包括基于输入设备的输入 

抽象层IAL(Input Abstract Layer)、基于图形显示设 

备的图形抽象层GAL(Graphic Abstract Layer) ̄N GUI 

在对国内外嵌入式GUI产品进行分析及比较 

的基础上,通过借鉴和继承主流嵌入式GUI系统 

的多层体系结构,研究和完善系统的消息驱动机 

制,本文提出了一种基于消息驱动机制的Clienff 

Server结构来实现嵌入式GUI系统.系统移植实践 

表明,该系统在具有通用性的基础上,较好地解决 

收稿日期 2007—05—14; 修订日期:2007—05—21 

作者简介:颜晶(1981一),男,硕士生,主要从事现代信号处理理论、方法及应用研究 

维普资讯

202 空军雷达学院学报 2007生 

图2 GUI体系结构 

与操作系统的接口模块.IAL实现对各类不同输入 

设备的封装,提供统一的调用接口;GAL完成GUI 

系统对具体显示硬件设备的操作,隐藏各种不同 

显示硬件的技术实现细节,为上一层程序开发提 

供封装后的图形抽象接口;GUI与操作系统的接 

口模块实现GUI系统与嵌入式Linux系统之间的 

系统调用. 

中间层是GUI的核心层,包括核心机制模块、 

资源模块、图形设备接口模块GDI(Graphic Device 

Interface)和标准控件模块.核心机制模块是嵌入式 

GUI最重要的组成部分,包括消息驱动机制,多任 

务进程管理机制、多窗口管理以及套解口通信管 

理;图形设备接口主要功能是支持与设备无关的 

图形操作,主要包括设备上下文操作、基本图形设 

备接口对象操作(包括画笔、画刷、字体、位图、区 

域、填充等),还有映射模式、背景模式、光栅模式; 

资源模块提供字体和常用图片格式的读取和解析; 

标准控件模块提供预先定义的一些控件类,以确 

保一致的人机操作界面. 

最上层是API层,提供操作各种GUI对象的 

应用编程接口. 

2关键技术及其实现 

嵌入式产品是高度个性化的,其外观与用户 

交互的界面也是千差万别的,嵌入式GUI系统与 

其面向的应用领域有密切关系,在嵌入式GUI系 

统开发中主要要考虑的问题有3个方面: 

(1)选择嵌入式GUI系统基于的底层支持环 

境.由于嵌人式系统应用的领域不同,底层设备也 

不同,这就需要通过抽象层与底层输入输出设备 

接口,把不同的输入输出设备抽象为一个逻辑设 

备,向上层模块提供统一的接口,以实现嵌入式 

GUI系统良好的可移植性和通用性.本文采用SDL 

构建嵌入式GUI的抽象层. 

(2)采用多进程机制还是单进程机制.在嵌入 

式GUI系统发展的早期,硬件条件还很有限,因此 

那时开发的GUI系统大都采用线程机制,所有的 

应用程序都运行在一个地址空间,除堆栈之外,几 

乎所有的数据都是共享的,因此线程间的通信效 

率高,但运行的程序因为缺少地址保护而导致整 

个GUI系统的脆弱.如果某个线程因为非法的数 

据访问而终止运行,那么整个进程都将受到影响, 

可能导致整个系统的崩溃.随着芯片技术的发展, 

嵌入式系统的硬件条件有了很大的提高,因此,本 

文借鉴传统的基于UNIX套接字的Client/Server结 

构来构建嵌入式GUI系统 J. 

(3)实时性问题.嵌入式GUI作为操作系统上 

运行的一个应用级系统,由于其所处的特殊位置, 

对系统的实时性具有很大的影响,如何有效地组 

织嵌入式GUI系统的消息传递机制,对于嵌入式 

GUI系统的实时性有决定性的影响.我们改进Client/ 

Server结构中的消息机制以提高嵌入式GUI系统 

的实时性. 

2.1采用SDL构建抽象层 

SDL全称是Simple DirectMedia Layer,是一个 

开源的跨平台多媒体开发包.SDL提供跨平台的 

二维帧缓冲区和音频等功能.因为SDL专门为多 

媒体应用而设计开发,所以它对图形的支持非常 

优秀,尤其是高级图形能力,如Alpha混合、透明处 

理、YuV覆盖、Gamma校正等.而且在SDL中能够 

加载支持OpenGL的Mesa库,从而提供对二维和 

三维图形的支持. 

sDL包括8个子系统,分别是视频、音频、CD 

音频、事件处理、多线程、定时器、文件I/O、游戏杆 

操作.在使用这些子系统之前,必须调用SDL Init 

()函数完成初始化SDL.在所有的SDL调用结束 

后,要使用SDL 

系统的抽象层中_.Q

it()

来关闭子系统.在构建 

GU

主要

利用 

SDL 

完成图形显示

输入事件处理 . 

在显示方面,SDL封装了底层图形引擎例如 

LibGGI、SVGALIB等.SDL提供了一个Surface。就 

是一个可以直接进行写操作,并马上显示出来的 

画布.SDL加载和显示图片的过程如下:SDL Bli 

tSurface0将图片blit进图形帧缓冲,从而显示图片. 

SDL BlitSurface()自动对blit矩形进行裁边,blit矩 

形在调用SDL 

UpdateRects(

)时被用作更新屏幕变

 

化了的部分. 

在输入方面,SDL提供了事件管理来处理键 

维普资讯

第3期 颜晶,等:嵌入式Linux图形用户界面实现 203 

盘、鼠标等设备的输人,如果需要自定义事件,SDL 

也提供了自定义事件等方法来处理.SDL事件处 

理的工作原理是用一个事件队列来记录键盘、鼠 

标等事件,即把等待处理的事件加人到这个事件 

队列中,然后不断地循环调用SDL_PollEvent()函数 

来不断扫描这个队列,如果有事件就进入到具体 

事件处理程序中进行处理.SDL事件处理的关键 

数据结构是SDL

_

Event联合,SDL

_

Event联合本身 

又由一系列的SDL_Event联合组成,每个SDL_Event 

表示一个事件的发生. 

2.2 Client/Server结构 

Client/Server结构是广泛采用的一种GUI结 

构,在Client/Server结构中,存在着一个服务器进 

程和若干个客户进程,客户进程调用自己的消息 

处理函数来响应消息,建立窗口、绘制等函数调 

度,然后通过UNIX套接字传递到服务器进程,服 

务器进程负责接受和发送消息给客户进程,最后 

由服务器完成实际的工作.在客户进程和服务器 

进程之间存在着大量的数据传递,而GUI与一般 

程序的结构不同,程序的流程不再是只有一个人 

口和若干个出口的串行执行线路;相反,程序会 

直处于一个循环状态,在这个循环中,程序从外 

部输入设备获取某些事件,比如用户的按键或者 

鼠标的移动,然后根据这些事件做出某种响应,并 

完成一定功能.传统的方法是不能适应这种复杂 

的需求的,因此采用消息驱动机制来管理进程间 

通信,创建消息队列,实现消息处理函数的调用与 

分派.与在传统的Client/Server不同的是,Server只 

负责消息的分发,而不涉及实际的绘图操作,窗口 

的绘制由Client自己负责. 

在GUI环境中,任何一个应用都是通过GUI 

的服务器进程来启动的.服务器进程启动后,首先 

会初始化服务器端共享资源和全局数据结构,然 

后会启动一个线程专门用于侦听客户端的连接请 

求;而每个客户进程启动后,首先与服务器进程 

建立连接并进行交互;当服务器进程侦听到客户 

端的一个连接请求后,就会创建一个新的线程,该 

线程的主要任务就是保持与这个客户进程的通信, 

客户进程的新的套接字由这个新的线程读取 J,这 

样做的目的是为了防止某一个应用的崩溃殃及其 

它的应用,在服务器一端的与要崩溃的应用相连 

接的套接字出现问题关闭并不会影响到其它的应 

用.这个过程可用图3描述. 

当客户端进程启动后,也会创建一个单独的 

图3服务器进程 

线程循环读取与服务器建立的套接字,并将读到 

的消息发送到主窗口的消息队列中去. 

从上面的分析可以看出,GUI建立了许多线 

程,当然也会消耗系统资源,但应该注意的是:对 

于套接字的读是一种阻塞读,即在没有数据到达 

的情况下,线程会被阻塞在这个地方,只有等到数 

据到达后,线程才会被唤醒.这样的话,线程消耗 

的资源便是有限的.相反情况,如果不建立这些线 

程,对于客户端来说,对于消息的响应可能会变得 

比较迟缓;而对于服务器端来说,除了对于消息 

的响应会出现与客户端的同样情况以外,客户端 

的错误可能会波及到服务器进程,导致服务器进 

程不再能响应其它进程的消息. 

3 结束语 

本文根据嵌入式系统的特点提出了一种灵活 

的嵌人式GUI解决方案,并对采用SDL为原型设 

计抽象层和系统核心机制进行了阐述.该GUI系 

统的特点是采用分层的体系结构,向上层软件和 

下层的硬件设备提供各种统一的编程接口,使GUI 

系统不依赖于特定的硬件设备,可以移植到不同 

的平台上,具有很好的通用形和可移植性;针对 

传统的Client/Server结构中由服务器过多涉及实际 

的绘图操作,从而导致系统效率比较低,实时性不 

高,改进了Client/Server结构的消息机制,系统实 

维普资讯

204 空军雷达学院学报 2007生 

时性得到了较大改进.该嵌入式GUI系统已成功 

[2007—03—10].http://www.minigui.org. 

地移植到基于AMD Aul200和嵌入式Linux的平 

Richard N Taylor,et a1.A Component—and—Message—Based 

台上.随着嵌入式Linux越来越多的应用,而作为 

Architectural Style for GUI Software[J].IEEE Trnasaction 

on Software Engineering,1996,22(6):390—406. 

嵌入式系统中的一个重要部分一嵌入式GUI的 

LUO Qi,LUO Lei.A Universal Solution of Embedded 

地位也就越来越至关重要了. 

MultitaskingGUISystem[C]//SecondInternationalConference 

on Embedded Software and Systems(ICESS’05).China, 

2005:536—539. 

参考文献: 

王同洋,熊伟.嵌入式Linux中图形用户界面的研究与 

[1]Jasmin Blanchette,Mark Summertield.C++GUI Progra- 

设计[J]_微计算机信息2006,22(3—2):90—92. 

mming with Qt4[M].USA:Prentice Hall,2006. 

Ernest Pazera.Focus on SDL[M].USA:Course Technol— 

[2]HAERR G.Microwindows Architecture[EB/OL].(1999— 

ogy PTR,2002. 

12—04)[2007—03—10].http://www.microwindows.eom. 

李玉东.精通嵌入式Linux编程[EB/OL] (2007—03—20) 

[3]魏永明.MiniGUI技术白皮书[EB,0L].(2006—06—19) 

[2007—04—05].httl:l://www.1gui.net. 

1mplementation of the Embedded Linux Graphic User lnte ce 

Yf Ji

硌 

ng .SHI Shao.ying ,T G Zi.yue 

(1.Department of Graduate Management,AFRA,Wuhan 43001 9,China; 

2.Department ofInformation&Command Automation,AFRA,Wuhan 430019,China) 

Abstract:Aimed at one of the core technologies of embedded systems.GUI.the idea and architecture for a 

general purpose and transplantable embedded GUI system was proposed.Some key technologies of embedded GUI. 

such as how to design abstract layer by using the SDL.and the Client/Server architecture based on message drive 

mechanism were presented,thus improving greatly hte real-time performence of embedded GUI. 

Key words:embedded Linux:embedded GUI:Client/Server architecture 

(上接第200页) 

Discrete Segmented Genetic Algorithm Based on Agents 

GAO Ting ,LU Han-rong ,LI Jia-qing 

(1.DepartmentofGraduateManagement,AFRA,Wuhan430019,China;2.eDpartmentofinformation&CommandAutomation,Wuhan430019,China) 

Abstract:Based on an insight into the premature phenomenon of coarse grain genetic algorithms,an agent- 

based implementation of the discrete segmented genetic algorithm(DSGA)was proposed.The method can 

accelerate the speed ofsolving problem based on the DSGA and improve the memory utilization and communication 

efifciency.By validating the algorithm via multi-peak value function,it is shown that the optimized speed of the 

algorithm can be improved to a certain extent. 

Key words:Agent;DSGA;NGA;premature phenomenon 


本文标签: 系统 进程 设备 消息 机制