2) 专用性强
嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。同时,针对不同的任务,往往需要对系统进行较大更改;程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全不同的概念。 3) 系统精简
嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能的 设计及实现过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。
4) 高实时性
高实时性的操作系统软件是嵌入式软件的基本要求。而且软件要求固化存储,以提高速度。软件代码要求高质量和高可靠性。 5)多任务的操作系统
嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。嵌入式系统的应用程序可以没有操作系统而直接在芯片上运行;但是为了合理地调度多任务,利用系统资源、系统函数以及专家库函数接口,用户必须自行选配RTOS(Real Time Operating System)开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。 6)专门的开发工具和环境
嵌入式系统开发需要专门的开发工具和环境。由于嵌入式系统本身不具备自主开发能力,即使设计完成以后,用户通常也不能对其中的程序功能进行修改,因此必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。
1.2 嵌入式系统图形用户界面现状
由于受到硬件条件等的限制,现在许多嵌入式设备的用户界面仍然非常简单。看习惯了PC机上华丽美观的用户界面,总希望在这些设备上也能得到同样美的享受。随着嵌入式设备的硬件条件提高,对于嵌入式系统中轻量级图形用户界面的需求也越来越迫切。这些系统一般不希望建立在庞大累赘的、非常消耗资源的操作系统和图形用户界面之上,比如Windows。同时,嵌入式系统对图形用户界面轻量型和可定制方面有较高的要求,它们希望图形用户界面占用资源少、性能高、可靠性高、易移植、可配置。
5
本论文的选题正是结合Linux操作系统和嵌入式系统研究这两个热点领域,选择适合于嵌入式特点的图形用户界面QT来进行应用程序开发。
1.3 本文章节安排
论文的结构安排如下:
第一章,前沿,分析并阐述了本课题研究背景及意义。
第二章,QT编程环境,首先介绍了QT的概述, QT环境的搭建以及要求。
第三,QT应用程序开发实例,介绍了QT应用程序开发所涉及的软、硬件平台,完成应用程序实例,并移植到GT2440开发板。
第四章,总结,对已完成的工作进行了简要总结,并指出了其中的不足,并对今后的做了展望。
6
第二章 QT编程环境
2.1 Qt概述
Qt是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司于1995年底出品。Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序员 就已经开始设计 Qt 了,Qt 的第一个商业版本于 1995 年推出。2008年1月31日,Nokia公司宣布通过公开竞购的方式收购TrollTech公司,旗下包括Qt在内的技术都归入Nokia旗下。并且Nokia针对自己的移动设备平台规划的需要,将Qt按不同的版本发行。
Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件之间的协同工作变得十分简单。
Qt包括多达250个以上的 C++ 类,还提供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。还包括下列功能:
(1)支持 2D/3D 图形渲染,支持 OpenGL 大量的开发文档; (2)XML 支持;
(3)Webkit 引擎的集成,可以实现本地界面与Web内容的无缝集成。
2.2 Qt开发环境搭建
Qt/Embedded是基于Qt的嵌入式GUI和应用程序开发的工具包,它可运行多种嵌入式设备上,主要运行在嵌入式Linux系统上,并且需要C++编译器的支持,并为嵌入式应用程序提供Qt的标准API。
Qt/Embedded 的API是基于面向对象技术的。在应用程序开发上使用与Qt相同的工具包,只需在目标嵌入式平台上重新编译即可。使用所熟悉的桌面开发工具,来编写和保存一个嵌入式应用程序的源代码树,在移植到多种嵌入式平台时,只需要重新编译代码。
Qt/Embedded提供自身的轻量级窗口系统,比使用Xlib和X Window更加紧凑; Qt/Embedded 的设计原则是不依赖于X server或者Xlib,而是直接访问帧缓存,同其他解决方案如Qt/X11相比这样做最显著的效果是减少了内存消耗。只需要一个Qt/Embedded动态链接库就足以替代X server、Xlib库和其他嵌入式解决方案的图形工具包
7
2.2.1 安装Qt对系统的要求
安装qt的过程在不同的平台上会有所不同,主要在嵌入式linux平台上安装。若需要提供对OpenSSL的支持,需要通过单独安装OpenSSL Toolkit,来获得Secure Sockets Layer (SSL)。对于不同的平台上,会有不同的要求。如果要在qt上对QtWebKit模块的支持,必须使用uClibc 0.9.29或者更高的版本,以对pthread的支持。
在内存方面的要求主要取决于体系架构以及在编译过程中使能的QT选项。
2.2.2 Qt开发环境及工具
Qt/Embedded的应用程序也可以使用标准工具在用户熟悉的环境下的工具开发,如Window平台下的Visual C++和Borland C++ Builder,Unix平台下的KDevelop等。在Unix平台下编译Qt/Embedded应用程序,可以在独立的控制台模式,也可以用X11应 用程序虚拟的帧缓存。通过指定目标设备的长、宽和色深,虚拟帧缓存可以点对点的模拟物理设备,免除了调试过程中反复擦写闪存,加快了编译、链接、运行的环节。Qt/Embedded提供许多支持嵌入式开发的工具,其中两个非常重要的Qt工具qmake和Qt Designer。Qmake可以为Qt/Embedded链接库和应用程序生成makefile文件。Qmake可以从项目文件(.pro)为多种平台 生成makefile文件,通过不同设置可以使应用程序方便的在多种平台间移植。Qt Designer可以使用可视化的方式设计对话框、窗口的,替代了设计代码手工编写。在Qt Designer中还可以使用布局管理器来平滑的设置窗口部件的布局,使用代码编写器编写代码,并且整合了qmake。 2.2.3 Qt-Embedded-Linux安装 (1)下载源码包,解压;
http://download.qtsoftware.com/qt/source/常用官网 qt news:http://www.qtsoftware.com/about/news qt downloads:http://www.qtsoftware.com/downloads qt Quarterly:http://doc.trolltech.com/qq/
qt bugs:http://www.qtsoftware.com/developer/task-tracker
qt Supported Platforms:http://doc.trolltech.com/supported-platforms.html qt Version Changes :http://www.qtsoftware.com/developer/changes qt books: http://www.qtsoftware.com/developer/books
8
(2)建立支持库
通过./configure来设置,主要配置可以通过--help来获得帮助;之后用make命令,然后用make install 命令。将库安装到指定的路径下面。其中的设置包括指定安装的路径;未配置的话,默认的路径是/usr/local/Trolltech/QtEmbedded-4.5.0; (3)设置环境变量
为了能够使用Qt for Embedded Linux, 必须导出的PATH变量有qmake, moc 以及其他Qt for Embedded Linux 的工具, 以及LD_LIBRARY_PAT。 执行:
PATH=/usr/local/Trolltech/QtEmbedded-4.5.0/bin:$PATH export PATH
(4)建立虚拟的frambuffer。
建立虚拟的frambuffer,需要安装X11 Platforms。 2.2.4 嵌入式Linux中Qt环境变量
QT环境变量如下:
POINTERCAL_FILE:指定文件包含的数据,用来校准触摸笔设备。同时可以参考QWSCalibratedMouseHandler and Qt for Embedded Linux Pointer Handling.
QT_ONSCREEN_PAINT:如果定义了的话,可以用来将控件显示在屏幕上。如果没有其他控件在同一个区域的话,该设备响应的区域将不会随着屏幕设备驱动的改变而改变。设置这个环境变量相当于在控件中应用程序中设置Qt::WA_PaintOnScreen。
QWS_SW_CURSOR:如果定义了的话,软件鼠标的光标将一直是可用的。(即使使用硬件加速驱动器来支持硬件光标)
QWS_DISPLAY:指定显示形式和framebuffer.例如:export QWS_DISPLAY=
QWS_SIZE:指定嵌入式linux qt窗口在屏幕上的大小。export QWS_SIZE=
QWS_MOUSE_PROTO: xport QWS_MOUSE_PROTO=
QWS_KEYBOARD为输入设备指定输入设备和驱动。比如:export
9