




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式Linux课程设计 课题:嵌入式 Linux 下的图形化窗口 QT 的移植与研究姓名:专业班级:电子信息工程 2 班学号:指导老师: 一前言随着嵌入式的技术的飞速发展,嵌入式已经得到了越来越广泛的应用。应用领域涉及无线、网络、消费娱乐、影像、汽车电子、安全应用及存储装置。如今越来越多的嵌入式需要一个图形用户界面(GUI),它是计算机与其使用者之间的对话接口,是嵌入式的重要组成部分。本文重要针对嵌入式开发平台中Qt移植的过程进行详细的分析和研究,并且通过一个控制嵌入式开发平台的led数码灯的Qt应用程序实例来说明移植和实现的过程。1系统平台组成根据设计需要,本文目的是实现一个具有图形接口界面的嵌入式显示终端,改系统使用嵌入式设计技术。硬件上,采用基于Samsung$3C24101CpU的目标板;在软件上,选择嵌入式Linux为操作系统。整个系统软件由引导程序(ViVi公司的boot loader)、设备驱动(包括帧缓存frame buffer)、嵌入式Linux内核、文件系统(cramfs)、基j:QTEmbedded L21和Qtopia的用户图形界面以及应用程序组成.2 Qt的移植21开发环境的建立本文采用的开发环境是 Pc 机+CygWin+arm-Linux-Qt。211 Cygwin的建立从网站http:WWwcygwincom上下载并安装最新版本Cygwin,本文采用的是Cygwinl51的版本。需要注意的是,Cygwin的安装目录必须位于硬盘的NTFS分区,否则会影响文件的属性和权限操作。本文安装Cygwin的路径为F:cygwin。212编译器安装下载arm-linux-gcc-341tarbz2至1usrlocal下,生成的编译工具会在目录usr10calarm34ibin下,然后修改etcprofile文件,重新启动Cygwin就可以直接运行arml inuxgcc。213 Lj nux的安装从官方网站fttp:www1inuxorg-F载linux安装包,本文采用的inux-2418版本。22安装与建立0t桌面运行环境从官方网站 ftp:ftptrolltechcom 下载以下文件:qtxl l一232targzqtembedded一237tarbz2tmake11 1targz QTOPIAfree一170targz解压这三个文件到usrlocalguiqt,设置环境变量:export TMAKEDIR=lusrlocalguiqttmakelibqwscygwinamrg+export QTDIR=usrlocalguiqtqtX1 I-232export QTEDIR=usrlocalguiqtqtembedded一237export QPEDIR=usrlocalguiqtOTOPIAfree一170分别编译上面的文件最后生成所需的编译器mocere(定义用户的信号和槽是所用)、uicexe(Qt中的用户界面编译器)、tmaReexe(生成makefile文件)progenexe(生成工程管理文件)和在开发平台上运行程序的所需的函数库。23制作带0t的根文件系统(Root F1e System)根文件系统是Linux系统的核心部分,包含系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读写结果的区域。在Linux系统启动时,首先完成内核安装及环境初始化,之后会寻找一个文件系统作为根文件系统,并将其加载。嵌入式系统中通常可以选择的根文件系统有:ronfs、cramfs、ramfS、jffs2、ext2等。文件系统包括以下目录:bin(应用程序存放目录)sbin(存放系统管理员服务程序)1ib(存放程序运行所需的动态库)proc(系统状态文件目录)dev(驱动程序存放路径)etc(系统配置文件及用户数据存放目录)mnt(用于设备安装的目录)usr(用于存放用户程序和配置文件的目录)qt(存放QTOPIA运行文件)。使用烧写工具mkcramfs将其专成一个映像文件。24在9TOPIA中增加应用程序QTOPIA是为基于Linux的PDA、智能电话和其他移动设备设计的一个全面的,可以用户化的应用程序平台和用户界面。当编写好QTOPIA应用程序源文件(在本文中的源文件为ledcpp ledh maincpp,存放路径homeled)安下面的命令就可以生成arm板子上跑的程序:cdhomel edprogenn led一0 ledprotmake hellopro一0 makefi lemakecp ledusr10calrootqtbin然后在usrlocalrootqtappsApplications下添力Hleddesktop(启动后可以在屏幕上显示led程序),最后用mkcramfs烧写就可以了。交叉编译Qt/Embedded库当有了ARM的linux编译器后,就可以使用这个编译器进行交叉编译QtEmbedded库的源代码,从而产生一个以ARM为目标代码的QtEmbedded库。具体过程如下:(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的安装选项有很多个,可以直接输入“”来运行配置。QtEmbedded的安装选项还允许自己定制一个配置文件,来有选择的编译Q忱,llbedded库,这个安装选项是“-qconfiglocal”;当指定这个选顼时,Qr/Embedded库中安装过程会寻找qt一237src/tools,qconfiglocalh这个文件来编译链接Qt/Embedded库。在定制中添加了对触摸屏显示的支持。3linux下的I ed的设备驱动程序的实现在Linux下,设备驱动程序可以看成Linux内核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件实现得应用程序可以像操作普通文件一样来操作外部设备,可以使用和操作文件中相同的、标准的系统调用接口函数来完成对硬件设备的打开、关闭、读写和io控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。本系统平台使用的嵌入式armLinux系统在内核主要功能上与Linux操作系统没本质区别,所以驱动程序要实现的任务也一样,只要编译时使用的编译器、部分头文件和库文件等要涉及到具体处理器体系结构,这些都可以在Makefile文件中具体指定。LED一0NALL=OxOf点亮所有的led数码生成窗体类的头文件和实现文件界面文件使用uic工具产生出窗体类的头文件和实现文件,例如hell0ui节目文件产生hello窗体类的头文件和实现文件,具体方法如下:#cd qt一237bin#uico helloh helloui#uico hellocppimpl he1loh helIoui这样我们就得到hello窗体类的头文件helloh和实现文件hello_cppo接下来根据我们要实现的具体功能,在hellocpp文件里添加相应的代码。31编写主函数main()一个QtEmbedded应用程序应该包含一个主函数,主函数所在的文件名是maincpp。主函数是应用程序执行的入口点。32编辑工程文件在工程文件中添加窗体类的头文件、实现文件和主函数交件。QTEmbeddedQTEmbedded是著名的QT库开放商正在进行的面向嵌入式系统的QT版本。这个版本的主要特点是可移植性较好,许多基于QT的X Window程序可以非常方便地移植到嵌入式版本。QTEmbedded采用两种方式进行发布:在GPL协议下发布的free版与专门针对商业应用的commercial版本。如果你要在商业中使用这个库,需要支付昂贵的授权费用。QtEmbedded是著名的Qt库开发商的Trolltech公司开发地观向嵌入式系统的Qt版本。因为Qt是KDE等项目使用的GUl支持库,许多基于Qt的x window程序因此可以非常方便地移植到QtEmbedded上。QtEmbedded同样是Serverclient结构。QtEmbedded延续了Qt在X上的强大功能,在底层摒弃了X lib,仅采用framebuffer作为底层图形接口。同时,将外部输入设备抽象为keyboard和mouse输入事件,底层接口支持键盘、GPM鼠标、触摸屏以及用户自定义的设备等。QtEmbedded类库完全采用c+封装。丰富的控件资源和较好的可移植性是QtEmbedded是为优秀的一方面。它的类库接口完全兼容于同版本的Qtx11,使用X下的开发工具可以直接开发基于QtEmbedded的应用程序QUI界面。与前两种GUI系统不同的是,QtEmbedded的底层图形引擎只能采用framebuffer。这就注定了它是针对高端嵌入式图形领域的应用面设计的。但由于该库的代码追求面面俱到,以增加它对多种硬件设备的支持,造成了其底层代码比较凌乱、各种补丁较多的问题。QtEmbedded的结构也过于复杂臃肿,很难进行底层的扩充、定制和移植。嵌入式GuI的系统架构11基于嵌入式Linux的GuI系统底层实现基础一个能够移植到多种硬件平台上的嵌入式GUI系统,应用至少抽象出两类设备:基于图形显示设备(如VGA卡)的图形抽象层GAL(Graphic Abstract Layer),基于输入设备(如键盘,触摸层等)的输入抽象层IAL(Input Abstract Layer),如图1所示:抽象层的概念类似Linux内核虚拟文件系统的概念,定义了一组不依赖于任何特殊硬件的抽象接口,所有顶层的图形操作和输入处理都建立在抽象接口上。GAL层完成系统对具体的显示硬件设备的操作,极大程度上陷蔽各种不同硬件的技术实现细节,为系统程序开发人员提供统一的图形编程接口。IAL层则需要实现对于各类不同输入设备的控制操作,提供统一的调用接口。GAL层与IAL层的设计概念,可以极大程度地提高嵌入式GUI的可移植性。而用于实现这一抽象接口的底层代码称为“图形引擎”或“输入引擎”,类似操作系统中的驱动程序。这实际是一种面向对象的程序结构。越)I编程接口嵌入式GUIGAL层L层设备抽象层图形显示设备输入设备系统硬件目前应用于嵌入式Linux系统中比较成熟,功能也比较强大的GUI系统底层支持库有SVGAlib、LibGGI、Xwindo、Frame buffer等。12底层图形发生引擎的介绍Linux图形领域中常见的基础设施,是因为这些系统(或者函数库)一般作为其他高级图形或者图形应用程序的基本函数库。这些系统(或者函数库)主要包括:sVGAlib、LibGGI、windo、Frame buffer等,详述如下:121 LibGGILibGGI试图建立一个一般性的图形接口,而这个抽象接口连同样关的输入(鼠标、键盘、游戏杆等)抽象接口一起,可以方便地运行在X Windows、SVGALib、FrameBuffer等等之上。建立在“bGGI之上的应用程序,不经重新编译,就可以在上述这些底层图形接口上运行。但是现在LibGGI的发展几乎停滞。122 SVGAlibSVGAlibj是Linux系统中最早出现的非X图形支持库。这个库从最初对标准VGA兼容芯片的支持开始,一直发展到对老式SVGA芯片的支持对及对现今流行的高级视频芯片支持。它为用户提供了在控制台上进行图形编程的接口,使用户可以在PC兼容系统上方便地获得支持。但该系统有如下不足:1)接口杂乱。SVGALib从初的Vgalib发展而来,保留下了老系统许多接口,而些接口却不能良好地迎合新显示芯片的图形能力。2)未能较好地隐藏硬件细节。许多操作不能自动使用显示芯片的加速能力支持。3)可移植性差。SVGALib目前只能运行在x86平台上,对其他平台的支持较差。4)发展缓慢,sVGALib作为一个老的图形支持库,目前的应用范围越来越尤其在Linux内核增加了Frame Buffer驱动支持之后,有逐渐被其他图形库替代的迹象。5)对应用的支持能力较差。SVGALib作为一个图形库对高级图形功能的支持,比如直线和曲线等,不能令人满意。123 Frame BufferFrame Buffer是出现在22xx内核中的一种驱动程序接口,将显示设备抽象为帧缓冲区可以将它看成显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上Frame Buffer设备还提供了若干ioctl命令,通过这些命令,可以获得显示设备一些固定信息(如显示内存大小)与显示模式相关的可变信息(如分辨率、象素结构、每扫描线的字节宽度)、当前内核支持的加速显示卡的类型(通过固定信息得到,这种类型通常是和特定显示芯片相关的),以及伪彩色模式下的调色信息等。但Frame Buffer只是一个提供显示内存和显示芯片寄存器从物理内存映射到进程地址空间中的设备。所以,对于应用程序而言,如果希望在Frame Buffer之上进行图形编程,还需要完成其他许多工作。2现有嵌入式GUI的叙述在Linux之上进行(实时)嵌入式系统开发的厂商,一般选择如下几种GUI系统:紧缩的X Window系统、MiniGUI、MicroWindows、QTEmbedded等。21紧缩的x Window系统X Window是Linux以及其他类UNIX系统的标准GUIx window系统采用标准的客户服务器体系结构,具有可扩展性好、可移植性好等优点;但该系统的庞大、累赘和低效率。为了获得应用程序的可移植性,许多厂家都试图通过对XWindow系统的紧缩开发,使之能够在嵌入式系统上运行。国外已经开发出了大小约为800K的X服务器。这对西方国家来说基本能够满足嵌入式系统的需求了。但该系统的源代码尚不开放,从而很难进行本地化开发。22 MicrOWindOwsMicroWindows是一个开放源码的项目,目前由美国一家公司在主持开发该项目的开发非常活跃,国内也有人参与了其中的开发,并编写了GB2312等字符集的支持该项目的主要特色在于提供了比较完善的图形功能,包括一些高级的功能,比如Alpha混合,三维支持,TrueType字体支持等但作为一个窗口系统,该项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完备,键盘和鼠标等驱动还很不完善23 QTEmbeddedQTEmbedded是著名的QT库开放商正在进行的面向嵌入式系统的QT版本。这个版本的主要特点是可移植性较好,许多基于QT的X Window程序可以非常方便地移植到嵌入式版本。QTEmbedded采用两种方式进行发布:在GPL协议下发布的free版与专门针对商业应用的commercial版本。如果你要在商业中使用这个库,需要支付昂贵的授权费用。24 MiniGUI简介MiniGUI是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。它主要运行于Linux控制台,实际也可以运行一种具有POSIX线程支持的POSIX兼容系统上。MiniGUI同时也是国内最早出现的几个自由软件项目之一。MiniGUI为了得到最大的效率,采用基于线程的多窗口机制。这种结构对数控系统这样任务单一、实时要求高的系统来讲,是最佳解决方案。但如果系统中运行的任务并不是单一的,就有可能因为一个任务的失效而影响其他任务。因此,提高GuI系统的健壮性就成为另一个亟待解决的问题。3每个系统设计优点及特色31 三种嵌入式GUI系统的分析与比较31-1 MicrowindowsWicrowindows是一个典型的基于ServerClient体系结构的GUI系统,基本分为三层,如图2所示最底去是面向图形显示和键盘、鼠标或触摸屏的驱动程序;中间层提供底层硬件的抽象接口,并进行窗口管理最高层分别提供兼容于xWindow和ECMA APIW(Win32子集)的API。NalloX API ECMA APIW 窗口管理硬件设备层显示硬件输入设备其中使用Nanox接口听API与X接口兼容,但是该接口没有提供窗口管理,如窗口移动和窗口剪切等高级功能,系统中需要首先启动nanoX的Server程序nanoxserver和窗口管理程序nanowm用户程序连接nanoX的Server获得自身的窗口绘制操作使用ECMAAPIW编写的应用程序无需nanoxserver和nanowm,可直接运行。Microwindows提供了相对完善的图形功能和一些高级的特性,如Alpha混合、三维支持和TrueType字体支持该统为了提高运行速度,也改进了基于socket套接字的X实现模式,采用了基于消息机制的serverClient传输机制Microwindows也有一些通用的窗口控件,但其图形引擎存在许多问题,具体如下:无任何硬件加速能力,*图形引擎中存在许多低效算法,如在圆弧函数的逐点判断剪切的问题。2003年Microwindows推出版本O90后,该项目的发展开始陷于停滞状态。三种嵌入式GUI的比较与分析比较上述几个嵌入式GUI系统,可以知道目前比较成熟同时得到最多开发人员认可的有QTEmbedded、MiniGUI、MicroWimdows等。MiniGUI和Microwimdows均为自由软件,前者遵循LGPL条款,后者遵循MPL条款。这两个系统的技术路线也有所不同。MiniGUI的策略是首先建立在比较成熟的图形引擎之上,比如SVGALib和LibGGI,开发的重点在于窗口系统、图形接口之上;MicroWimdows目前的开发重点则在底层的图形引擎之上,窗口系统和图形接口方面的功能比较欠缺。例如MiniGUI有一套用来支持多字符集和多编码的函数接口,可以支持各种常见的字符集,包括GB、BIG5、UNICODE等,而MicroWimdows在多字符的支持上尚没有统一接口。QTEmbedded系统则是针对高性能手持设备和移动设备设计,对系统的各种要素要求很高,也是目前商业化应用最多的一款商业收费嵌入式GUI系统。1inux下的led的设备驱动程序的实现在Linux下,设备驱动程序可以看成Linux内核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件实现了的细节,使得应用程序可以像操作普通文件一样来操作外部设备,可以使用和操作文件中相同的、标准的系统调用接口函数来完成对硬件设备的打开、关闭、读写和io控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。本系统平台使用的嵌入式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操作接口函数open、read、write、close的实现,本文中的led数码灯的亮灭是通过write函数来实现的。32应用程序的实现为了控制led数码灯需要在应用程序中加载一下的头文件:#include#include#include本文中设计的qt3J程序通过四个led数码灯来模拟开发板上的led数码灯的显示模式,非常赢观的实现了led数码灯的显示过程,可以以跑马灯的形式显示,还可以单个控制数码灯的显示控制led数码灯程序实现过程,打开led设备,led在系统中对应的设备文件为devledO,采用系统调用函数ledfd=open(。devledO。,o RDw
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川铁道职业学院《塑料加工技术》2023-2024学年第二学期期末试卷
- 山西财经大学《针灸医籍选》2023-2024学年第二学期期末试卷
- 武夷山职业学院《医学科研方法入门及设计》2023-2024学年第二学期期末试卷
- 浙江纺织服装职业技术学院《中医内科学及研究》2023-2024学年第一学期期末试卷
- 四川省通江县2024-2025学年初三下学期5月模拟考试生物试题试卷含解析
- 四川省绵阳富乐国际2025年中考模拟考试化学试题理工类试卷含解析
- 唐山市迁安市2025年五下数学期末达标测试试题含答案
- 四川省绵阳第五中学2025年中考模拟最后十套:化学试题(七)考前提分仿真卷含解析
- 浙江警官职业学院《电工电子技术(下)》2023-2024学年第二学期期末试卷
- 潍坊医学院《工程项目经济管理与建筑法规》2023-2024学年第二学期期末试卷
- 国企治理三会一层详解
- GB/T 788-1999图书和杂志开本及其幅面尺寸
- GB/T 756-2010旋转电机圆柱形轴伸
- GB/T 6172.1-2000六角薄螺母
- GB/T 19189-2011压力容器用调质高强度钢板
- 公司合格供应商清单
- GB/T 13007-2011离心泵效率
- 2022年物流仓储行业REITs研究
- 政治学基础课件全部终稿
- 朱兰质量手册课件
- 小猪佩奇Peppa-Pig第一季1-2集英文台词
评论
0/150
提交评论