ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:27.56KB ,
资源ID:11582198      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11582198.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式Linux下的图形化窗口QT的移植与研究.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式Linux下的图形化窗口QT的移植与研究.docx

1、嵌入式Linux下的图形化窗口QT的移植与研究嵌 入式Linux课程设计课题:嵌入式Linux下的图形化窗口QT的移植与研究:专业班级:电子信息工程2班学号:指导老师:一前言随着嵌入式的技术的飞速发展,嵌入式已经得到了越来越广泛的应用。应用领域涉与无线、网络、消费娱乐、影像、汽车电子、安全应用与存储装置。如今越来越多的嵌入式需要一个图形用户界面(GUI),它是计算机与其使用者之间的对话接口,是嵌入式的重要组成部分。本文重要针对嵌入式开发平台中Qt移植的过程进行详细的分析和研究,并且通过一个控制嵌入式开发平台的led数码灯的Qt应用程序实例来说明移植和实现的过程。1系统平台组成根据设计需要,本文

2、目的是实现一个具有图形接口界面的嵌入式显示终端,改系统使用嵌入式设计技术。硬件上,采用基于Samsung$3C24101CpU的目标板;在软件上,选择嵌入式Linux为操作系统。整个系统软件由引导程序(ViVi公司的boot loader)、设备驱动(包括帧缓存frame buffer)、嵌入式Linux核、文件系统(cramfs)、基j:QTEmbedded L21和Qtopia的用户图形界面以与应用程序组成.2 Qt的移植21开发环境的建立本文采用的开发环境是Pc机+CygWin+arm-Linux-Qt。211 Cygwin的建立从:WWwcygwincom上下载并安装最新版本Cygwi

3、n,本文采用的是Cygwinl51的版本。需要注意的是,Cygwin的安装目录必须位于硬盘的NTFS分区,否则会影响文件的属性和权限操作。本文安装Cygwin的路径为F:cygwin。212编译器安装下载arm-linux-gcc-341tarbz2至1usrlocal下,生成的编译工具会在目录usr10calarm34ibin下,然后修改etcprofile文件,重新启动Cygwin就可以直接运行arml inuxgcc。213 Lj nux的安装从官方fttp:1inuxorg-F载linux安装包,本文采用的inux-2418版本。22安装与建立0t桌面运行环境从官方ftp:ftptro

4、lltechcom下载以下文件:qtxl l一232targzqtembedded一237tarbz2tmake11 1targz QTOPIAfree一170targz解压这三个文件到usrlocalguiqt,设置环境变量:export TMAKEDIR=lusrlocalguiqttmakelibqwscygwinamrg+export QTDIR=usrlocalguiqtqtX1 I-232export QTEDIR=usrlocalguiqtqtembedded一237export QPEDIR=usrlocalguiqtOTOPIAfree一170分别编译上面的文件最后生成所需的

5、编译器mocere(定义用户的信号和槽是所用)、uicexe(Qt中的用户界面编译器)、tmaReexe(生成makefile文件)progenexe(生成工程管理文件)和在开发平台上运行程序的所需的函数库。23制作带0t的根文件系统(Root F1e System)根文件系统是Linux系统的核心部分,包含系统使用的软件和库,以与所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读写结果的区域。在Linux系统启动时,首先完成核安装与环境初始化,之后会寻找一个文件系统作为根文件系统,并将其加载。嵌入式系统常可以选择的根文件系统有:ronfs、cramfs、ramfS、jffs2、

6、ext2等。文件系统包括以下目录:bin(应用程序存放目录)sbin(存放系统管理员服务程序)1ib(存放程序运行所需的动态库)proc(系统状态文件目录)dev(驱动程序存放路径)etc(系统配置文件与用户数据存放目录)mnt(用于设备安装的目录)usr(用于存放用户程序和配置文件的目录)qt(存放QTOPIA运行文件)。使用烧写工具mkcramfs将其专成一个映像文件。24在9TOPIA中增加应用程序QTOPIA是为基于Linux的PDA、智能和其他移动设备设计的一个全面的,可以用户化的应用程序平台和用户界面。当编写好QTOPIA应用程序源文件(在本文中的源文件为ledcpp ledh m

7、aincpp,存放路径homeled)安下面的命令就可以生成arm板子上跑的程序:cdhomel edprogenn led一0 ledprotmake hellopro一0 makefi lemakecp ledusr10calrootqtbin然后在usrlocalrootqtappsApplications下添力Hleddesktop(启动后可以在屏幕上显示led程序),最后用mkcramfs烧写就可以了。交叉编译Qt/Embedded库当有了ARM的linux编译器后,就可以使用这个编译器进行交叉编译QtEmbedded库的源代码,从而产生一个以ARM为目标代码的QtEmbedded库

