基于Qt的嵌入式Linux GUI研究与实现.doc

上传人:m**** 文档编号:561376850 上传时间:2023-01-15 格式:DOC 页数:6 大小:188.50KB
返回 下载 相关 举报
基于Qt的嵌入式Linux GUI研究与实现.doc_第1页
第1页 / 共6页
基于Qt的嵌入式Linux GUI研究与实现.doc_第2页
第2页 / 共6页
基于Qt的嵌入式Linux GUI研究与实现.doc_第3页
第3页 / 共6页
基于Qt的嵌入式Linux GUI研究与实现.doc_第4页
第4页 / 共6页
基于Qt的嵌入式Linux GUI研究与实现.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《基于Qt的嵌入式Linux GUI研究与实现.doc》由会员分享,可在线阅读,更多相关《基于Qt的嵌入式Linux GUI研究与实现.doc(6页珍藏版)》请在金锄头文库上搜索。

1、Qt/E的嵌入式Linux GUI研究与实现摘要:嵌入式GUI(Graphical User Interface)为嵌入式系统提供了一种应用于特殊场合的人机交互接口(Man-Machine Interface)。由于嵌入式系统本身的硬件资源有限,要求嵌入式GUI具有高度可移植性和可裁剪性,以适应不同的硬件条件和使用需求。本文首先介绍了嵌入式Linux GUI目前的发展状况及各自的特点,然后针对目前主流的嵌入式GUI系统-Qt/Embedded,阐述其图形引擎的实现。最后,结合三星公司S3C2410的开发板,介绍了嵌入式GUI系统在具体平台上的实现和应用。关键字:ARM9 Linux 交叉编译

2、嵌入式GUI Qt Qt/Embedded Qtopia FrameBuffer Signals/SlotsResearch and Realization of Embedded Linux GUI based on Qt/EmbeddedTang Wei, Li Qiang(College of Computer Science, HangZhou DianZi University, Hang Zhou, 310018, China)Abstract: The Embedded GUI(Graphical User Interface)provides a Man-Machine Int

3、erface 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 c

4、urrent 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. Whats more, it Combined with Samsung S3C2410 development board, introduced the achieving and application on a

5、 specific platform for embedded GUI system .Keywords: ARM9 Linux Cross-Compiling Embedded GUI Qt Qt/Embedded Qtopia FrameBuffer Signal/Slots1 引言由于嵌入式系统的特殊性,它一般不会建立在庞大的操作系统以及GUI之上,如Windows或X Windows,它对实时性的要求非常高,对GUI的要求更高。本文首先介绍了目前嵌入式GUI的发展状况,接着简要说明嵌入式Linux GUI的硬件和软件环境,通过Qt/Embedded和Qtopia的移植,实现嵌入式环境下

6、的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

7、.2 MicroWindowsMicroWindows是由美国CenturySoftware 公司开发的开放源码的嵌入式GUI项目。它不需要其他图形系统的支持,可以充分利用Linux提供的FrameBuffer机制来进行图形显示。同时在底层提供了对多种芯片的支持,基本上用C语言实现,因此移植性较好。2.3 MiniGUI当然,我们国家的MiniGUI也是一个比较成熟的图形用户界面系统,面向基于Linux的实时嵌入式系统,使用现有成熟的图形引擎(SV2GALib/LibGGI),采用类似Win32的线程机制,集成了多字体和多字符集,支持硬件加速能力,充分利用显示内存。2.4 OpenGUIOpe

8、nGUI在Linux上存在很长时间了。这个库是用C+编写,提供C+接口。OpenGUI支持鼠标和键盘事件,在Linux上与Qt/Embedded一样,都是基于FrameBuffer实现绘图。但OpenGUI基于汇编实现内核并利用MMX指令进行了优化,因此运行速度快,从而影响了它的可移植性。3 嵌入式Linux GUI 软硬件环境3.1 硬件环境本文的嵌入式系统是针对三星公司的S3C2410,它集成ARM920T内核,采用0.18微米CMOS工艺,并在ARM核基础上集成了丰富的外围接口,如图1(来自S3C2410数据手册)。图1 S3C2410 Block Diagram主要功能:1个MMU(实

9、现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内核与上层软件使用)等1。外围器件的扩展和电路板的设计主要由硬件工程师完成,不是本文的主要讨论范围,在此只是阐述嵌入式Linux GUI的硬件环境。3.2 软件环境在完成开发板的设计制作之后,在其上运行GUI程序之前,必须要有一定的底层软件环境。如下:1) 采用宿主机/目标机的开发模式

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

