




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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/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 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. Whats 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/Slots1 引言由于嵌入式系统的特殊性,它一般不会建立在庞大的操作系统以及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 MicroWindowsMicroWindows是由美国CenturySoftware 公司开发的开放源码的嵌入式GUI项目。它不需要其他图形系统的支持,可以充分利用Linux提供的FrameBuffer机制来进行图形显示。同时在底层提供了对多种芯片的支持,基本上用C语言实现,因此移植性较好。2.3 MiniGUI当然,我们国家的MiniGUI也是一个比较成熟的图形用户界面系统,面向基于Linux的实时嵌入式系统,使用现有成熟的图形引擎(SV2GALib/LibGGI),采用类似Win32的线程机制,集成了多字体和多字符集,支持硬件加速能力,充分利用显示内存。2.4 OpenGUIOpenGUI在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(实现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) 采用宿主机/目标机的开发模式,在宿主机上搭建交叉编译环境22) ViVi(Linux的引导程序)的移植ViVi是三星公司专门为s3c2410加载Linux内核。3) Linux内核移植和文件系统的制作内核的移植比较复杂,这也是采用Linux的繁琐之处。移植采用2.4.x的内核源码,针对相应的硬件平台(S3C2410),修改部分体系结构相关的源码,主要是汇编语言部分,添加相应的驱动(FB“帧缓冲”驱动程序、鼠标、键盘类设备驱动程序等),再裁剪内核,去掉无关选项,将配置好的内核交叉编译后,生成映像文件,烧写到开发板的flash中。文件系统采用jffs2,通过busybox制作Linux需要的命令,建立基本目录和设备文件等,最后通过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开始正常工作,并将缓冲区的内容不断发送到LCD上。这个过程是基于DMA对LCD的不断刷性。基于该特性,FrameBuffer驱动程序必须将画面缓冲区的存储空间重新映射到一个不加高缓存和写缓存的虚拟地址空间中,这样才能保证应用程序通过mmap()系统调用将该缓存映射到用户空间后,该画面缓存的写操作能够实时地体现到LCD上。Qt/Embedded中,Qscreen类为抽象出的底层显示设备基类,其中声明了对于显示设备的基本描述和操作方式。另一个重要的基类是QGfx类,它抽象出对于显示设备的具体操作接口,如选择画线、画矩形和alpha操作等。这两个基类是Qt/Embedded图形引擎的底层抽象。其中具体函数基本都是虚函数,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 在宿主机上搭建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;qtopia-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命令分别配置各个软件包的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程序了,先来测试一下,在终端下输入qvfb5&,让它在后台运行,然后执行qpe qws,即可看到qtopia的运行界面,如图3所示。图3 qtopia的运行界面5.2 Qt/Embedded 编程核心在宿主机上建立好开发环境后,就可以在上面开发应用程序了,开发后的程序先在qvfb上运行调试,通过之后,再移植到开发板上,方便快捷。Qt/Embedded软件体系结构如图4所示。该图比较了Qt/Embedded和X11的体系结构。Qt/Embedded摒弃了X lib库,采用帧缓冲(FrameBuffer)作为底层图形接口。同时将外部输入设备抽象为键盘和鼠标事件。Qt/Embedded底层图形接口采用mmap()系统调用,将显示设备抽象为帧缓冲,从而应用程序可以直接写内核FrameBuffer,避免了使用繁琐的X lib/Server机制,这正是资源相对紧张的嵌入式系统所需要的。图4 Qt的软件层次结构Signals/Slots是Qt编程的基础,也是核心,如果没有它,就失去了Qt的活力。Signals/Slots是对象间通信的手段,它不同于传统的回调函数,增加了应用程序的可靠性和安全性。当某个对象的状态发生改变的时候,它发出信号,让另一个或者多个对象的插槽接收,尽管它并不知道哪些函数定义了插槽,而插槽也不知道要怎样接受。Signals/Slots真正实现了封装的概念,信号与插槽不必一一对应6。下面是一个简单的信号与插槽的部分代码示例:QApplication app(argc, argv);QPushButton quit(click me, 0);quit.resize(100, 30);quit.setFont(QFont(Times, 18, QFont:Bold);QObject:connect(&quit, SIGNAL(clicked(), &app, SLOT(quit();app.setMainWidget(&quit);quit.show();return app.exec();QApplication类负责应用程序的控制流和主要设置,它包括系统设置函数(如fontMetrics()、事件处理函数(如exec()、文本处理(如translate()、高级光标处理(如overrideCursor()等,处理和调度所有来自窗口系统和其他资源的事件,管理程序的开始和结束。QObject类是所有能够处理信号、插槽和事件的Qt对象的基类,能够创建带有父对象及其名字的对象,对象的父对象可以看作该对象的所有者。QObject:connect(&quit, SIGNAL(clicked(), &app, SLOT(quit()实现了quit对象和app对象的通信,只要前者一产生clicked信号,后者马上做出响应。编译上述代码,输出clickme可执行文件,在qvfb模拟环境下,有两种方式执行它。方法一,启动qvfb,在命令行中直接输入./clickme qws,即可看到单个clickme应用程序在qvfb中运行,点击按钮,立即退出;方法二,将该应用程序加到Qtopia桌面环境下运行,在执行clickme之前,在$QPEDIR/apps/Applications目录下新建clickme.desktop文件,编辑该文件:Desktop EntryComment=A click ProgramExec=clickmeIcon=Type=ApplicationName=clickmeNameno=KlokkeNamede=Uhr然后把可执行文件clickme拷贝到$QPEDIR/bin下,在后台启动qvfb,运行qpe qws,这是在Qtopia界面上就看到了clickme应用程序图标,运行之,如图5所示,应用程序界面上出现了clickme图标,点击它即可运行。图5 clickme应用程序示例5.3 开发板上的移植交叉编译Qt/Embedded,方法同宿主机上编译类似,将编译器换成arm-linux-gcc,修改qt-2.3.7/configs/linux-arm-g+-shared文件,将其中的相应行改为:SYSCONF_CXX=/home/bull/2.95.3/bin/arm-linux-g+;SYSCONF_CC=/home/bull/2.95.3/bin/arm-linux-gcc; SYSCONF_LINK=/home/bull/2.95.3/bin/arm-linux-gcc;SYSCONF_LINK_SHLIB=/home/bull/2.95.3/bin/arm-linux-gcc; SYSCONF_AR=/home/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 嵌入式开发职业生涯交流试题及答案
- 测试执行中常见的错误与解决方案试题及答案
- 探索软件缺陷管理的技巧试题及答案
- 公路交通工程试车试题及答案
- 四级计算机考试日常练习试题及答案
- 安全生产维修管理制度
- 广东会所店长管理制度
- 出口企业备案管理制度
- 公路视频监控管理制度
- 地面保洁人员管理制度
- 国家开放大学一网一平台电大《建筑测量》实验报告1-5题库
- 对外投资合作国别(地区)指南 -柬埔寨-20230619-00335
- (新平台)国家开放大学《建设法规》形考任务1-4参考答案
- 关于熊猫的资料
- 华为认证HCIP安全V4.0-H12-725考试复习题库大全-上(单选、多选题)
- 华为认证HCIP安全V4.0-H12-725考试复习题库大全-下(判断、填空、简答题)
- 医院院长任期经济责任审计述职报告材料
- 《有限元分析及应用》(曾攀清华大学出版社)第四章课后习题答案
- 益脉康滴丸在治疗视网膜概要
- 05s502图集阀门井安装图集
- 房屋交接书(标准版本)
评论
0/150
提交评论