8、。具体过程如下:(1)解压0t,Embedded在Linux命令模式下运行如下命令:#tar xfz qtembedded-237targz(2)配置Qt/Embedded的安装#cd qt一237#export QrfDIR=$PWD#exportQTEDIR=$QTDIR#cp,配置文件所在路径,/qconfig-localh/src/tools#make clean#/cofigure xplatform linuxarmg+ 一shareddebugqconfig localqvfbdepths 4,8,16,32#makeQt/Embedded的安装选项有很多个,可以直接输入“”来运

9、行配置。QtEmbedded的安装选项还允许自己定制一个配置文件,来有选择的编译Q忱,llbedded库,这个安装选项是“-qconfiglocal”;当指定这个选顼时,Qr/Embedded库中安装过程会寻找qt一237src/tools,qconfiglocalh这个文件来编译Qt/Embedded库。在定制中添加了对触摸屏显示的支持。3linux下的I ed的设备驱动程序的实现在Linux下,设备驱动程序可以看成Linux核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件实现得应用程序可以像操作普通文件一样来操作外部设备,可以使用和操作文件中一样的、标准的系统调用接口函数来完成对硬

10、件设备的打开、关闭、读写和io控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。本系统平台使用的嵌入式armLinux系统在核主要功能上与Linux操作系统没本质区别,所以驱动程序要实现的任务也一样,只要编译时使用的编译器、部分头文件和库文件等要涉与到具体处理器体系结构,这些都可以在Makefile文件中具体指定。LED一0NALL=OxOf点亮所有的led数码生成窗体类的头文件和实现文件界面文件使用uic工具产生出窗体类的头文件和实现文件,例如hell0ui节目文件产生hello窗体类的头文件和实现文件,具体方法如下:#cd qt一237bin#uico helloh hellou

11、i#uico hellocppimpl he1loh helIoui这样我们就得到hello窗体类的头文件helloh和实现文件hello_cppo接下来根据我们要实现的具体功能,在hellocpp文件里添加相应的代码。31编写主函数main()一个QtEmbedded应用程序应该包含一个主函数,主函数所在的文件名是maincpp。主函数是应用程序执行的入口点。32编辑工程文件在工程文件中添加窗体类的头文件、实现文件和主函数交件。QTEmbeddedQTEmbedded是著名的QT库开放商正在进行的面向嵌入式系统的QT版本。这个版本的主要特点是可移植性较好,许多基于QT的X Window程序可

12、以非常方便地移植到嵌入式版本。QTEmbedded采用两种方式进行发布:在GPL协议下发布的free版与专门针对商业应用的commercial版本。如果你要在商业中使用这个库,需要支付昂贵的授权费用。QtEmbedded是著名的Qt库开发商的Trolltech公司开发地观向嵌入式系统的Qt版本。因为Qt是KDE等项目使用的GUl支持库,许多基于Qt的x window程序因此可以非常方便地移植到QtEmbedded上。QtEmbedded同样是Serverclient结构。QtEmbedded延续了Qt在X上的强大功能,在底层摒弃了X lib,仅采用framebuffer作为底层图形接口。同时,

13、将外部输入设备抽象为keyboard和mouse输入事件,底层接口支持键盘、GPM鼠标、触摸屏以与用户自定义的设备等。QtEmbedded类库完全采用c+封装。丰富的控件资源和较好的可移植性是QtEmbedded是为优秀的一方面。它的类库接口完全兼容于同版本的Qtx11,使用X下的开发工具可以直接开发基于QtEmbedded的应用程序QUI界面。与前两种GUI系统不同的是,QtEmbedded的底层图形引擎只能采用framebuffer。这就注定了它是针对高端嵌入式图形领域的应用面设计的。但由于该库的代码追求面面俱到,以增加它对多种硬件设备的支持,造成了其底层代码比较凌乱、各种补丁较多的问题。