11、后通过mkfs.jffs2工具生成映像文件,烧写到flash中3。4 Qt/Embedded图形引擎的实现Qt/Embedded图形引擎基于FrameBuffer,FrameBuffer是在Linux 2.2版本以后推出的标准显示设备驱动接口,采用mmap()系统调用,可将它的显示缓存映射为可连续访问的一段内存指针4。FrameBuffer的驱动包括两个方面:一是LCD的初始化(ARM9中集成了LCD控制模块)。二是对画面缓冲区的读写,如read、write和lseek的系统调用。而将画面缓冲区的内容输出到LCD上,则由硬件自动完成。DMA通道和画面缓冲区设置完成后,DMA开始正常工作,并将缓

12、冲区的内容不断发送到LCD上。这个过程是基于DMA对LCD的不断刷性。基于该特性,FrameBuffer驱动程序必须将画面缓冲区的存储空间重新映射到一个不加高缓存和写缓存的虚拟地址空间中,这样才能保证应用程序通过mmap()系统调用将该缓存映射到用户空间后,该画面缓存的写操作能够实时地体现到LCD上。Qt/Embedded中,Qscreen类为抽象出的底层显示设备基类,其中声明了对于显示设备的基本描述和操作方式。另一个重要的基类是QGfx类,它抽象出对于显示设备的具体操作接口,如选择画线、画矩形和alpha操作等。这两个基类是Qt/Embedded图形引擎的底层抽象。其中具体函数基本都是虚函数

13、,Qt/Embedded对具体的显示设备,如Linux FrameBuffer、Qt Virtual FrameBuffer 做的抽象接口类全都由此继承并重载基类中的虚函数来实现。图2给出了Qt/Embedded中图形引擎实现的结构框图。Qt/Embedded图2 Qt/Embedded图形引擎的结构框图用QLinuxFbScreen来处理FB设备,针对具体显示硬件(如Mach卡和Voodoo卡)的加速特性,Qt/Embedded从QLinuxFbScreen和图形设备环境模板类QGfxRaster类继承出子类,并针对相应硬件重载相关虚函数。5 Qt/Embedded和Qtopia的移植5.1

14、 在宿主机上搭建Qt/Embedded环境本过程需要qt-x11.2.3.2.tar.gz、e2fsprogs-1.37.tar.gz、qt-embedded-2.3.7.tar.gz、tmake-1.13.tar.gz、qtopia-free-1.7.0.tar.gz等软件包。qt-x11.2.3.2.tar.gz 提供uic、qvfb、designer等开发工具;e2fsprogs-1.37.tar.gz 提供uuid头文件和libuuid.a;qt-Embedded-2.3.7.tar.gz主要提供libqte.so;tmake-1.13.tar.gz生成和管理Makefile;qtop

15、ia-free-1.7.0.tar.gz实现应用程序的桌面。由于Qt/Embedded和Qt/X11有一样的API,所以我们在开发嵌入式环境的应用程序时,可以先在宿主机上开发,利用强大的qvfb工具模拟嵌入式的GUI运行环境,通过调试后,再经过重新编译,移植到开发板上,这样就不用每次都刷性开发板上的内容,大大提高了开发GUI的速度。进入宿主机kde的图形化界面,打开终端,进入root用户模式。将上述软件包拷贝到自己的目录下的qte目录,用vi编辑器建立build安装脚本(设置QTDIR、QPEDIR、TMAKEDIR、TMAKEPATH、PATH等环境变量,通过./configure help

16、命令分别配置各个软件包的Makefile文件)。有几步需要注意,cp -r ./e2fsprogs-1.37/lib/uuid ./qtopia/include和cp ./e2fsprogs-1.37/lib/libuuid.a ./qtopia/lib帮助Qtopia建立时所需要的头文件库文件,如果不加,在编译qtopia时会找不到libuuid.a,编译出错;在编译qt-embedded时,根据./configure help配置qt/embedded库,比如加入对jpeg、gif的选项,当然,如果选择它们,将增强应用程序的功能,但也增加了qt/embedded库的大小。运行build脚本./build,根据宿主机的处理速度不同,该安装脚本运行时间会有长短,本人用1G内存的宿主机,大概四十几分钟即可完成。安装完成之后,就可以开发嵌入式GUI程序

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号