Qtopia 后来被重新命名为Qt Extended,在2009年3月3日,Nokia决定停止Qt Extended的后续开发,转而全心投入Qt的产品开发,并逐步会将一部分QtExtended的功能移植到Qt开发框架中。

本文介绍的内容是关于Qt opia 移植实验过程,以实验报告的形式向大家展现内容,方便又很清晰的浏览内容。

一、准备工作

了解QT库的使用

了解QTopia移植步骤

学习如何使用Tslib来构建带有触摸屏的GUI系统

二、实验原理

1、实验程序介绍

本章重点讲述如何利用源代码一步一步的将Qtopia(一套基于QT的GUI界面)移植到Filesystem中,最终可以在开发板上看到Qtopia运行起来。

2、实验原理

目前嵌入式Linux的主流GUI系统主要有MiniGUI、Microwindows、OpenGUI、Qt/Embedded,这些GUI在接口定义、体系结构、功能特性存在很大差别,采取的技术路线也有所不同。MiniGUI是建立在比较成熟的图形引擎之上,开发的重点在于窗口系统,其小巧精致并且尽量与Win32兼容。MicroWindows目前开发的重点在底层的图形引擎,窗口系统和图形接口方面功能比较欠缺,与Win32和X Windows窗口系统保持兼容,提供了相对完善的图形功能。OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口,它的资源消耗小,可移植性差,不支持多进程。

我们这次的实验用的就是基于Qt/Embedded,它具有良好的扩展性和众多优秀的配套工具。

实验过程中,一共用到4个源代码包,下面是它们的介绍说明:

Qt/EmbeddedQt/Embedded是一个多平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性好,支持多个GUI平台的交互开发。现在,Qt/Embedded被广泛地应用于各种嵌入式产品和设备中,从消费电器(如智能手机、机顶盒)到工业控制设备(如医学成像设备、移动信息系统等)。因此本实训项目选择Qt/Embedded为系统的GUI。

Qtopia Qtopia 是Trolltech 公司为采用嵌入式Linux 操作系统的消费电子设备而开发的综合应用平台, 它基于Qt/Embedded框架,所以在编译Qtopia之前先要搭建好Qt/Embedded框架。另外Qtopia包含完整的应用层、灵活的用户界面、窗口操作系统、应用程序启动程序以及开发框架。

Tslib:在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪声的缘故,触摸屏容易存在点击不准确、有抖动等问题。Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。

Tmake:tmake是一个很好用的生成和管理makefile的工具,他是由Trolltech这家公司开发的,用perl写成。

3、移植流程图

Qtopia 移植实验过程(qt程序移植)  Qt 移植 Embedded 第1张
图1 流程示意图

三、实验步骤

1、实验准备

首先需要下载如下资源:

  1. qtopia-free-1.7.0.tar.bz2
  2. qt-embedded-2.3.7.tar.bz2
  3. tmake-1.11.tar.gz
  4. Tslib-1.3.tar.gz

其次,需要保证能够正常使用交叉编译工具链,即可以正常使用诸如arm-linux-gcc的命令

解压这四个压缩包分别到如下几个目录:

  1. qtopia-free-1.7.0.tar.bz2/work/qtopia-1.7.0
  2. qt-embedded-2.3.7.tar.bz2/work/qt-2.3.7
  3. tmake-1.11.tar.gz/work/tmake-1.11
  4. Tslib-1.3.tar.gz/work/tslib-1.3

2、设置环境变量

在Shell中输入下了命令,也可以做一个脚本文件来执行

  1. exportexportQTDIR=/work/qt-2.3.7
  2. exportexportQPEDIR=/work/qtopia-1.7.0
  3. exportLD_LIBRARY_PATH=/work/qt-2.3.7/lib:$LD_LIBRARY_PATH
  4. exportTMAKEDIR=/work/tmake-1.11
  5. exportTMAKEPATH=/work/tmake-1.11/lib/qws/linux-arm-g++
  6. exportPATH=/work/tmake-1.11/bin:$PATH

3、编译Tslib 1.3

在Shell界面输入如下命令,假设当前目录是”/work”

  1. [root@emdoorwork]#cdtslib-1.3
  2. [root@emdoortslib-1.3]#exportCC=arm-linux-gcc//选择编译工具链
  3. [root@emdoortslib-1.3]#./autogen.sh
  4. [root@emdoortslib-1.3]#./configure--host=arm-linux//生成ARM版本的Tslib
  5. [root@emdoortslib-1.3]#make
  6. [root@emdoortslib-1.3]#cp-asrc/.libs/*../qt-2.3.7/lib/
  7. [root@emdoortslib-1.3]$cp-aplugins/.libs/*.so../qt-2.3.7/lib/
  8. //拷贝生成的库文件到QT/E源码中
  9. [root@emdoortslib-1.3]$cp-asrc/*.h../qt-2.3.7/include//拷贝文件到QT/E源码中

这样我们就生成Tslib的库文件与链接文件了

4、编译QT/E 2.3.7

由于我们最终要编译的是Qtopia 1.7.0,而它对应的QT/E库文件是2.3.7,所以我们需要交叉编译一个它专用的QT/E框架,即库文件

(1)首先即要确保步骤2已经完成,并且生成的库文件都是ARM架构的,可以用下列代码测试一下:

  1. [root@emdoortslib-1.3]$file/work/qt-2.3.7/lib/libts*//反馈信息中会有ARM字样

