为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于Linux嵌入式开发板的Qt的移植与应用

2018-09-22 40页 doc 1MB 34阅读

用户头像 个人认证

北溟愚鱼

暂无简介

举报
基于Linux嵌入式开发板的Qt的移植与应用 普 通 本 科 毕 业 设 计 题目:基于Linux嵌入式开发板的Qt的移植与应用 二O一一 年 五 月 摘 要 嵌入式 Linux是以Linux为基础的嵌入式操作系统,Linux有着开放源代码,内核小、效率高,免费的OS等优点。它被广泛应用在移动电话、个人数字助理(PDA)、媒体播放器、消费性电子产品以及航空航天等领域中。 Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组...
基于Linux嵌入式开发板的Qt的移植与应用
普 通 本 科 毕 业 设 计 题目:基于Linux嵌入式开发板的Qt的移植与应用 二O一一 年 五 月 摘 要 嵌入式 Linux是以Linux为基础的嵌入式操作系统,Linux有着开放源代码,内核小、效率高,免费的OS等优点。它被广泛应用在移动电话、个人数字助理(PDA)、媒体播放器、消费性电子产品以及航空航天等领域中。 Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础。基本上,Qt同X Window上的Motif,Openwin,GTK等图形界面库和Windows平台上的MFC,OWL,VCL,ATL 是同类型的东西,但Qt具有优良的跨平台特性、面向对象、丰富的API、大量的开发文档等优点。在嵌入式平台上开发用户图形界面,选择Qt是一个很好的选择。 本设计采用基于ARM9EJ-S构架的AT91SAM9261芯片的嵌入式开发套件,并详细介绍了套件的硬件和Linux嵌入式操作系统。 本文给出了tslib 、Qt-Extended-4.4.3、Qt-Embedded-4.7.0在Linux嵌入式开发板上的移植方法。介绍了Qt Creator的使用方法和Qt应用程序在开发板上的使用方法。 【关键词】Qt Qt-Extended-4.4.3 Qt-Embedded-4.7.0 tslib Abstract Embedded Linux is a embedded operating system based on Linux. Linux has many features, for example, open source, the kernel is small, efficient, free OS and so on. It is widely used in mobile phones, personal digital assistant (PDA), media players, consumer electronics and aerospace fields. Qt is a cross-platform development of C++ graphical user interface application framework which is developed by Nokia. It provides all the required functions to the application developers to build-the-art graphical user interface. Qt is fully object oriented, easily extensible, and allows true component programming manner. Since early 1996, Qt into the business world, it has become a worldwide success of thousands of applications that base. Qt is also the popular Linux desktop environment KDE foundation. Basically, Qt is the same with Motif, Openwin, GTK graphical interface libraries on X Window and MFC, OWL, VCL, ATL on Windows platform, but Qt has many advantages, for example: excellent cross-platform, object-oriented, rich API, a large number of development documents and soon. To develop graphical user interface on embedded platform, select the Qt is a good choice. The design framework based on the AT91SAM9261 ARM9EJ-S Development Kit for embedded chips, and details of the package of hardware and embedded Linux operating system. This paper explains the transplantation of tslib, Qt-Extended-4.4.3, Qt-Embedded-4.7.0 in the Linux embedded development board. Introduces the use of Qt Creator and the method to run Qt applications on the development board. 【Key words】Qt; Qt-Extended-4.4.3; Qt-Embedded-4.7.0; tslib 目 录 1 1 绪论 1 1.1 基于ARM的Linux的嵌入式系统平台概述 1 1.1.1 嵌入式硬件环境 3 1.1.2 嵌入式操作系统 4 1.2 本文的意义 4 1.3 本文所做的工作 5 2 Qt-Extended-4.4.3的移植 6 2.1 准备资源 6 2.2 搭建移植环境 7 2.2.1在windows下安装ssh软件 7 2.2.2安装虚拟机vmware和Ubuntu系统 8 2.2.3开通Ubuntu下的nfs和ssh服务 10 2.2.4安装交叉编译工具 11 2.3 安装tslib 11 2.3.1安装编译工具和库文件 11 2.3.2 配置,编译,安装tslib 12 2.4 配置,编译,安装Qt-Extended-4.4.3 12 2.4.1配置Qt-Extended-4.4.3 13 2.4.2编译Qt-Extended-4.4.3 13 2.4.3安装Qt-Extended-4.4.3 13 2.5 移植Qt-Extended-4.4.3 14 2.5.1 移植tslib 14 2.5.2 移植Qt-Extended-4.4.3 14 2.5.3 设置环境变量 15 2.5.4上传时域文件 15 2.5.5 运行Qt-Extended-4.4.3 16 3 Qt-Embedded-4.7.0的移植 17 3.1 准备资源 17 3.2 配置Qt-Embedded-4.7.0 18 3.3 编译Qt-Embedded-4.7.0 18 3.4 安装Qt-Embedded-4.7.0 19 3.5 移植Qt-Embedded-4.7.0 19 3.5.1 移植tslib 19 3.5.2 移植Qt-Embedded-4.7.0 19 4 Qt Creator的使用方法 20 4.1 Windows下Qt Creator开发环境的建立 20 4.2 一个login实例 20 4.2.1启动Qt Creator 21 4.2.2 新建一个工程 25 4.2.3 设计widget.ui 25 4.2.4 新建一个dialog 28 4.2.5 添加一个类 28 4.2.6 编写代码 28 4.2.7运行程序 29 5 测试移植效果 29 5.1 测试Qt Embedded的移植效果 29 5.1.1交叉编译和运行方法 30 5.1.2中文显示 30 5.2 测试Qt Extended的移植效果 30 5.2.1 添加源代码 30 5.2.2 为应用程序添加图标 31 5.2.3 将Qt4程序转换成qt-extended-4.4.3程序 32 5.2.4 添加对login应用程序的支持 32 5.2.5 在qt-extended-4.4.3下编译login 32 5.2.6 运行login应用程序 32 5.2.7 中文显示 33 6总结与展望 33 6.1总结 33 6.2展望 34 参考文献 35 致 谢 1 绪论 随着信息技术的发展和数字化产品的普及,嵌入式设备被广泛应用。主流的嵌入式操作系统有WinCE,Linux,VxWorks, pSOS, PalmOS等等。Linux的优势在于其完全开放的操作系统,可以给开发者一定的独立性和自由度,允许它们自己掌控自己的产品。另外,是否具有良好的人机图形界面,方便用户操作,是衡量嵌入式设备性能的重要标准。Qt/Embedded是著名的Qt库开发商Trolltech公司开发的基于嵌入式Linux系统的Qt版本,广泛应用的KDE等项目即使用Qt作为支持库,它以良好的代码结构、强大的可定制功能以及统一的API都给用户提供了极高的便利性,QT/Embedded已经逐渐成为GUI的事实标准。 QT/E 是跨平台的C++图形用户界面(GUI)工具包,它是著名的Qt开发商TrollTech发布的面向嵌入式系统的Qt 版本,Qt 是目前KDE等项目使用的GUI 支持库,许多基于Qt的XWindow程序可以非常方便地移植到嵌入式Qt/Embedded 版本上。自从Qt/Embedded发布以来,就有许多嵌入式Linux 开发商利用Qt/Embedded 进行嵌入式GUI 应用开发。TrollTech 公司所发布的面向嵌入式系统的QT/E 版本只提供源代码,用户必须针对自己的嵌入式硬件平台进行裁剪、编译和移植。 在嵌入式开发的过程中一个非常重要的内容就是移植。本提到的Qt的移植包括了对源代码的裁剪、编译和移植。 1.1 基于ARM的Linux的嵌入式系统平台概述 说明一下移植过程中用到的Windows XP系统和Ubuntu系统的主要参数Windows XP系统:CPU:Pentium双核,1.80GHz,内存:1GB。Ubuntu系统:版本:ubuntu-10.10,内存:512M,单核。以下主要对嵌入式系统的硬件环境和操作系统做简单介绍。 1.1.1 嵌入式硬件环境 本设计所用到的硬件环境是杭州迈冲科技有限公司开发的MC9261-EK开发板。它采用ATMEL AT91SAM9261(S)处理器,最新ARM926EJ-S ARM内核,它扩展了DSP指令集和Jazelle Java 加速器,主频190MHz 时性能高达210 MIPS。MC9261-EK开发板外围设备齐全,软件资源丰富,支持Linux-2.6和WinCE5.0操作系统,Linux可配备QT或MiniGUI图形界面,适合信息通信、数据采集、仪器仪、智能交通、医疗设备、数控终端、工业控制等场合,性价比极高[1]。开发板硬件规格如表1-1所示: 表1-1 开发板硬件规格 系统资源 CPU ATMEL AT91SAM9261(S),200MHz 存储 64~256MB NandFlash,2~8MB DataFlash 内存 64MB SDRAM 实时时钟 带后备电池RTC 通信接口 网口 1路10M/100M自适应网,带网络变压器和指示灯 串口 4路RS232串口,1路调试串口,3路数据通信串口 CAN 预留SPI接口,可扩展CAN接口,支持CAN2.0A/B 音频 1路音频输出 LCD 支持3.5-14.1寸TFT-LCD,触摸屏功能 USB 2路USB 2.0 Host接口,1路USB 2.0 Device接口 GPIO GPIO若干,矩阵键盘 存储设备 IDE/CF/SD 支持SD卡存储,预留IDE接口,可扩展IDE/CF接口,连接硬盘或CF卡 工作参数 工作电源 6~30V DC-IN 工作温度 -20~+70℃(可选配全工业级温宽元器件) 工作湿度 5%~95% 尺寸规格 146mmX102mm 以下是核心板资源 · 工业级ATMEL AT91SAM9261处理器,200MHz · 64MB SDRAM · 128MB NandFlash · 2MB DataFlash · 6层高精密工业PCB · 尺寸:73mm X 50.5mm · 2条2x30 PIN插件,方便简单 · 电源:3.3V供电,超低功耗 1.1.2 嵌入式操作系统 本设计基于Linux嵌入式操作系统,该系统使用Linux-2.6.30作为内核,使用U-boot作为Bootloader[2],使用jffs2作为文件系统。 Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰黑客 Linus Torv-alds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。 Bootloader是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。 U-Boot,全称是Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。U-boot目前主要支持的目标操作系统是OpenBSD,NetBSD,FreeBS-D,4.4BSD,Linux,SVR4,Esix,Solaris,Irix,SCO,Dell,NCR,VxW-orks,LynxOS,pSOS,QNX,RTEMS,ARTOS。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。U-boot是一种普遍用于嵌入式系统中的Bootloader。 文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。 JFFS2是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用。JFFS2的全名为Journalling Flash File System Version 2(闪存日志型文件系统第2版),其功能就是管理在MTD设备上实现的日志型文件系统。 1.2 本文的意义  Qt同XWindow上的Motif,Openwin,GTK等图形界面库和Windows平台上的MFC,OWL,VCL,ATL是同类型的东西,但是Qt具有下列优点:优良的跨平台特性、面向对象、丰富的API、支持2D/3D图形渲染,支持O-penGL、大量的开发文档、支持XML、集成Webkit引擎。在嵌入式平台上开发用户图形界面,选择Qt是一个很好的选择。但是在未移植Qt的嵌入式系统平台上并不能运行Qt的应用程序,本文的意义就是移植Qt到嵌入式系统平台上,使得Qt的应用程序能在嵌入式系统平台上运行。 1.3 本文所做的工作 本设计的最终目的是为了将Qt-Extended-4.4.3和Qt-Embedded-4.7.0移植到AT91SAM9261嵌入式开发板上,主要做了以下工作: (1) 准备资源和搭建移植环境 (2) 移植tslib库,使移植后的Qt界面支持触摸屏 (3) 移植Qt-Extended-4.4.3 (4) 移植Qt-Embedded-4.7.0 (5) 对移植后的Qt进行测试 2 Qt-Extended-4.4.3的移植 Qt Extended(2008年9月30日前称Qtopia)是一个软件平台,主要用于采用嵌入式Linux系统的(embedded Linux-based system)的电子手机和移动电话。从4.4版本开始,Qtopia改名为Qt Extended,qt-embedded-4.4.x相当于qtopia-core,qt-extended相当于桌面。2009年3月3日,Qt Software宣布将停止开发作为独立产品的Qt Extended。取而代之的是:Qt Extended 中的一些功能将被转入Qt框架,从而使Qt成为更加丰富的跨平台应用程序框架。Qt Extended的最后一个版本是4.4.3。 Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,广泛用于PDA等掌上设备。Qtopia平台由Qtopia 库和Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序[3]。 Qt-Extended-4.4.3的移植从搭建环境开始进行说明,直到成功移植。移植流程图如图2-1所示: SHAPE \* MERGEFORMAT 图2-1 Qt-Extended-4.4.3移植流程图 2.1 准备资源 到以下四个网站分别下载qt-extended-opensource-src-4.4.3.tar.gz源码包,该包中含有Qt-Extended桌面系统和Qt的一些底层文件, HYPERLINK "http://download.csdn.net/source/1867305下载tslib-1.4.tar.gz" tslib-1.4.tar.gz触摸屏源码包,arm-2007q1-10-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2交叉编译工具,用于Windows XP和Ubuntu之间传文件的软件ssh。 (1)http://sourceforge.net/projects/qpe/files/QPE/qtopia/ (2) http://download.csdn.net/source/1867305 (3)http://www.at91.com/linux4sam/bin/view/Linux4SAM/SoftwareTools (4)http://www.onlinedown.net/soft/20089.htm 2.2 搭建移植环境 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。通过虚拟机软件,可以在一台物理计算机上模拟出一台或多台虚拟的计算机,这些虚拟机完全就像真正的计算机那样进行工作,例如可以安装操作系统、安装应用程序、访问网络资源等等。虚拟系统一样会崩溃,但是,崩溃的只是虚拟机上的操作系统,而不是物理计算机上的操作系统,并且,使用虚拟机的“Undo”(恢复)功能,可以马上恢复虚拟机到安装软件之前的状态。 Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词(译为吾帮托或乌班图),意思是“人性”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu基于Debian发行版和GNOME桌面环境,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。 为了搭建移植环境,需要在Window XP下安装ssh软件和虚拟机,然后在虚拟机上安装Ubuntu系统[4]。装完系统后,需要开通ssh服务和nfs服务,还要安装嵌入式平台AT91SAM9261用到的,并且整个移植过程中都需要用到的交叉编译器arm-none-linux-gnueabi。 2.2.1在windows下安装ssh软件 SSH为Secure Shell的缩写,由IETF的网络工作小组(Network WorkingGroup)所制定;SSH为建立在应用层和传输层基础上的安全。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。 传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。    通过使用SSH,可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。在本设计中主要用来在Windows XP和Ubuntu两个系统之间相互传输文件。 SSH的安装方法很简单,双击软件包即可安装,点击next直到finish。 2.2.2安装虚拟机vmware和Ubuntu系统 由于安装步骤很简单,这里省略其安装过程,只把其中遇到的问题说明一下。安装vmware的过程中出现错误:Failed to create the requested regis-try key error: 1021,解决方法是:windows下,开始->cmd->运行->regedit,把HKEY_LOCAL_MACHINE\SOFTWARE\VMware,Inc. 连同主键一起删除就好了。 Ubuntu系统安装好以后,整个系统用起来不太方便,需要优化几个常用的功能。以下把遇到的几个问题说明一下:在终端里面显示的是绝对路径,当进入了几层目录后,显示的路径会很长,操作起来不太方面,通过以下设置可以只显示相对路径,首先切换到root用户,使用命令,su或者su root,然后根据提示输入root用户的密码即可。在root用户下修改.bashrc文件,打开.bashrc文件的方法为: vi ~/.bashrc 这条命令中,"~"符号的意思是到当前用户的根目录下。将.bashrc文件中PS1开头的几行中的小写的w改成大写的W。比如其中的: PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' 需将其改成: PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W\$ ' 还有一个问题就是在使用vi命令打开文档并编辑的时候,使用方向键时会出现乱码,可以通过安装vim文本编辑器来解决这个问题: apt-get install vim 解释一下这个安装命令:apt(Advanced Packaging Tool的缩写,是一款强大的包管理工具)是Debian安装软件的包管理工具命令;此命令会从/etc/apt/sources.list这个资源列表下去搜索vim这个软件;install是apt-get的参数,是安装软件的意思。 2.2.3开通Ubuntu下的nfs和ssh服务 Network File System的简写。NFS是由Sun公司发展,并於1984年推出,NFS是一个RPC service,它使我们能够达到档案的共享,它的设计是为了在不同的系统间使用,所以它的通讯协议设计与主机及作业系统无关。当使用者想用远端档案时只要用mount就可把remote档案系统挂接在自己的档案系统之下,使得远端的档案使用上和local机器的档案没两样。 在嵌入式Linux开发的时候,常常需要使用nfs服务以方便程序的调试和系统的开发。使用nfs,用户可以将主机中的文件挂载到开发板上直接使用,而不用每次改动之后都下载到板子上,这样能够大大加快程序的调试和项目的进展。Ubuntu下安装nfs服务的步骤[5]如下: (1)安装nfs服务器端和客户端 安装nfs服务器端和客户端可以使用如下命令: sudo apt-get install nfs-kernel-server nfs-common portmap 其中sudo是普通用户行使超级用户的权限的意思,如果已经是在root用户即超级用户,可不使用sudo。 (2) 配置挂载目录和权限 nfs服务器端和客户端安装完成之后,还需要配置挂载目录和访问权限。也就是在/etc/exports文件的最后加入以下内容: /nfsboot *(rw,sync) 解释一下这些内容的含义,/nfsboot是nfs服务器的共享目录,*表示任何 IP 都可以共享这个目录,也可以改为受限的IP,rw表示的对/nfsboot共享目录具有读写权限,sync 表示对/nfsboot共享目录的读写是同步更新的。 (3) 测试是否安装成功 测试方法为:将本地的一个目录挂载到/mnt目录下,然后使用命令查看是否能成功挂载,有时挂载不成功,可重新启动nfs服务再挂。使用如下命令重新启动nfs服务,/etc/init.d/nfs-kernel-server restart,使用如下命令可将本地目录/nfsboot挂载到/mnt目录下: mount 192.168.1.22:/nfsboot /mnt 其中的IP地址192.168.1.22为Ubuntu系统的IP地址,使用df命令或者mount命令都可以查看是否挂载成功。在/mnt目录之外,使用命令: umount /mnt 可以解挂。 (4) 安装ssh服务 SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。SSH安装方法为: apt-get install openssh-server 安装完成之后需要确认ssh服务是不是已经正常工作,可以使用如下命令进行确认: netstat –tlp 输入命令后,如果看到了ssh,说明正常工作了,如果没有看到ssh,可以重新启动ssh服务,再用命令: netstat –tlp 进行确认,重新启动ssh服务可以使用如下命令: /etc/init.d/ssh restart ssh在本设计中主要是用来在Windows XP系统和Ubuntu系统之间传输文件,这个软件的使用方法很简单,本文不作说明。如果在Windows XP系统下使用ssh软件时,出现不能登录到Ubuntu系统的现象,这时需要检查Ubuntu系统的IP地址,DNS是否设置正确,还需要关闭Ubuntu系统的防火墙,关闭方法为: ufw disable 2.2.4安装交叉编译工具 代码经过编译以后都要变成CPU可以识别的机器语言,而几乎一千种CPU说着一千种语言。由于宿主机与目标机的CPU一般不相同,宿主机也就是我们常用的PC机是以X86为核心的,而目标板则是ARM体系结构的,因此需要在宿主机机上建立一个用于目标机的交叉编译环境,也就是将各种二进制工具程序集成为工具链,其中包括如GNU的链接器(ld)、GNU的汇编器(as)、ar(产生修改和解开一个存档文件)、C编译器(gcc)以及C链接库(glibc)等等。 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。以下是交叉编译器的安装方法:将交叉编译工具源码包通过ssh上传到Ubuntu,然后通过如下命令进行解压: tar jxvf arm-2007q1-10-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 –C /opt/ 该解压命令中,-C /opt/参数,表示解压到/opt/目录下。解压之后,我们需要用到的交叉编译器arm-none-linux-gnueabi-gcc就在/opt/arm-2007q1/bin目录下。为了可以直接输入交叉编译器的名称就可使用它,需要在.bashrc文件的最后添加如下内容: export PATH=$PATH:/opt/arm-2007q1/bin 使用如下命令打开.bashrc文件: vi ~/.bashrc 为了使PATH变量生效,可以重新打开一个终端或者使用如下命令: source ~/.bashrc 2.3 安装tslib tslib 是一个用于触摸屏设备的函数库。通过这样一个函数库,可以将编程者从繁琐的数据处理中解脱出来。为什么会出现这样的情况呢?因为触摸屏的坐标和液晶显示屏之间的坐标并不是一一对应的,所以,要让从触摸屏上得到的坐标正确转换为液晶显示屏上的坐标,需要经过一个转换过程。除此之外,tslib还以插件的形式提供了一些附加的功能,比如去除点击触摸屏时的抖动等。Tslib的安装步骤为,配置,编译,安装。 2.3.1安装编译工具和库文件 将tslib源码包通过ssh软件上传到Ubuntu系统下,然后通过如下命令解压出来: tar zxvf tslib-1.4.tar.gz 在安装之前还需要安装一些编译时需要用到的文件,可以通过以下命令来安装这些工具: apt-get install automake apt-get install libtool 其中automake用于自动生成Makefile。libtool主要的一个作用是在编译大型软件的过程中解决了库的依赖问题;将繁重的库依赖关系的维护工作承担下来,从而释放了程序员的人力资源。 2.3.2 配置,编译,安装tslib 进入tslib源码包解压后所在的目录,使用./autogen.sh命令产生configure文件,然后利用configure文件配置tslib,配置tslib使用如下命令: ./configure -prefix=/usr/local/tslib/ -host=arm-none-linux-gnueabi -prefix参数是预设一个安装目录,-host参数是为编译时指定一个编译器。配置完成后,就可以编译了。直接使用make命令,即可编译。编译一段时间之后出现错误,提示找不到rpl_malloc,在当前目录查找了rpl_malloc,发现configure里有#define malloc rpl_malloc一行。从configure 脚本相关代码知是ac_cv_func_malloc_0_nonnull引起的,可以不让它检查了,产生一个cache文件arm-linux.cache,欺骗configure。echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache,通过以上命令产生一个cache文件,echo是输出的意思,把双引号里面的内容输入arm-linux.cache,然后再重新配置一下,配置命令: ./configure -prefix=/usr/local/tslib/ -host=arm-none-linux-gnueabi -cache-file=arm-linux.cache 然后编译安装即可,安装使用命令: make install 2.4 配置,编译,安装Qt-Extended-4.4.3 为了得到移植需要用到的文件,需要对Qt-Extended-4.4.3源码文件进行配置,编译,安装,我们通过配置得到PC版本的Qt-Extended-4.4.3,也可以得到ARM版本的,这里我们配置成ARM版本的。 2.4.1配置Qt-Extended-4.4.3 配置Qt-Extended-4.4.3需要注意的一个问题是,不能在Qt-Extended-4.4.3的源码目录下配置,需要在源码目录之外的目录下配置。本设计中把源码包放在了/home/share/qtopia4/目录下,然后在这个目录下新建了一个配置目录build,新建配置目录build使用了命令: mkdir build 配置之前,先设置一下整个移植过程中需要用到的交叉编译器,使用vi或者vim命令打开源码目录下的如下文件: qtopiacore/qt/mkspecs/qws/linux-arm-g++/qmake.conf 将里面的arm-linux全改成arm-none-linux-gnueabi。然后再安装配置过程中需要用到的四个库文件和g++编译器,四个库文件如下:libx11-dev、libxext-dev、libpng12-dev、libxtst-dev。安装方法都是使用apt-get install。比如安装g++编译器,可以使用如下命令: apt-get install g++ 配置之前的准备工作做好后,就可以配置了,进入build目录,输入如下配置命令,然后按回车,当提示是否接受GPL协议时,输入yes,接受即可。大概两个小时之后,配置成功。配置命令如下: ../qt-extended-4.4.3/configure -verbose -release -image /usr/local/Trolltech/qt-extended-4.4.3-arm -prefix /usr/local/Trolltech/qt-extended-4.4.3-arm -no-pkg-config -no-dbus -xplatform linux-arm-g++ -arch arm -displaysizes 240x320 -build-qt -ui-type home -add-font wenquanyi:*:* -qtopia-sqlite -v4l2 -remove-module modem -remove-module bluetooth -remove-module drm -remove-module infrared -extra-qt-embedded-config "-xplatform qws/linux-arm-g++ -embedded arm -qconfig qpe -shared -little-endian -webkit -qt-kbd-usb -qt-libpng -qt-libjpeg -qt-gif -depths 16 -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib" 关于配置信息的意义,可以通过输入. /configure –help 来查看。解释一下其中几个关键的配置选项,-image dir设置Qt Extended 的安装目录为dir这里为usr/local/Trolltech/qt-extended-4.4.3-arm。-prefix 设置Qt Extended 运行时的目录,这里是usr/local/Trolltech/qt-extended-4.4.3-arm。-xplatform 设定目标平台使用的编译器,这里设定为linux-arm-g++。我们实际上使用的是arm-none-linux-gnueabi-g++和arm-none-linux-gnueabi-gcc。配置之前,我们已经修改过了。-displaysizes 设定显示屏的大小,-ui-type设置使用什么样的界面,有mobile和home两个选择。-I和-L分别是设定会用到的头文件和库文件的路径。 2.4.2编译Qt-Extended-4.4.3 在build目录下,输入如下命令: bin/qbuild 开始编译,4个多小时后编译成功。 2.4.3安装Qt-Extended-4.4.3 在build目录下,输入如下命令: bin/qbuild image 开始安装,大概半个小时后安装成功。 2.5 移植Qt-Extended-4.4.3 这里的移植指的是,把Ubuntu系统下tslib和Qt-Extended的安装文件拷贝到开发板上相应目录下即可。拷贝方法有:使用网络或者U盘或者SD卡。这里使用网络,我们已经在Ubuntu系统下开通了nfs服务,当然必须确保开发板也开通了nfs服务。具体使用方法是:通过mount命令把Ubuntu系统下的文件挂载到开发板上,然后再使用cp拷贝命令把文件拷贝到开发板上。下面说明一下这里用到的mount命令[6]的使用方法: mount –t nfs –o nolock 192.168.1.22:/home/share /mnt/nfs -t选项用于设定文件系统类型,其中的IP为Ubuntu系统的IP地址,IP后面的目录为Ubuntu系统里面的共享目录,最后的目录为开发板上的目录,挂载成功后就可以在该目录下查看Ubuntu系统的/home/share目录下的所有内容了,还可以把里面的文件拷贝到开发板上。 在使用上面的mount命令之前,在Ubuntu系统中,我们需要把tslib和Qt-Extended的安装文件拷贝到/home/share目录下。下面的操作都假设已经挂载好了。 2.5.1 移植tslib 首先在开发板上新建一个目录,最好在usr目录下新建,用来放tslib的安装文件,新建目录的命令如下: mkdir –p /usr/local/ -p参数确保目录名称存在,不存在就新建一个。然后拷贝tslib的安装文件到该目录下,使用命令为: cp /mnt/nfs/tslib –r /usr/local/ -r参数表示复制tslib整个目录。 2.5.2 移植Qt-Extended-4.4.3 在开发板的local目录下新建一个目录Trolltech,用来放Qt-Extended的安装文件,这个目录一定要和配置的时候设置的是一致的,否则无法运行。新建目录的命令如下: mkdir –p /usr/local/Trolltech 然后拷贝Qt-Extended的安装文件也就是qt-extended-4.4.3-arm到该目录下,拷贝命令为: cp /mnt/nfs/qt-extended-4.4.3-arm –r /usr/local/Trolltech/ 2.5.3 设置环境变量 使用vi命令打开一个文件qtopia4,配置环境变量,然后保存在/bin目录下。qtopia4文件的内容如下所示: #!/bin/sh export TSLIB_TSDEVICE=/dev/input/event0 export TSLIB_FBDEVICE="/dev/fb0" export TSLIB_CONFFILE=/usr/local/mytslib/etc/ts.conf export TSLIB_PLUGINDIR=/usr/local/mytslib/lib/ts export TSLIB_CALIBFILE=/etc/pointercal export QPEDIR=/usr/local/Trolltech/qt-extended-4.4.3-arm export PATH=$QPEDIR/bin/:$PATH export LD_LIBRARY_PATH=$QPEDIR/lib/:/usr/local/mytslib/lib:$LD_LIBRARY _PATH export QWS_SIZE=240x320 export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight50:0" export QWS_MOUSE_PROTO="Tslib:/dev/input/event0" export QT_PLUGIN_PATH=$QPEDIR/plugins/ export QT_QWS_FONTDIR=$QPEDIR/lib/fonts/ 2.5.4 上传时域文件 时域文件是用来设置Qt-Extended-4.4.3的系统时间的文件。如果不关注时间,也可以不用上传,但是系统会一直提示找不到时域文件。为了阻止系统提示,还是把时域文件上传到指定目录下。以下是上传方法: 将qt-extended-4.4.3源码包目录下的etc/zoneinfo/目录拷贝到开发板的/usr/share/目录下,如果开发板上没有这个目录,需要自己建立。建立方法为: mkdir –p /usr/share 时域文件所在路径为:qt-extended-4.4.3/etc/zoneinfo。拷贝命令为: cp /mnt/nfs/qtopia4/qt-extended-4.4.3/ect/zoneinfo –r /usr/share 2.5.5 运行Qt-Extended-4.4.3 让2.5.3步设置的环境变量生效,然后校准触摸屏,即可运行。首先通过source命令让环境变量生效: source /bin/qtopia4 直接运行触摸屏的校准程序,即可校准,运行方式为: /usr/local/tslib/bin//ts_calibrate 运行触摸屏的校准程序后,在屏幕上会出现一个十字型,点击进行校准。使用如下方法可运行Qt-Extended: /usr/local/Trolltech/qt-extended-4.4.3-arm/bin/qpe –qws Qt-Extended启动后如图2-2所示: 图2-2 Qt-Extended启动画面 2.5.6关于开机自启动Qt-Extended-4.4.3 为了让Qt-Extended-4.4.3能够开机自启动,需要让2.5.3设置的环境变量开机时自动生效,还需要让qpe自动运行。具体方法为:找到并打开rcS文件,在/bin/sh之前添加一些配置信息。rcS文件所在目录为/etc/init.d/rcS,以下是在rcS文件中添加的内容: source /bin/qtopia4 echo “ “>/dev/ttyAT0 echo “Starting Qtopia,please waiting…”>/dev/ttyAT0 echo “ ”>/dev/ttyAT0 if [ -f /etc/pointercal ];then $QPEDIR/bin/qpe –qws & else /usr/local/mytslib/bin/ts_calibrate $QPEDIR/bin/qpe –qws & /bin/sh 其中&符号表示Qt-Extended启动后在后台运行。重新启动开发板后就能自动启动Qt-Extended了。 3 Qt-Embedded-4.7.0的移植 Qt-Embedded是Qt的嵌入式版本,它在原始Qt的基础上,做了许多出色的调整以适合嵌入式环境。同Qt-X11相比,Qt-Embedded很节省内存,因为它不需要Xserver或是Xlib库,它在底层摒弃了Xlib,采用framebuffer作为底层图形接口。Qt-Embedded的应用程序可以直接写内核帧缓冲,因此它在嵌入式Linux系统上的应用非常广泛。 前面已经介绍过,Qt-Embedded-4.7.0是不包含桌面系统的Qt版本,而且是Nokia一直在开发的版本;Qt-Extended-4.4.3包含桌面系统,但是从2009年3月3日开始Nokia已经不再开发这个版本的Qt了,所以使用这个版本的Qt运行程序时,显示的界面没有Qt-Embedded-4.7.0这个版本的美观。下面详细说明移植过程。 Qt-Embedded-4.7.0的移植和Qt-Extended-4.4.3的移植步骤差不多,都是从准备资源开始,直到成功移植。移植环境可以利用Qt-Extended移植过程中搭建的移植环境,Qt测试程序也可利用Qt-Extended移植过程中已经开发过的Qt测试程序,还有tslib也可以利用Qt-Extended移植过程中安装的文件。移植流程图如图3-1所示: SHAPE \* MERGEFORMAT 图3-1 Qt-Embedded-4.7.0移植流程图 3.1 准备资源 需要用到qt-everywhere-opensource-src-4.7.0-beta2.tar.gz源码包,到网站http://get.qt.nokia.com/qt/source/下载,还需要用到tslib,可以利用上面已经安装好的即可。将Qt源码包上传至Ubuntu的/home/share/develop/qt-4.7.0/目录下,并解压。 3.2 配置Qt-Embedded-4.7.0 进入源码包解压后的目录,然后就可以输入配置命令了,如下所示是配置命令: #./configure -xplatform qws/linux-arm-gnueabi-g++ -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-mmx -no-3dnow -no-sse -no-sse2 -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -nomake tools -nomake example -nomake docs -nomake demo -no-cups -no-openssl -embedded arm -little-endian -qt-freetype -depths 16 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -no-glib -qt-mouse-linuxinput -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib 这些配置参数的详细意义可以输入如下命令来查看: ./configure –help 3.3 编译Qt-Embedded-4.7.0 在源码包解压后的目录下直接输入make命令即可编译,大概一个小时后会出现错误,错误信息如下所示: ./wtf/MathExtras.h:194: error: 'std::isfinite' has not been declared ./wtf/MathExtras.h:195: error: 'std::isinf' has not been declared ./wtf/MathExtras.h:196: error: 'std::isnan' has not been declared ./wtf/MathExtras.h:197: error: 'std::signbit' has not been declared 解决方法为:在源码包目录下,有两个MathExtras.h文件,需要修改的是src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h这个文件。打开这个文件,然后找到194行,快速找到194行可以在文本的命令模式下输入命令: :194 把错误中提示的四个定义注释掉。如下所示: # vi src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h 193 #if !COMPILER(MSVC) && !COMPILER(RVCT) && !OS(ANDROID) && !COMPILER(WINSCW) 194 //using std::isfinite; 195 //using std::isinf; 196 //using std::isnan; 197 //using std::signbit; 198 #endif 修改之后重新编译,大概3个小时候后,编译成功。 3.4 安装Qt-Embedded-4.7.0 在源码包解压后的目录下直接输入make install即可安装,默认的安装目录为/usr/local/Trolltech,生成的安装文件是QtEmbedded-4.7.0-arm。 3.5 移植Qt-Embedded-4.7.0 这里的移植指的是,把Ubuntu系统下tslib和Qt-Embedded-4.7.0的安装文件拷贝到开发板上相应目录下即可。 3.5.1 移植tslib 这里的移植方法和2.5.1步骤一样,可以参考2.5.1步骤。 3.5.2 移植Qt-Embedded-4.7.0 将3.4步生成的QtEmbedded-4.7.0-arm这个文件拷贝到Linux的/usr/local/Trolltech/目录下,如果没有这个目录,可以自己建立。拷贝方法是使用nfs服务,具体方法如2.5介绍的一样。拷贝完之后,还需要设置环境变量,使用vi命令,打开一个文件,qte的内容如下所示: #!/bin/sh export TSLIB_TSDEVICE=/dev/input/event0 export TSLIB_FBDEVICE="/dev/fb0" export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts export TSLIB_CALIBFILE=/etc/pointercal export QPEDIR=/usr/local/Trolltech/QtEmbedded-4.7.0-arm export PATH=$QPEDIR/bin/:$PATH export LD_LIBRARY_PATH=$QPEDIR/lib/:/usr/local/tslib/lib:$LD_LIBRARY_PATH 将其qte保存在/bin目录下,使用source /bin/qte命令使这些环境变量立即生效。至此Qt-Embedded-4.7.0的移植就完成了。 4 Qt Creator的使用方法 Qt的移植已经完成了,现在需要使用Qt Creator开发一个简单测试程序测试移植效果。测试程序是一个图形界面即GUI,GUl最重要的优势在于使用户摆脱了在命令行提示符下与操作系统进行交互的方式,用户可以仅仅通过鼠标来熟练地操作程序,而且由于图表、对话框等的引入,使得操作更为直观形象[7]。首先先介绍Qt Creator的一些性能。 Qt Creator是跨平台的Qt IDE,Qt Creator是Qt被Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。此IDE能够跨平台运行,支持的系统包括Linux(32 位及 64 位)、Mac OS X以及Windows。根据官方描述,Qt Creator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务。 在功能方面,Qt Creator 包括项目生成向导、高级的C++代码编辑器、浏览文件及类的工具、集成了Qt Designer、Qt Assistant、Qt Linguist、图形化的GDB调试前端,集成qmake构建工具等。 下面开始说明Qt Creator开发环境如何建立和如何开发一个测试程序。 4.1 Windows下Qt Creator开发环境的建立 在Windows XP下使用Qt Creator,需要用到两个工具,一个是IDE和另一个是SDK,它们都可从Qt的官方网站http://qt.nokia.com/上下载,下载文件是qt-creator-win-opensource-2.0.1.exe和qt-sdk-win-opensource-2010.05.exe。双击qt-creator-win-opensource-2.0.1.exe然后根据提示,即可安装Qt Creator,同样双击qt-sdk-win-opensource-2010.05.exe即可安装Qt SDK。两个文件安装完成后就在Windows XP下建立了Qt-4.7的开发环境。 Qt Creator的开发环境建立完成之后,就可以开发Qt应用程序了。 4.2 一个login实例 使用Qt Creator开发一个login实例,用于移植效果的测试。下面详细说明开发过程。 4.2.1启动Qt Creator 双击Qt Creator快捷图标,启动Qt Creator[8],如图4-1所示: 图4-1 Qt Creator启动界面 4.2.2 新建一个工程 点击File->New File or Project...[9],弹出图4-2所示对话框,然后双击Qt Gui Application。 图4-2 新建工程 然后在出现的对话框中填写工程名和工程路径,如图4-3所示: 图4-3 设置工程名和路径 点Next > 在出现的对话框中Base Class选择QWidget,如图4-4所示: 图4-4 设置类名 点Next > 出现下面的对话框,如图4-5所示: 图4-5工程总结 点Finish,又会出现一个对话框,如图4-6所示: 图4-6 启动工程 点Finish,出现如图4-7所示界面: 图4-7 工程启动后界面 第一次运行程序的时候可能会有错误,提示找不到qmake[10]。需要手动设置qmake的路径。选中Tools->Options->Qt4->Qt Versions,在得到的对话框中,手动加入路径。设置完qmake的路径之后,如图4-8所示。 图4-8 设置qmake命令的路径 4.2.3 设计widget.ui 在widget.ui中添加一个graphicsView和horizontalLayout,添加好之后如图4-9所示 图4-9 widget界面 4.2.4 新建一个dialog 为项目添加一个dialog界面,点击 New File or Project…在出现的界面左边选择Qt,然后在右边双击Qt Designer Form,如图4-10所示: 图4-10 新建dialog 双击后,出现如图4-11所示界面: 图4-11 选择dialog界面类型 选择默认情况,点击next,并修改类名后如图4-12所示: 图4-12 设置dialog类名 点next,然后finish,得到如图4-13所示界面: 图4-13 新建的dialog初始界面 在dialog.ui中添加控件,两个label,两个line edit和两个按钮,两个label分别命名为用户名和密码,在两个line edit中分别写入jxufe和12356,两个按钮分别命名为登录和退出,右键登录按钮为其添加click()信号,然后在Signals& Slots Editor中为退出按钮添加click()信号和close()槽,最后修改tab- order,最终如图4-14所示: 图4-14 dialog界面 4.2.5 添加一个类 为项目添加一个Ticker类,点击 New File or Project…在出现的界面左边选择C++,然后在右边双击C++ Class[11],在出现的对话框中填写好类名等信息后如图4-15所示: 图4-15 设置新建类的类名 点击Next然后点击Finish。 4.2.6 编写代码 编写代码使用的语言是C++,每个控件都有一个相应的类[12]。要编写的代码为:为登录按钮的click()信号编写槽函数,使得点击登录按钮后会跳转到widget.ui界面。编写一个Ticker类[13],实现文字自动循环从右向左移动,为graphicsView编写显示图片的代码,为了显示图片还需要制作12张220x256大小的图片,可以使用png,jpg格式的图片。png格式的图片太大,使用jpg的比较合适。图片制作完成之后,全部放在一个文件夹里面,文件夹命名为image,然后将image文件夹放在工程目录下的login-build-desktop文件夹内。为了显示中文还需要在main.cpp文件中添加头文件QTextCodec,还需将代以下代码添加到main函数中[14]。 QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); 4.2.7运行程序 代码编写好之后,按住Ctrl+R,或者点击绿色的三角按钮,就可以运行程序了。启动后出现如图4-16所示界面。 点击退出,可以退出程序,点击登录可以跳转到widget.ui界面,该界面的最上面是从右向左循环移动的介绍的文字,下面每隔5秒切换一次的照片。点击登录按钮,出现如图4-17所示界面。 图4-16 程序启动后界面 图4-17 点击登陆后界面 5 测试移植效果 为了测试移植后的效果如何,先要开发一个Qt应用程序,经过编译后得到可执行文件,将可执行文件传到到开发板上运行,就可以进行测试了。第四章已经说明了在windows下开发Qt应用程序的方法,从第四章得到的Qt的源代码需要经过交叉编译,才能在开发板上运行[15]。交叉编译需要在Ubuntu环境下进行,首先需要设置环境变量,这里主要设置编译器的路径和编译用到的库文件的路径,使用vi命令打开.bashrc文件,在其最后添加编译器和库文件的路径,即如下所示内容: PATH=$PATH:/usr/local/Trolltech/QtEmbedded-4.7.0-arm/bin LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/tslib/lib PATH变量中的另外一个路径是2.2.4步设置的另外一个交叉编译器的路径。在一个变量中添加多个路径时,需要用冒号隔开。 5.1 测试Qt Embedded的移植效果 在Windows XP下用Qt Creator开发的程序,不经过交叉编译只能在Windows XP下运行;在Windows XP下开发得到的Qt的源代码需要经过交叉编译,然后才能在开发板上运行。下面说明如何交叉编译在Windows XP下用Qt Creator开发的应用程序。 5.1.1交叉编译和运行方法 将第4步建立的工程文件(D:\Qt\qtcreator-2.0.1\qtwork目录下的login文件夹)拷贝到Linux环境下,这里拷贝到/home/share/qtwork目录下,然后进入login目录下。先qmake然后make即可得到可以在开发板上运行的可执行文件login。将login拷贝到开发板上,比如拷贝到/etc/local/qtwork目录下,进入这个目录后输入如下命令即可运行: ./login -qws 说明一下-qws这个参数,它的全称是Qt Windows System。这是QT自行开发的窗口系统,体系结构类似于X Windows,是一个C/S结构,即显示是由QWSServer实现,由QWSClient实现界面,两者通过socket进行通讯。如果在命令行带-qws参数.表示这个程序是QWServer,否则是QWClient。在很多嵌入式系统里,QT基本上用QWS来实现,这样保证其可移植性。 5.1.2中文显示 如果应用程序中要显示中文,需要在main.cpp文件中添加一点代码。首先添加头文件: #include 然后在main函数的最前面添加如下代码: QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); 另外在运行的时候需要加上-font unifont参数,使用如下命令运行,即可显示中文: ./login -qws -font unifont 5.2 测试Qt Extended的移植效果 使用Qt Creator开发的程序要在Qt Extended环境下运行可以使用跟5.1相同的方法。但是,还是需要通过字符操作来运行程序,不能通过点击图标来运行,而且,在2.4.3步后还需要安装一个SDK来编译程序,安装方法为:build目录下输入bin/qbuild sdk。这样会很麻烦。 Qt Creator开发的程序在Qt Extended中还可以通过点击应用程序的图标来运行[16],使用这种方法运行,需要做以下几步: 5.2.1 添加源代码 本设计使用Qt Creator自行开发的login程序,使用SSH上传源代码目录login到qt-extended-4.4.3目录下的src/application目录下。 5.2.2 为应用程序添加图标 为了能够显示login的程序图标,并通过点击图标启动程序,需要在 login 中创建一个desktop文件,还需要一个图标作为login的图标,图标的格式需要是png,建议用48x48像素的图标,可以使用 Photoshop或者GIMP等图形工具设计图标,这里不对图标的制作过程进行描述。还可以在Ubuntu系统下的以下目录:/usr/share/icons/hicolor/48x48/apps/ 中寻找自己喜欢的图标,或者上网访问http://www.iconpng.com网址搜索并下载一个图标,注意要下载 png格式的。图标制作或者找到现成的后,将其命名为login.png,并复制到 login工程目录的 pics目录下,pics目录原来是不存在的,需要自已创建,创建方法为:在login目录下输入如下命令: mkdir pics 有了图标还需要编写一个desktop文件来显示图标。可以在applications目录下的其他目录下拷贝一个desktop文件进行修改,也可以使用vi命令来创建一个login.desktop文件,并在里面输入如下所示内容: [Translation] File=QtopiaApplications Context=login [Desktop Entry] Comment[]=A Login Program Exec=login Icon=login/login Type=Application Name[]=login Categories=MainApplications 5.2.3 将Qt4程序转换成qt-extended-4.4.3程序 由于使用Qt Creator开发的login 程序只是一个 Qt4程序,我们需要把它转换成qt-extended-4.4.3程序才能和qt-extended配合起来,转换方法是修改login下的main.cpp源代码文件和工程文件。首先使用vi或者vim命令打开main.cpp文件,然后将如下包含qt头文件的代码: #include 修改为包含Qtopia的头文件的代码: #include 再将main函数中Qt的应用程序类QApplication修改为Qtopia的应用程序类QtopiaApplication。还需要将原先的工程文件login.pro删除,并用qt-extended-4.4.3下的qbuild工具重新生工程文件,在 qt-extended-4.4.3下,所有程序的工程文件都统一为qbuild.pro。具体方法为:确保在login目录下,然后输入如下所示命令: # rm login.pro # /home/share/qtopia4/build/bin/qbuild –project 执行上述命令后,将在login 目录下生成qbuild.pro 文件。 5.2.4 添加对login应用程序的支持 在qt-extended4.4.3中增加了一个应用程序,需要在projects.pri文件中添加对程序的支持,修改方法是在projects.pri文件的最后中添加如下一句: PROJECTS *=applications/login projects.pri文件在qt-extended4.4.3源码目录的src目录下。 5.2.5 在qt-extended-4.4.3下编译login 首先进入build目录,然后在src/applications目录下创建login目录,交叉编译并安装login,只需在login目录下输入如下命令: ../../../bin/qbuild image 在PATH变量中添加qbuild交叉编译器的路径,也可在login目录下直接输入: qbuild image 5.2.6 运行login应用程序 将qt-extended-4.4.3重新上传到at91sam9261板子上,运行Qt-Extended,运行方法2.5.5步中有说明,启动后在Applications里面找到login 的图标然后点击,就可以启动login 程序了。之后修改login程序,只需上传编译好的login应用程序,上传到开发板的/usr/local/Trolltech/ qt-extended-4.4.3-arm/bin目录下即可,不用每次都上传整个qt-extended-4.4.3-arm文件包。 5.2.7 中文显示 Windows XP下Qt Creator默认的中文编码为ANSI,只有在该种编码下才可以输入中文。由于开发板的默认编码为utf8,两者的默认编码不同,所以会出现乱码。解决方法是:所有需要中文的地方,都在Ubuntu系统里输入,因为Ubuntu系统的默认编码也是utf8,还需要确保Ubuntu系统安装了中文输入法,中文输入法的安装这里不作介绍;另外还需要在main.cpp文件中添加中文支持,首先添加包含头文件的代码: #include 然后在main函数最前面添加: QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8")); 6总结与展望 6.1总结 本设计用到了两种版本的Qt,Qt-Extended-4.4.3和QtEmbedded-4.7.0。前一种带桌面系统,而后一种不带。本设计分别实现了将这两种不同版本的Qt移植到AT91SAM9261开发板上,并且用Qt Creator开发了一个测试程序,在两种Qt环境下进行测试,测试通过了,说明移植成功了。 本次移植的主要难点在于移植环境的建立和Qt Creator开发的程序在移植好Qt的开发板上的运行。 6.2展望 移植后的Qt-Extended不能设置语言和时间,这是源代码存在的一个缺陷。可以自主开发一个应用程序,使其能正确设置语言和时间;另外还可以开发一些小应用程序:万能摄像头拍照程序,3G无线上网、GPRS拨号上网、短信单发、短信群发等。使移植后的Qt-Extended更具有实用性。 参考文献 [1]周立功.ARM嵌入式系统基础教程(第2版)[M].北京:北京航空航天大学出版社,2008. [2]Christopher Hallinan.Embedded Linux Primer[M].Upper Saddle River:Prentice Hall,2008. [3]Karim Yaghmour.构建嵌入式Linux系统[M].北京:中国电力出版社,2004. [4] 薛园园.21天学通Linux嵌入式开发[M].北京:电子工业出版社,2010. [5]王世江.鸟哥的Linux私房菜 基础学习篇(第三版)[M].北京:人民邮电出版社,2010. [6]韦东山.嵌入式Linux应用开发完全[M].北京:人民邮电出版社,2008. [7]怯肇乾.嵌入式图形系统设计[M].北京:北京航空航天大学出版社,2009. [8]郑阿奇,陈超.Qt 4开发实践[M].北京:电子工业出版社,2011. [9]蒋邦友,闫学文.基于嵌入式图形界面开发与应用[J].工业控制计算机,2010,23(6):29-30. [10]刘艳青,苏桂莲.基于Qt4的图形用户界面程序的设计与实现[J].现代计算机,2009(3):170-172. [11]陈琦.QT的编程技术及应用[J].科技信息,2008(33):503-504. [12]Stanley B.Lippman.C++ Primer中文版(第4版)[M].北京:人民邮电出版社,2008. [13]Jasmin Blanchette,Mark Summerfield.C++ GUI Programming with Qt4[M].Upper Saddle River:Prentice Hall,2008. [14]Matthias Kalle Dalheimer.Programming with Qt[M].Sebastopol:O'REILLY & ASSOC INC,2002. [15]丁林松,黄丽琴.Qt4图形设计与嵌入式开发[M].北京:人民邮电出版社,2009. [16]苗忠良,宛斌.Qtopia编程之道[M].北京:清华大学出版社,2009. 致 谢 袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈 芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈 开始 移植tslib和Qt-Extended-4.4.3 Qt Creator开发应用程序 配置编译安装Qt-Extended-4.4.3 配置编译安装tslib 测试移植效果 搭建移植环境 结束 准备移植资源 开始 移植tslib和 Qt-Embedded-4.7.0 Qt Creator开发应用程序 配置编译安装Qt-Embedded-4.7.0 测试移植效果 结束 准备移植资源 III
/
本文档为【基于Linux嵌入式开发板的Qt的移植与应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索