Qt嵌入式LinuxGUI研究报告与实现

个人资料整理 仅限学习使用 Qt/E的嵌入式Linux GUI研究与实

摘要:嵌入式GUI(Graphical User Interface>为嵌入式系统提供了一种应用于特殊场合的人机交互接口(Man-Machine

Interface>。由于嵌入式系统本身的硬件资源有限,要求嵌入式GUI具有高度可移植性和可裁剪性,以适应不同的硬件条件和使用需求。本文首先介绍了嵌入式Linux

GUI目前的发展状况及各自的特点,然后针对目前主流的嵌入式GUI系统---Qt/Embedded,阐述其图形引擎的实现。最后,结合三星公司S3C2410的开发板,介绍了嵌入式GUI系统在具体平台上的实现和应用。

关键字:ARM9 Linux 交叉编译 嵌入式GUI Qt Qt/Embedded Qtopia FrameBuffer Signals/Slots

Research and Realization of Embedded Linux GUI based on Qt/Embedded Tang Wei, Li Qiang

(College of Computer Science, HangZhouDianZiUniversity, Hang Zhou, 310018, China>

Abstract: The Embedded GUI(Graphical User Interface>provides a Man-Machine Interface used in special occasions for Embedded Systems. Since the embedded system itself limited hardware resources, whose requirements of embedded GUI is highly portable and can be cut of, so as to adapt to the conditions and use different hardware requirements. This article firstly introduces the current development of embedded Linux GUI and their own characteristics, and then for the current mainstream embedded GUI system--Qt/Embedded,described the realization of its graphics engine. What’s more, it Combined with Samsung S3C2410 development board,

introduced the achieving and application on a specific platform for embedded GUI system .

Keywords: ARM9 Linux Cross-Compiling Embedded GUI Qt Qt/Embedded Qtopia FrameBuffer Signal/Slots 1 引言

由于嵌入式系统的特殊性,它一般不会建立在庞大的操作系统以及GUI之上,如Windows或X Windows,它对实时性的要求非常高,对GUI的要求更高。本文首先介绍了目前嵌入式GUI的发展状况,接着

Linux

GUI

Qt/Embedded和Qtopia的移植,实现嵌入式环境下的GUI。 2 嵌入式Linux GUI概述

目前,以Linux为操作系统的嵌入式系统中,常用的GUI有Qt/Embedded、MicroWindows、MiniGUI及OpenGUI等。 2.1 Qt/Embedded

Qt/Embedded是挪威的奇趣科技(TrollTech>公司(注: 该公司已于2008年2月被诺基亚公司以1.53亿美元收购>推出的一个跨平台出的C++图形用户开发界面库。它的主要特点是界面美观、色彩配比好,使用与Qt/Windows和Qt/X11完全一样的API接口,许多基于Qt的程序可以非常方便的移植到嵌入式系统中;同时,它具有丰富的模块,用户可以根据需要选择它的特性集合。 个人资料整理 仅限学习使用 2.2 MicroWindows

MicroWindows是由美国CenturySoftware

公司开发的开放源码的嵌入式GUI工程。它不需要其他图形系统的支持,可以充分利用Linux提供的FrameBuffer机制来进行图形显示。同时在底层提供了对多种芯片的支持,基本上用C语言实现,因此移植性较好。 2.3 MiniGUI

当然,我们国家的MiniGUI也是一个比较成熟的图形用户界面系统,面向基于Linux的实时嵌入式系统,使用现有成熟的图形引擎(SV2GALib/LibGGI>,采用类似Win32的线程机制,集成了多字体和多字符集,支持硬件加速能力,充分利用显示内存。 2.4 OpenGUI

OpenGUI在Linux上存在很长时间了。这个库是用C++编写,提供C++接口。OpenGUI支持鼠标和键盘事件,在Linux上与Qt/Embedded一样,都是基于FrameBuffer实现绘图。但OpenGUI基于汇编实现内核并利用MMX指令进行了优化,因此运行速度快,从而影响了它的可移植性。 3 嵌入式Linux GUI 软硬件环境

3.1 硬件环境

三星公司的S3C2410,它集成ARM920T内核,采用0.18微MCMOS工艺,并在ARM核基础上集成了丰富的外围接口,如图1(来自S3C2410数据手册>。

图1 S3C2410 Block Diagram

主要功能:1个MMU(实现Linux内核的虚拟内存管理>、4个DMA通道、1个LCD控制器(结合DMA实现Linux内核的mmap(>系统调用>、3个UART、2个SPI、2个USB主设备端口、1个看门狗、4个PWM定时器、117个I/O端口、24个外部中断源、8路10位ADC以及触摸屏接口、外部扩展存储器控制器(达1G,足够

个人资料整理 仅限学习使用 Linux内核与上层软件使用>等。 外围器件的扩展和电路板的设计主要由硬件工程师完成,不是本文的主要讨论范围,在此只是阐述嵌入式Linux GUI的硬件环境。 [1]

3.2 软件环境

在完成开发板的设计制作之后,在其上运行GUI程序之前,必须要有一定的底层软件环境。如下: 1) 采用宿主机/目标机的开发模式,在宿主机上搭建交叉编译环境 2) ViVi(Linux的引导程序>的移植

ViVi是三星公司专门为s3c2410加载Linux内核。 3) Linux内核移植和文件系统的制作

内核的移植比较复杂,这也是采用Linux的繁琐之处。移植采用2.4.x的内核源码,针对相应的硬件平台(S3C2410>,修改部分体系结构相关的源码,主要是汇编语言部分,添加相应的驱动(FB“帧缓冲”驱动程序、鼠标、键盘类设备驱动程序等>,再裁剪内核,去掉无关选项,将配置好的内核交叉编译后,生成映像文件,烧写到开发板的flash中。文件系统采用jffs2,通过busybox制作Linux需要的命令,建立基本目录和设备文件等,最后通过mkfs.jffs2工具生成映像文件,烧写到flash中。 [3]

[2]

4 Qt/Embedded图形引擎的实现

Qt/Embedded图形引擎基于FrameBuffer,FrameBuffer是在Linux

2.2版本以后推出的标准显示设备驱动接口,采用mmap(>系统调用,可将它的显示缓存映射为可连续访问的一段内存指针。FrameBuffer的驱动包括两个方面:一是LCD的初始化(ARM9中集成了LCD控制模块>。二是对画面缓冲区的读写,如read、write和lseek的系统调用。而将画面缓冲区的内容输出到LCD上,则由硬件自动完成。DMA通道和画面缓冲区设置完成后,DMA开始正常工作,并将缓冲区的内容不断发送到LCD上。这个过程是基于DMA对LCD的不断刷性。基于该特性,FrameBuffer驱动程序必须将画面缓冲区的存储空间重新映射到一个不加高缓存和写缓存的虚拟地址空间中,这样才能保证应用程序通过mmap(>系统调用将该缓存映射到用户空间后,该画面缓存的写操作能够实时地体现到LCD上。 Qt/Embedded中,Qscreen类为抽象出的底层显示设备基类,其中声明了对于显示设备的基本描述和操作方式。另一个重要的基类是QGfx类,它抽象出对于显示设备的具体操作接口,如选择画线、画矩形和alpha操作等。这两个基类是Qt/Embedded图形引擎的底层抽象。其中具体函数基本都是虚函数,Qt/Embedded对具体的显示设备,如Linux 构框图。Qt/Embedded FrameBuffer、Qt

Virtual

FrameBuffer

做的抽象接口类全都由此继承并重载基类中的虚函数来实现。图2给出了Qt/Embedded中图形引擎实现的结

[4]

图2Qt/Embedded图形引擎的结构框图

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4