Qtopia 移植实验过程

移动开发
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、移植流程图

Qt opia 移植实验过程
图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. export export QTDIR=/work/qt-2.3.7  
  2. export export QPEDIR=/work/qtopia-1.7.0  
  3. export LD_LIBRARY_PATH=/work/qt-2.3.7/lib:$LD_LIBRARY_PATH  
  4. export TMAKEDIR=/work/tmake-1.11  
  5. export TMAKEPATH=/work/tmake-1.11/lib/qws/linux-arm-g++  
  6. export PATH=/work/tmake-1.11/bin:$PATH 

3、编译Tslib 1.3

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

  1. [root@emdoor work]#cd tslib-1.3  
  2. [root@emdoor tslib-1.3]#export CC=arm-linux-gcc         //选择编译工具链  
  3. [root@emdoor tslib-1.3]#./autogen.sh  
  4. [root@emdoor tslib-1.3]#./configure --host=arm-linux       //生成ARM版本的Tslib  
  5. [root@emdoor tslib-1.3]#make  
  6. [root@emdoor tslib-1.3]#cp -a src/.libs/*  ../qt-2.3.7/lib/  
  7. [root@emdoor tslib-1.3]$cp -a plugins/.libs/*.so  ../qt-2.3.7/lib/     
  8.                                        //拷贝生成的库文件到QT/E源码中  
  9. [root@emdoor tslib-1.3]$cp -a src/*.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@emdoor tslib-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@emdoor qt-2.3.7]$ cd $QTDIR  
  2. [root@emdoor qt-2.3.7]$ cp /work/qtopia-1.7.0/src/qt/qconfig-qpe.h src/tools/  
  3. [root@emdoor qt-2.3.7]$ ./configure  -xplatform linux-arm-g++ -qconfig qpe 

注意: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:color depth?    A:16   
  3. Q:Virtual Framebuffer?  A:no 

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

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

5、编译Qtopia 1.7.0

  1. [root@emdoor qt-2.3.7]$ cd $QPEDIR  
  2. [root@emdoor qtopia-1.7.0]$ ./configure  -xplatform linux-arm-g++  
  3. [root@emdoor qtopia-1.7.0]$ make 

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

6、压缩CodeSize

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

  1. [root@emdoor qtopia-1.7.0]$ arm-linux-strip -R .note -R .comment bin/*  
  2. [root@emdoor qtopia-1.7.0]$ arm-linux-strip -R .note -R .comment plugins/*/*  
  3. [root@emdoor qtopia-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@emdoor qtopia-1.7.0]$ mkdir ../qpe  
  2. [root@emdoor qtopia-1.7.0]$ cd ../qpe  
  3. [root@emdoor qpe]$ cp -aR ../qt-2.3.7/lib/ ./  
  4. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/lib/* ./lib  
  5. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/apps ./  
  6. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/bin ./  
  7. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/plugins ./  
  8. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/i18n ./  
  9. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/pics . /  
  10. [root@emdoor qpe]$ cp -aR ../qtopia-1.7.0/etc . /  
  11. [root@emdoor qpe]$ cp ../tslib/etc/ts.conf  /qpe/etc  
  12. [root@emdoor qpe]$ cp ../tslib/tests/.libs/ts.calibrate  /qpe/bin  

8、整合入filesystem

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

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

  1. /usr/qpe/qpe.sh  
  2. export QTDIR=/usr/qpe   
  3. export QPEDIR=/usr/qpe  
  4. export LANG=zh_CN 
  5. export LD_LIBRARY_PATH=/usr/qpe/lib:$LD_LIBRARY_PATH  
  6. export QT_TSLIBDIR=/usr/qpe/lib  
  7. export TSLIB_CONFFILE=/usr/qpe/etc/ts.conf  
  8. export TSLIB_PLUGINDIR=/usr/qpe/lib  
  9. export QWS_MOUSE_PROTO=TPanel:/dev/touchscreen/ucb1x00  
  10. export KDEDIR=/usr/qpe  
  11. cd /usr/qpe/bin  
  12. ./ts_calibrate  
  13. ./qpe -qws 

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

  1. x:5:once:/usr/qpe/qpe.sh &> /dev/null 

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

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

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-13 15:57:26

linux QT QTOPIA

2011-06-20 10:40:03

Ubuntu Qtopia

2011-06-24 13:08:34

Qt Qt 4.5.3 移植

2022-06-21 11:30:22

littleVGL鸿蒙

2011-06-23 18:16:59

Qt Qtopia

2011-07-05 16:31:17

Qtopia 交叉编译

2011-06-20 09:06:05

Qt Qtopia

2011-06-29 09:20:41

Qt Embedded Qtopia

2017-07-04 22:55:09

存储过程数据库存储过程移植

2011-06-20 09:26:38

Linux qtopia QT

2010-03-01 15:07:02

Linux交换分区

2011-06-20 10:27:24

Mini2440 Qtopia Qt

2011-06-13 11:24:55

QT MPlayer 移植

2023-02-06 16:21:48

2015-05-05 13:57:12

AndroidWindows

2011-06-13 11:07:22

QT 移植

2013-11-14 11:30:10

androidrom

2020-11-26 11:56:25

freeModbusT

2011-02-23 09:55:42

konqueror

2013-02-09 10:04:03

容错服务器
点赞
收藏

51CTO技术栈公众号