14、QtEmbedded的结构也过于复杂臃肿,很难进行底层的扩充、定制和移植。嵌入式GuI的系统架构11基于嵌入式Linux的GuI系统底层实现基础一个能够移植到多种硬件平台上的嵌入式GUI系统,应用至少抽象出两类设备:基于图形显示设备(如VGA卡)的图形抽象层GAL(Graphic Abstract Layer),基于输入设备(如键盘,触摸层等)的输入抽象层IAL(Input Abstract Layer),如图1所示:抽象层的概念类似Linux核虚拟文件系统的概念,定义了一组不依赖于任何特殊硬件的抽象接口,所有顶层的图形操作和输入处理都建立在抽象接口上。GAL层完成系统对具体的显示硬件设备的操

15、作,极大程度上陷蔽各种不同硬件的技术实现细节,为系统程序开发人员提供统一的图形编程接口。IAL层则需要实现对于各类不同输入设备的控制操作,提供统一的调用接口。GAL层与IAL层的设计概念,可以极大程度地提高嵌入式GUI的可移植性。而用于实现这一抽象接口的底层代码称为“图形引擎”或“输入引擎”,类似操作系统中的驱动程序。这实际是一种面向对象的程序结构。越)I编程接口嵌入式GUIGAL层L层设备抽象层图形显示设备输入设备系统硬件目前应用于嵌入式Linux系统中比较成熟,功能也比较强大的GUI系统底层支持库有SVGAlib、LibGGI、Xwindo、Frame buffer等。12底层图形发生引擎

16、的介绍Linux图形领域中常见的基础设施,是因为这些系统(或者函数库)一般作为其他高级图形或者图形应用程序的基本函数库。这些系统(或者函数库)主要包括:sVGAlib、LibGGI、windo、Frame buffer等,详述如下:121 LibGGILibGGI试图建立一个一般性的图形接口,而这个抽象接口连同样关的输入(鼠标、键盘、游戏杆等)抽象接口一起,可以方便地运行在X Windows、SVGALib、FrameBuffer等等之上。建立在“bGGI之上的应用程序,不经重新编译,就可以在上述这些底层图形接口上运行。但是现在LibGGI的发展几乎停滞。122 SVGAlibSVGAlibj

17、是Linux系统中最早出现的非X图形支持库。这个库从最初对标准VGA兼容芯片的支持开始,一直发展到对老式SVGA芯片的支持对与对现今流行的高级视频芯片支持。它为用户提供了在控制台上进行图形编程的接口,使用户可以在PC兼容系统上方便地获得支持。但该系统有如下不足:1)接口杂乱。SVGALib从初的Vgalib发展而来,保留下了老系统许多接口,而些接口却不能良好地迎合新显示芯片的图形能力。2)未能较好地隐藏硬件细节。许多操作不能自动使用显示芯片的加速能力支持。3)可移植性差。SVGALib目前只能运行在x86平台上,对其他平台的支持较差。4)发展缓慢,sVGALib作为一个老的图形支持库,目前的应

18、用围越来越尤其在Linux核增加了Frame Buffer驱动支持之后,有逐渐被其他图形库替代的迹象。5)对应用的支持能力较差。SVGALib作为一个图形库对高级图形功能的支持,比如直线和曲线等,不能令人满意。123 Frame BufferFrame Buffer是出现在22xx核中的一种驱动程序接口,将显示设备抽象为帧缓冲区可以将它看成显示存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上Frame Buffer设备还提供了若干ioctl命令,通过这些命令,可以获得显示设备一些固定信息(如显示存大小)与显示模式相关的可变信息(如分辨率、象素结构、

19、每扫描线的字节宽度)、当前核支持的加速显示卡的类型(通过固定信息得到,这种类型通常是和特定显示芯片相关的),以与伪彩色模式下的调色信息等。但Frame Buffer只是一个提供显示存和显示芯片寄存器从物理存映射到进程地址空间中的设备。所以,对于应用程序而言,如果希望在Frame Buffer之上进行图形编程,还需要完成其他许多工作。2现有嵌入式GUI的叙述在Linux之上进行(实时)嵌入式系统开发的厂商,一般选择如下几种GUI系统:紧缩的X Window系统、MiniGUI、MicroWindows、QTEmbedded等。21紧缩的x Window系统X Window是Linux以与其他类U