(2)为了能在Qt/E中顺利使用触摸屏,还需要做如下修改

修改configs/ linux-arm-g++-shared的第41行,红色部分为新添加内容,表示在编译过程中,调用libts.so库文件,即导入了我们步骤二生成的触摸屏驱动程序
SYSCONF_LIBS= -lm –lts

从实验源代码中的补丁目录,找到一个名字为“qwsmouse_qws.cpp”替换掉qt-2.3.7目录下对应的同名文件(src/kernel目录内),由于该代码修改的内容较多,笔者在此就不一一描述,该修改主要将tslib的调用方式嵌入到Qt/E中,感兴趣的读者可以自行解读该代码。

(3)进入源代码目录,使用configure进行配置

  1. [root@emdoorqt-2.3.7]$cd$QTDIR
  2. [root@emdoorqt-2.3.7]$cp/work/qtopia-1.7.0/src/qt/qconfig-qpe.hsrc/tools/
  3. [root@emdoorqt-2.3.7]$./configure-xplatformlinux-arm-g++-qconfigqpe

注意:Qtopia 1.7.0针对QT/E 2.3.7预设了一个配置脚本qconfig-qpe.h,所以要将其拷贝到src/tools目录下,然后在configure中就可以用”—qconfig”调用了

(4)随后QT的配置过程中会跳出几个问题,回答如下:

  1. Q:…license?A:yes
  2. Q:colordepth?A:16
  3. Q:VirtualFramebuffer?A:no

(5)***就直接编译了:

[root@emdoor qt-2.3.7]$ makesub-src //sub-src表示仅编译src目录下的内容

5、编译Qtopia 1.7.0

  1. [root@emdoorqt-2.3.7]$cd$QPEDIR
  2. [root@emdoorqtopia-1.7.0]$./configure-xplatformlinux-arm-g++
  3. [root@emdoorqtopia-1.7.0]$make

这样就会在当前目录生成整个GUI界面的所有可执行文件和配置文件

6、压缩CodeSize

生成的系统有点冗余,可以用arm-linux-strip工具将多余的调试信息剥离开,减小Qtopia的体积:

  1. [root@emdoorqtopia-1.7.0]$arm-linux-strip-R.note-R.commentbin/*
  2. [root@emdoorqtopia-1.7.0]$arm-linux-strip-R.note-R.commentplugins/*/*
  3. [root@emdoorqtopia-1.7.0]$arm-linux-strip-R.note-R.comment$QTDIR/lib/libqte.so*$QTDIR/lib/libqpe.so*

7、构建Run-time目录

由于Otopia目录下还存在的源代码之类的文件,而且它的运行离不开QT/E的共享库文件,所以我们新建一个qpe目录,然后把Qtopia给放进去:

  1. [root@emdoorqtopia-1.7.0]$mkdir../qpe
  2. [root@emdoorqtopia-1.7.0]$cd../qpe
  3. [root@emdoorqpe]$cp-aR../qt-2.3.7/lib/./
  4. [root@emdoorqpe]$cp-aR../qtopia-1.7.0/lib/*./lib
  5. [root@emdoorqpe]$cp-aR../qtopia-1.7.0/apps./
  6. [root@emdoorqpe]$cp-aR../qtopia-1.7.0/bin./
  7. [root@emdoorqpe]$cp-aR../qtopia-1.7.0/plugins./
  8. [root@emdoorqpe]$cp-aR../qtopia-1.7.0/i18n./
  9. [root@emdoorqpe]$cp-aR../qtopia-1.7.0/pics./
  10. [root@emdoorqpe]$cp-aR../qtopia-1.7.0/etc./
  11. [root@emdoorqpe]$cp../tslib/etc/ts.conf/qpe/etc
  12. [root@emdoorqpe]$cp../tslib/tests/.libs/ts.calibrate/qpe/bin

8、整合入filesystem

(1)进入由上一章节生成的busybox的Filesystem,将qpe目录拷贝到Filesystem中的usr目录下,即目标板运行起来时,qpe的绝对路径是/usr/qpe

(2)新建一个Qtopia运行脚本qpe.sh ,具体代码如下:

  1. qtopia-free-1.7.0.tar.bz2/work/qtopia-1.7.0
  2. qt-embedded-2.3.7.tar.bz2/work/qt-2.3.7
  3. tmake-1.11.tar.gz/work/tmake-1.11
  4. Tslib-1.3.tar.gz/work/tslib-1.3
0

(3)修改etc目录下的inittab文件,在该文件的末尾加入如下代码:

  1. qtopia-free-1.7.0.tar.bz2/work/qtopia-1.7.0
  2. qt-embedded-2.3.7.tar.bz2/work/qt-2.3.7
  3. tmake-1.11.tar.gz/work/tmake-1.11
  4. Tslib-1.3.tar.gz/work/tslib-1.3
1

(4)根据busybox实验的步骤进行格式化和运行即可

小结:Qt opia 移植实验过程的内容介绍完了,希望对你有所帮助。关于Qt/Embedded,它是一个多平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性好,支持多个GUI平台的交互开发。

转载请说明出处
知优网 » Qtopia 移植实验过程(qt程序移植)

发表评论

您需要后才能发表评论