李程站 发表于 2013-2-4 03:00:44

Qtopia 移植实验过程

本文介绍的内容是关于 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/Embedded:Qt/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、移植流程图
http://images.51cto.com/files/uploadimg/20110620/1015470.jpg
图1 流程示意图
三、实验步骤
1、实验准备
首先需要下载如下资源:

[*]qtopia-free-1.7.0.tar.bz2
[*]qt-embedded-2.3.7.tar.bz2
[*]tmake-1.11.tar.gz
[*]Tslib-1.3.tar.gz
其次,需要保证能够正常使用交叉编译工具链,即可以正常使用诸如arm-linux-gcc的命令
解压这四个压缩包分别到如下几个目录:

[*]qtopia-free-1.7.0.tar.bz2  /work/qtopia-1.7.0
[*]qt-embedded-2.3.7.tar.bz2  /work/qt-2.3.7
[*]tmake-1.11.tar.gz    /work/tmake-1.11
[*]Tslib-1.3.tar.gz     /work/tslib-1.3
2、设置环境变量
在Shell中输入下了命令,也可以做一个脚本文件来执行

[*]export export QTDIR=/work/qt-2.3.7
[*]export export QPEDIR=/work/qtopia-1.7.0
[*]export LD_LIBRARY_PATH=/work/qt-2.3.7/lib:$LD_LIBRARY_PATH
[*]export TMAKEDIR=/work/tmake-1.11
[*]export TMAKEPATH=/work/tmake-1.11/lib/qws/linux-arm-g++
[*]export PATH=/work/tmake-1.11/bin:$PATH
3、编译Tslib 1.3
在Shell界面输入如下命令,假设当前目录是”/work”

[*]#cd tslib-1.3
[*]#export CC=arm-linux-gcc         //选择编译工具链
[*]#./autogen.sh
[*]#./configure --host=arm-linux       //生成ARM版本的Tslib
[*]#make
[*]#cp -a src/.libs/*../qt-2.3.7/lib/
[*]$cp -a plugins/.libs/*.so../qt-2.3.7/lib/   
[*]                                       //拷贝生成的库文件到QT/E源码中
[*]$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架构的,可以用下列代码测试一下:

[*]$ 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进行配置

[*]$ cd $QTDIR
[*]$ cp /work/qtopia-1.7.0/src/qt/qconfig-qpe.h src/tools/
[*]$ ./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的配置过程中会跳出几个问题,回答如下:

[*]Q:… license?    A:yes
[*]Q:color depth?    A:16   
[*]Q:Virtual Framebuffer?A:no
(5)最后就直接编译了:
$ make sub-src       //sub-src表示仅编译src目录下的内容
5、编译Qtopia 1.7.0

[*]$ cd $QPEDIR
[*]$ ./configure-xplatform linux-arm-g++
[*]$ make
这样就会在当前目录生成整个GUI界面的所有可执行文件和配置文件
6、压缩CodeSize
生成的系统有点冗余,可以用arm-linux-strip工具将多余的调试信息剥离开,减小Qtopia的体积:

[*]$ arm-linux-strip -R .note -R .comment bin/*
[*]$ arm-linux-strip -R .note -R .comment plugins/*/*
[*]$ arm-linux-strip -R .note -R .comment $QTDIR/lib/libqte.so* $QTDIR/lib/libqpe.so*
7、构建Run-time目录
由于Otopia目录下还存在的源代码之类的文件,而且它的运行离不开QT/E的共享库文件,所以我们新建一个qpe目录,然后把Qtopia给放进去:

[*]$ mkdir ../qpe
[*]$ cd ../qpe
[*]$ cp -aR ../qt-2.3.7/lib/ ./
[*]$ cp -aR ../qtopia-1.7.0/lib/* ./lib
[*]$ cp -aR ../qtopia-1.7.0/apps ./
[*]$ cp -aR ../qtopia-1.7.0/bin ./
[*]$ cp -aR ../qtopia-1.7.0/plugins ./
[*]$ cp -aR ../qtopia-1.7.0/i18n ./
[*]$ cp -aR ../qtopia-1.7.0/pics . /
[*]$ cp -aR ../qtopia-1.7.0/etc . /
[*]$ cp ../tslib/etc/ts.conf/qpe/etc
[*]$ cp ../tslib/tests/.libs/ts.calibrate/qpe/bin
8、整合入filesystem
(1)进入由上一章节生成的busybox的Filesystem,将qpe目录拷贝到Filesystem中的usr目录下,即目标板运行起来时,qpe的绝对路径是/usr/qpe
(2)新建一个Qtopia运行脚本qpe.sh ,具体代码如下:

[*]/usr/qpe/qpe.sh
[*]export QTDIR=/usr/qpe   
[*]export QPEDIR=/usr/qpe
[*]export LANG=zh_CN
[*]export LD_LIBRARY_PATH=/usr/qpe/lib:$LD_LIBRARY_PATH
[*]export QT_TSLIBDIR=/usr/qpe/lib
[*]export TSLIB_CONFFILE=/usr/qpe/etc/ts.conf
[*]export TSLIB_PLUGINDIR=/usr/qpe/lib
[*]export QWS_MOUSE_PROTO=TPanel:/dev/touchscreen/ucb1x00
[*]export KDEDIR=/usr/qpe
[*]cd /usr/qpe/bin
[*]./ts_calibrate
[*]./qpe -qws
(3)修改etc目录下的inittab文件,在该文件的末尾加入如下代码:

[*]x:5:once:/usr/qpe/qpe.sh &> /dev/null
(4)根据busybox实验的步骤进行格式化和运行即可
小结:Qt opia 移植实验过程的内容介绍完了,希望对你有所帮助。关于Qt/Embedded,它是一个多平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性好,支持多个GUI平台的交互开发。
【编辑推荐】

[*]Qt Embedded 环境安装
[*]QT程序移植到开发板并运行 解决方案
[*]QT Embedded环境的建立之Arm Linux嵌入式
[*]Qt开发环境建立与Qtopia 虚拟平台
[*]详解Linux系统中QT(QTopia)平台开发
页: [1]
查看完整版本: Qtopia 移植实验过程