20、NIX系统的标准GUIx window系统采用标准的客户服务器体系结构,具有可扩展性好、可移植性好等优点;但该系统的庞大、累赘和低效率。为了获得应用程序的可移植性,许多厂家都试图通过对XWindow系统的紧缩开发,使之能够在嵌入式系统上运行。国外已经开发出了大小约为800K的X服务器。这对西方国家来说基本能够满足嵌入式系统的需求了。但该系统的源代码尚不开放,从而很难进行本地化开发。22 MicrOWindOwsMicroWindows是一个开放源码的项目,目前由美国一家公司在主持开发该项目的开发非常活跃,国也有人参与了其中的开发,并编写了GB2312等字符集的支持该项目的主要特色在于提供了比较

21、完善的图形功能,包括一些高级的功能,比如Alpha混合,三维支持,TrueType字体支持等但作为一个窗口系统,该项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完备,键盘和鼠标等驱动还很不完善23 QTEmbeddedQTEmbedded是著名的QT库开放商正在进行的面向嵌入式系统的QT版本。这个版本的主要特点是可移植性较好,许多基于QT的X Window程序可以非常方便地移植到嵌入式版本。QTEmbedded采用两种方式进行发布:在GPL协议下发布的free版与专门针对商业应用的commercial版本。如果你要在商业中使用这个库,需要支付昂贵的授权费用。24 MiniG

22、UI简介MiniGUI是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。它主要运行于Linux控制台,实际也可以运行一种具有POSIX线程支持的POSIX兼容系统上。MiniGUI同时也是国最早出现的几个自由软件项目之一。MiniGUI为了得到最大的效率,采用基于线程的多窗口机制。这种结构对数控系统这样任务单一、实时要求高的系统来讲,是最佳解决方案。但如果系统中运行的任务并不是单一的,就有可能因为一个任务的失效而影响其他任务。因此,提高GuI系统的健壮性就成为另一个亟待解决的问题。3每个系统设计优点与特色31 三种嵌入式GUI系统的分析与比较31-1 MicrowindowsWicrow

23、indows是一个典型的基于ServerClient体系结构的GUI系统,基本分为三层,如图2所示最底去是面向图形显示和键盘、鼠标或触摸屏的驱动程序;中间层提供底层硬件的抽象接口,并进行窗口管理最高层分别提供兼容于xWindow和ECMA APIW(Win32子集)的API。NalloX API ECMA APIW 窗口管理硬件设备层显示硬件输入设备其中使用Nanox接口听API与X接口兼容,但是该接口没有提供窗口管理,如窗口移动和窗口剪切等高级功能,系统中需要首先启动nanoX的Server程序nanoxserver和窗口管理程序nanowm用户程序连接nanoX的Server获得自身的窗口

24、绘制操作使用ECMAAPIW编写的应用程序无需nanoxserver和nanowm,可直接运行。Microwindows提供了相对完善的图形功能和一些高级的特性,如Alpha混合、三维支持和TrueType字体支持该统为了提高运行速度,也改进了基于socket套接字的X实现模式,采用了基于消息机制的serverClient传输机制Microwindows也有一些通用的窗口控件,但其图形引擎存在许多问题,具体如下:无任何硬件加速能力,*图形引擎中存在许多低效算法,如在圆弧函数的逐点判断剪切的问题。2003年Microwindows推出版本O90后,该项目的发展开始陷于停滞状态。三种嵌入式GUI的

25、比较与分析比较上述几个嵌入式GUI系统,可以知道目前比较成熟同时得到最多开发人员认可的有QTEmbedded、MiniGUI、MicroWimdows等。MiniGUI和Microwimdows均为自由软件,前者遵循LGPL条款,后者遵循MPL条款。这两个系统的技术路线也有所不同。MiniGUI的策略是首先建立在比较成熟的图形引擎之上,比如SVGALib和LibGGI,开发的重点在于窗口系统、图形接口之上;MicroWimdows目前的开发重点则在底层的图形引擎之上,窗口系统和图形接口方面的功能比较欠缺。例如MiniGUI有一套用来支持多字符集和多编码的函数接口,可以支持各种常见的字符集,包括

26、GB、BIG5、UNICODE等,而MicroWimdows在多字符的支持上尚没有统一接口。QTEmbedded系统则是针对高性能手持设备和移动设备设计,对系统的各种要素要求很高,也是目前商业化应用最多的一款商业收费嵌入式GUI系统。1inux下的led的设备驱动程序的实现在Linux下,设备驱动程序可以看成Linux核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件实现了的细节,使得应用程序可以像操作普通文件一样来操作外部设备,可以使用和操作文件中一样的、标准的系统调用接口函数来完成对硬件设备的打开、关闭、读写和io控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。本系统平台

27、使用的嵌入式armLinux系统在核主要功能上与Linux操作系统没本质区别,所以驱动程序要实现的任务也一样,只要编译时使用的编译器、部分头文件和库文件等要涉与到具体处理器体系结构,这些都可以在Makefile文件中具体指定。LED一0NALL=OxOf点亮所有的led数码灯LEDOFFALL=Ox00熄灭所有的led数码灯,其中,LEDl、LED2、LED3、LED4分别接$3C2410的roC3GPF4、GPF5、GPF6、GPF7可以通过读写GPF IO来控制L叻数码灯的状态。外部硬件电路图如图3所示。圈3 LED幻硬件电路圈对于led数码灯,其驱动程序中需要提供基本的IO操作接口函数o

28、pen、read、write、close的实现,本文中的led数码灯的亮灭是通过write函数来实现的。32应用程序的实现为了控制led数码灯需要在应用程序中加载一下的头文件:#include#include#include本文中设计的qt3J程序通过四个led数码灯来模拟开发板上的led数码灯的显示模式,非常赢观的实现了led数码灯的显示过程,可以以跑马灯的形式显示,还可以单个控制数码灯的显示控制led数码灯程序实现过程,打开led设备,led在系统中对应的设备文件为devledO,采用系统调用函数ledfd=open(。devledO。,o RDwR),ledfd是设备打开后返回的文件描述

29、符(打开错误返回-I),以后的系统调用函数就可使用它来对设备文件进行操作了。接着,利用write(1ed-fd,&val,1)函数向GPIO写控制字。(3)uic(user interface compiler)uic是从xML文件生成代码的用户界面编译器,用来将fileui文件生成fileh和6lecpp文件(命令如:uico fileh nleui uic_0 filecppfileui),但生成的这两个文件不是标准的纯C+代码,通常称为Qt的c+扩展,因为Qt的对象间运用了信号和插槽的通信机制,在文件中用Q_oBjECT宏来标识。(4)moc(元对象编译器)moc用来解析一个c+文件中的

30、类声明并且生成初始化对象的c+代码,moc在读取c+源文件,如果发现其中一个或多个类的声明中含有Q_0BJEcT宏,就给出这个使用QOBJECT宏的类生成另外一个包含元对象代码的c+元文件;元对象代码对信号插槽机制、运行时的类型信息和动态属性系统是需要的。23 QtEmbedded支持触摸屏显示QrEmbedded 2x系列中,触摸屏设备和键盘设备需要根据具体的驱动程序接口中Qt/ErIlbedded中设备实现对应的设备操作类。其中对应于鼠标类设备的实现位于”以erneqwsnlouse-qwscpp中。在文件qwsmouse_qwscpp中添加对触摸屏的支持。具体修改如下:(1)定义和Linux核文件driverinput,tsdevc中数据结构t8一event相一致的TS_EvENT数据结构,定义如下:#if defined(Q711_QwSjPAQ)typedef stmctshort pressure;short x:short y;shon miHi8ec8:J rIsEVENT;(2)修改校准文件的位置在函数void OCalibratedM0useHandleE:wr

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1