`
mmdev
  • 浏览: 12889401 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Loongson 1B板上移植QT-4及环境搭建(带TSLIB触摸屏支持)

 
阅读更多

目录

一、文档简介: 4

二、移植过程 4

1.安装交叉编译工具链 4

2.交叉编译TSLIB工具 4

3.交叉编译QT-4 5

4.configure参数选项以及QT库裁剪 6

4.1configure参数分类 6

4.3QT库裁剪 11

5.QT程序移植及运行环境配置 20

一、文档简介:

本文档用于介绍Loongson1B开发板上移植QT-4以及相关运行环境的搭建。

开发环境参数:

操作系统:Ubuntu11.04

本机平台:X86

目标平台:Loongson1B开发板

交叉编译工具链:gcc-3.4.6-2f1B交叉编译工具链)

所需软件及工具包:

QT源码包:qt-everywhere-opensource-src-4.7.1.tar.gz

TSLIB源码包:tslib-1.4.tar.gz

二、移植过程

1.安装交叉编译工具链

首先安装Loongson1B开发板提供的交叉编译工具链:

解压gcc-3.4.6-2f.tar.gzPS.有些工具链对目录有一定的要求,请询问交叉编译工具链提供者,gcc-3.4.6-2f需要放在/home/cpu/目录下面。

#tarzxvfgcc-3.4.6-2f.tar.gz

#mvgcc-3.4.6-2f/home/cpu/

将工具链加入到PATH环境变量中:

#exportPATH=/home/cpu/gcc-3.4.6-2f/bin:$PATH

PS.每一次需要交叉编译均需要将交叉编译工具链加入到PATH变量,可通过修改/etc/profile文件来实现默认添加,即将上边最后一条语句加入到该文件中即可。

2.交叉编译TSLIB工具

解压tslib-1.4.tar.gz,进入文件夹交叉编译TSLIB工具,并指定工具安装目录为/TSLIB

#tarzxvftslib-1.4.tar.gz

#cdtslib-1.4

#./autogen.sh

#./configure--host=mipsel-linuxac_cv_func_malloc_0_nonnull=yes

--prefix=/TSLIB

#make

#makeinstall

编译完成后,TSLIB目录需包含以下文件目录:

#ls/TSLIB

binetcincludelib

各个目录分别为TSLIB的校准及测试程序、环境配置文件、头文件、动态库。

根据1B开发板触摸屏驱动类型,配置TSLIB,修改TSLIB的环境配置文件:修改/TSLIB/etc/ts.conf,将#module_rawinput改成module_rawinput,即去掉前面的注释符。PS.这里需要注意的是module_rawinput前面不允许有空格。

3.交叉编译QT-4

首先解压QT-4.7.1源码包并重命名后进入改目录以配置环境变量:

#tarzxvfqt-everywhere-opensource-src-4.7.1.tar.gz

#mvqt-everywhere-opensource-src-4.7.1/qt-embedded-free-4.7.1-tslib-test/

#cdqt-embedded-free-4.7.1-tslib-test/

#exportQTDIR=$PWD

#exportQTEDIR=$PWD

#exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

#exportPATH=$QTDIR/bin:$PATH

执行以上步骤即可配置好QT的编译环境变量。

接下来需要修改相关的QT编译参数:

#vimmkspecs/qws/linux-mips-g++/qmake.conf

确保文件中指定的交叉编译参数为gcc-3.4.6-2f交叉编译工具链中对应gcc名称,并制定平台指令集。主要修改以下标记为yellow的参数:

Filemkspecs/qws/linux-mips-g++/qmake.conf

#

#qmakeconfigurationforbuildingwithmipsel-linux-g++

#

include(../../common/g++.conf)

include(../../common/linux.conf)

include(../../common/qws.conf)

#modificationstog++.conf

QMAKE_CC=mipsel-linux-gcc

QMAKE_CXX=mipsel-linux-g++

QMAKE_CFLAGS+=-mips32

QMAKE_CXXFLAGS+=-mips32

QMAKE_LINK=mipsel-linux-g++

QMAKE_LINK_SHLIB=mipsel-linux-g++

#modificationstolinux.conf

QMAKE_AR=mipsel-linux-arcqs

QMAKE_OBJCOPY=mipsel-linux-objcopy

QMAKE_STRIP=mipsel-linux-strip

load(qt_config)

QT-4对于TSLIB触摸屏的支持相对QT-3来说就简单很多了,不需要对QT的源码进行修改,仅需要在configure时指定TSLIB参数即可,接下来开始进行QT-4的交叉编译过程:

#./configure-release-shared-no-largefile-qt-sql-sqlite-no-qt3support-no-xmlpatterns-no-mmx-no-3dnow-no-sse-no-sse2-no-svg-no-webkit-qt-zlib-qt-gif-qt-libtiff-qt-libpng-qt-libmng-qt-libjpeg-makelibs-nomaketools-nomakeexamples-nomakedocs-nomakedemo-no-nis-no-cups-no-iconv-no-dbus-no-openssl-xplatformqws/linux-mips-g++-embeddedmips-qt-freetype-depths8,16,24,32-qt-gfx-linuxfb-no-gfx-transformed-no-gfx-multiscreen-no-gfx-vnc-no-gfx-qvfb-no-glib-qt-mouse-tslib-I/TSLIB/include-L/TSLIB/lib-prefix/usr/local/Trolltech/QtEmbedded-4.7.1-mips/

#make

#makeinstall

可在/usr/local/Trolltech/QtEmbedded-4.7.1-mips/目录查看到编译生成文件。

编译过程可能遇到的问题:

提示找不到头文件、函数未定义或者提示/usr/bin/ld:cannotfind-lxxx,其中xxx即表示函式库文件名称,其命名规则是:lib+库名(xxx)+.so,会发生这样的原因有以下三种情形:

1.系统没有安装相对应的lib

2.相对应的lib版本不对

3.lib(.so)symboliclink不正确,没有连结到正确的函式库文件(.so)

解决方法:

(1)先判断在/usr/lib下的相对应的函式库文件(.so)symboliclink是否正确,若不正确改成正确的连结目标即可解决问题。

(2)若不是symboliclink的问题引起,而是系统缺少相对应的lib安装lib即可解决。

(3)如何安装缺少的lib先搜寻相对应的LIB再进行安装

#apt-cachesearchlibxxx-dev

#apt-getinstalllibxxx-dev

若搜索到相关项,执行安装即可,若搜索不到,可上网搜索相关内容,此种错误一般很容易在网上找到解决方法。

4.configure参数选项以及QT库裁剪

4.1configure参数分类

QT的源码包目录中执行以下指令可查看configure的详细参数:

#./configure--help

Usage:configure[-h][-prefix<dir>][-prefix-install][-bindir<dir>][-libdir<dir>]
[-docdir<dir>][-headerdir<dir>][-plugindir<dir>][-datadir<dir>]
[-translationdir<dir>][-sysconfdir<dir>][-examplesdir<dir>]
[-demosdir<dir>][-buildkey<key>]

以下是QT基本参数:
[-release][-debug][-debug-and-release][-developer-build]
[-shared][-static][-no-fast][-fast][-no-largefile]
[-largefile][-no-exceptions][-exceptions][-no-accessibility]
[-accessibility][-no-stl][-stl][-no-sql-<driver>][-sql-<driver>]
[-plugin-sql-<driver>][-system-sqlite][-no-qt3support][-qt3support]
[-platform][-D<string>][-I<string>][-L<string>][-help]

以下是对QT所支持模块的设置参数
[-qt-zlib][-system-zlib][-no-gif][-qt-gif][-no-libtiff][-qt-libtiff][-system-libtiff]
[-no-libpng][-qt-libpng][-system-libpng][-no-libmng][-qt-libmng]
[-system-libmng][-no-libjpeg][-qt-libjpeg][-system-libjpeg][-make<part>]
[-no-make<part>][-R<string>][-l<string>][-no-rpath][-rpath][-continue]
[-verbose][-v][-silent][-no-nis][-nis][-no-cups][-cups][-no-iconv]
[-iconv][-no-pch][-pch][-no-dbus][-dbus][-dbus-linked]
[-no-separate-debug-info]

以下是第三方库的支持参数:
[-no-mmx][-no-3dnow][-no-sse][-no-sse2]
[-qtnamespace<namespace>][-qtlibinfix<infix>][-separate-debug-info]
[-armfpa][-no-optimized-qmake][-optimized-qmake][-no-xmlpatterns]
[-xmlpatterns][-no-phonon][-phonon][-no-phonon-backend]
[-phonon-backend][-no-openssl][-openssl][-openssl-linked]
[-no-gtkstyle][-gtkstyle][-no-svg][-svg][-no-webkit][-webkit]
[-no-scripttools][-scripttools]

以下是QT模块安装路径配置参数:

PS.以下选项都是可选,通过他们指定安装目录,不指定则用默认目录。选项前标记*的则为系统默认,+则为添加才有效那种
-prefix<dir>..........指定安装目录默认在/usr/local/Trolltech/QtEmbedded-4.X.X
-hostprefix[dir].....指定可扩展的工具库安装路径,默认当前目录
*-prefix-install.....指定QT的本地安装至/usr/local/Trolltech/QtEmbedded-4.X.X,此选项优先于-PREFIX

PS.以下选项用来指定分开安装不同部分,比如希望将可执行的放在/usr/bin将库文件放在/lib下等等
-bindir<dir>..........指定可执行文件路径<dir>(默认PREFIX/bin)
-libdir<dir>...........指定库文件路径<dir>(默认PREFIX/lib)
-docdir<dir>..........指定文档路径<dir>(默认PREFIX/doc)
-headerdir<dir>.....指定头文件路径<dir>(默认PREFIX/include)
-plugindir<dir>......指定插件路径<dir>(默认PREFIX/plugins)
-datadir<dir>...........指定QT要使用到的一些数据文件所在路径<dir>(默认PREFIX)
-translationdir<dir>..指定QT程序的翻译文件路径<dir>(默认PREFIX/translations)
-sysconfdir<dir>......指定QT的设置文件路径<dir>(默认PREFIX/etc/settings)
-examplesdir<dir>...指定实例文件,<dir>(默认PREFIX/examples)
-demosdir<dir>........指定demos的安装路径<dir>(默认PREFIX/demos)

以下选项可以匹配自定义插件:

-buildkey<key>......通过指定的key生成QT库和插件。

4.2configure参数详解

下边将对关键参数进行描述说明:

A.配置选项:

PS.默认的选项(*),可选添加选项(+)
*-release..............加上此选项编译程序QT不会做出优化,往往在开发过程使用此选项,是默认选项
-debug....................此选项在编译过程QT会对程序进行优化,在发布软件的时候应该用此选项
-debug-and-release..编译两个版本
-developer-build.....编译Qt的开发商和连接选项(包括自动测试出口的Qt
-opensource............以开源版本发布程序
-commercial...........以商业版本发布程序
*-shared...............创建和使用共享Qt库。
-static....................创建和使用静态的Qt库。
*-no-fast.............使用通常的Makefile来编译,是默认选项
-fast......................快速编译,除了封装必要的库,部分步骤省略或者用快速的方法处理
-no-largefile.........禁用大文件支持。
+-largefile...........支持访问大于4GB的文件
*-no-exceptions.禁用编译器本身对异常的处理
-exceptions...........启用编译器本身对异常的处理
-no-accessibility..
*-accessibility...禁用/启用无障碍支持
-no-stl.................
*-stl...................禁用/启用STL支持
-no-sql-<driver>..禁用SQL
-qt-sql-<driver>...根据需求启用SQL插件(默认全部关闭)
-plugin-sql-<driver>禁用/启用/启用插件对SQL的支持
-system-sqlite.....启用支持sqlite也可用-qt-sqlite
-no-qt3support.....
*-qt3support........禁用/启用qt3支持模块
-no-xmlpatterns....
+-xmlpatterns.......禁用/启用xmlpatterns模块
-no-phonon.........
+-phonon............禁用/启用Phonon模块(可以理解为声音控制模块)
-no-phonon-backend..
+-phonon-backend.....禁用/启用phonon-backend模块
-no-svg............
+-svg...............禁用/启用svg模块
-no-webkit.........
+-webkit............禁用/启用webkit模块(访问网络模块)
-no-scripttools....
+-scripttools.......禁用/启用scripttools模块
-platformtarget....MIPS平台指定模块(qws/linux-mips-g++)
-no-mmx............
-no-3dnow.........
-no-sse...............
-no-sse2.............以上四个分别是取消对mmx、mmx、sse、sse2指令集的支持
-qtnamespace<name>指定所有库代码路径.
-qtlibinfix<infix> 重命名所有.so库文件到指定路径
-D<string>........添加一个预处理器
-I<string>........添加一个明确的头文件路径
-L<string>........添加一个明确的库文件路径
-help,-h..........显示帮助信息

B.第三方库选项:

PS.用于个性化定制QT,一般项目需要什么插件就加上进行编译即可。
-qt-zlib..............
+-system-zlib..zlib依赖包
-no-gif.............
*-qt-gif...........gif图片支持包Seealsosrc/plugins/imageformats/gif/qgifhandler.h
-no-libtiff........
-qt-libtiff.........tiff支持插件
+-system-libtiff....默认是-system调用系统的,出错的话可以尝试用-qtqt的在编译过程不容易出错
-no-libpng........
-qt-libpng.........png图片支持插件
+-system-libpng....
-no-libmng.........
-qt-libmng.........mng支持插件
+-system-libmng.....
-no-libjpeg.........
-qt-libjpeg..........jpeg图片支持插件
+-system-libjpeg..
-no-openssl..........
+-openssl............openssl支持插件
-openssl-linked....
-ptmalloc..........系统内存分配器

C.扩展选项:

PS.扩展选项,模块的选择等,使编译更加人性化。
-make<part>........选择是否编译某些无关紧要的子模块
-nomake<part>.....(例如不想编译系统自导的demos则可使用-nomakedemos
-R<string>...........添加一个动态库
-l<string>............添加一个静态库
-no-rpath...............
+-rpath................是否将生成的库安装在软件的安装目录,默认是在安装目录,否则自己指定路径

-continue..............忽略错误一路前奔的编译,因为一般情况是按照模块逐个编译碰到错误就停止。加上此参数是全部编译最后处理
-verbose,-v.........显示每个步骤的详细信息
-silent.................安静的编译省略信息回显
*-no-optimized-qmake...
-optimized-qmake......禁用/开启qmake的优化作用
-no-nis............
*-nis...............禁用/开启NIS的支持
-no-cups...........
*-cups..............禁用/开启对CUPS的支持,需要cups/cups.handlibcups.so.2
-no-iconv..........
*-iconv.............禁用/开启对iconv的支持.
-no-pch............
*-pch...............禁用/开启是否使用预处理器头文件
-no-dbus...........
+-dbus..............禁用/开启对QTdbus模块的编译
-dbus-linked.......
-reduce-relocations.....减少因为链接优化而导致的而外的库文件重置
-no-separate-debug-info.不将调试信息放在一个文件内
*-separate-debug-info....将调试信息放在一个文件内

D.嵌入式QTE编译选项:
-xplatformtarget...........交叉编译过程指定目标平台

例如MIPS平台指定模块(qws/linux-mips-g++)
-no-feature-<feature>...不编译<feature>.
-feature-<feature>......编译<feature>可选featuresrc/corelib/global/qfeatures.txt文件内可查寻
-embedded<arch>.....指定嵌入式平台的类型例如:armmipsx86generic
-armfpa.......................
-no-armfpa.................禁用/启用armfpa浮点格式支持

-little-endian..........指定字节顺序为小字节序、低字节序
-big-endian............指定字节顺序为大字节序、高字节序
-host-little-endian...指定主机平台字节顺序为小字节序、低字节序
-host-big-endian.....指定主机平台字节顺序为大字节序、高字节序
注:只需指定目标平台的字节顺序,否则将会选用主机的字节顺序
-no-freetype........
-qt-freetype........禁用/启用对freetype模块的支持
*-system-freetype....
-qconfiglocal.....默认配置的情况下系统使用src/corelib/global/qconfig-local.h
-depths<list>.....支持显示设备的位深度。有1,4,8,12,15,16,18,24,32and'all'
-qt-decoration-<style>....指定编译后的界面风格默认是windows
-plugin-decoration-<style>指定插件风格默认windows
-no-decoration-<style>....不知定风格采用默认选项
-no-opengl..........
-opengl<api>.......禁用/开启对opengl的支持
注意:使用此选项的前提条件是硬件支持且可以驱动
-qt-gfx-<driver>...指定显示设备驱动库
参考选项为:[linuxfbtransformedqvfbvncmultiscreen]
-plugin-gfx-<driver>指定显示插件驱动库
参考选项为:[ahidirectfbhybridlinuxfbpowervrqvfbtransformedvnc]
-no-gfx-<driver>...不加载显示设备
参考选项为:[linuxfbtransformedqvfbvncmultiscreen]
-qt-kbd-<driver>...指定图形界面下的键盘驱动库
参考选项为:[ttyusbsl5000yopyvr41xxqvfb]
-plugin-kbd-<driver>E指定图形界面下键盘插件驱动库
参考选项为:[linuxissl5000usbvr41xxyopy]
-no-kbd-<driver>...不加载指定驱动
参考选项为:[ttyusbsl5000yopyvr41xxqvfb]
-qt-mouse-<driver>...指定图形界面下鼠标驱动库
参考选项为:[pcbuslinuxtpyopyvr41xxtslib(触摸屏选这个)qvfb]
-plugin-mouse-<driver>鼠标插件驱动库
参考选项为:[buslinuxislinuxtppctslibvr41xxyopy]
-no-mouse-<driver>...指定不加载的鼠标驱动库模块
参考选项为:[pcbuslinuxtpyopyvr41xxtslibqvfb]
-iwmmxt............编译使用iwmmxt指令集,方便对某些XScaleCPUs的支持
-no-glib...........
+-glib..............禁用/启用对glib的支持

4.3QT库裁剪

首先我们看看前边编译成功的QT-4的库的大小:

#du-sh*.so.4.7.1

3.5M libQtCore.so.4.7.1

4.1M libQtDeclarative.so.4.7.1

13M libQtGui.so.4.7.1

124K libQtMultimedia.so.4.7.1

1.2M libQtNetwork.so.4.7.1

2.8M libQtScript.so.4.7.1

980K libQtScriptTools.so.4.7.1

824K libQtSql.so.4.7.1

168K libQtTest.so.4.7.1

324K libQtXml.so.4.7.1

对于一个基本的QT程序,libQtGui以及libQtCore这两个基本库是必须的,也就是即便是运行一个最简单的HelloWorld程序,也至少需要占据16.5M大小的存储空间,这对于有限的嵌入式板子资源来说是一个极大的浪费,最好的方法是进行个性化定制QT开发包,通过裁剪QT库来减少板上资源浪费,同时也有利于提高QT程序在板上的运行速度,具体方法如下:

A.通过configure参数对编译树进行简单裁剪:

Qt-4开始采用了模块化的形式,将独立的功能封装在独立的库里,所以可以很简单的去掉一些不需要的库,这样也能节省编译时间和对硬盘空间的占用。Qtconfigure配置提供了一些设置模块的方法,参考上边的configure参数详解部分,编译之前确定哪些功能是不必要的,我们可以通过configure的时候加这些选项就可以加上或者去掉相应模块的支持。例如在configure参数中加入-no-phonon-no-webkit-no-qt3support,即可裁剪掉多媒体控制模块、访问网络模块、QT3兼容模块等,下边提供一个成功编译的configure的设置例子:

./configure-release-shared-fast-no-largefile-no-exceptions-no-accessibility-no-stl-no-sql-sqlite-no-qt3support-no-xmlpatterns-no-multimedia-no-audio-backend-no-phonon-no-phonon-backend-no-svg-no-webkit-no-javascript-jit-no-script-no-scripttools-no-declarative-no-declarative-debug-no-mmx-no-3dnow-no-sse-no-sse2-no-sse3-no-ssse3-no-sse4.1-no-sse4.2-no-avx-no-gif-no-libtiff-qt-libjpeg-no-openssl-makelibs-nomaketools-nomakeexamples-nomakedocs-nomakedemo-no-nis-no-cups-no-iconv-no-dbus-no-openssl-xplatformqws/linux-mips-g++-embeddedmips-no-iconv-no-gtkstyle-no-nas-sound-no-opengl-no-openvg-no-sm-no-xshape-no-xvideo-no-xsync-no-xinerama-no-xcursor-no-xfixes-no-xrandr-no-xrender-no-mitshm-no-xinput-no-xkb-no-glib-qt-freetype-depths8,16,24,32-qt-gfx-linuxfb-no-gfx-transformed-no-gfx-multiscreen-no-gfx-vnc-no-gfx-qvfb-no-glib-no-declarative-debug

编译完成后再查看QT库的大小:

#du-sh*.so.4.7.1

3.5M lib/libQtCore.so.4.7.1

13M lib/libQtGui.so.4.7.1

1.2M lib/libQtNetwork.so.4.7.1

272K lib/libQtSql.so.4.7.1

168K lib/libQtTest.so.4.7.1

324K lib/libQtXml.so.4.7.1

可以发现基本库大小并未有多少裁剪,但是相应的模块减少了。由此可以知道通过configure设置参数裁剪可以裁剪模块,通过裁剪模块可以减少编译时间,同时减少部分非必须模块导致的编译错误,但是无法改变一些固有的基本模块,那么我们若需要进一步裁剪,则需要通过以下方式。

B.通过QT提供的qconfig工具进行对模块定制:

Qt的嵌入式版本支持feature裁剪,我们可以充分利用这一特性让对Qt模块进行定制。具体的做法是要做一个自己的qconfig-xxx.h特性文件,该文件中定义你要定制Qt中的哪些feature。在configure的时候加“-qconfigxxx选项,Qt就会根据你给出的配置文件来编译,以达到裁剪的目的。QT默认不裁剪任何feature。所有Qt预定义好的qconfig文件,可以在src/corelib/global/下找到,包括qconfig-minimal.h,qconfig-small.h,qconfig.medium.h,qconfig-large.hqconfig-dist.h,也就是从裁剪量由多到少都有据可依。如果要添加你自己的配置文件,要在src/corelib/global下建立一个形如qconfig-xxx.h的文件,这里的xxx也就是你要在configure的时候传入的qconfig参数。

Qt里还提供了一个可视化的配置依赖的工具——qconfig该工具的源码包在$QTDIR/tools/qconfig目录。需要我们自己手动编译,需要注意的是该工具需要基于开发环境的Qt桌面版本编译,不需要进行交叉编译:

首先在本机的Ubuntu系统中安装QT-4

#apt-getinstalllibqt4-devqt4-dev-toolslibqt4-gui

安装完成后重新打开新的终端,目的是为了清除之前加入的QT环境变量,然后进入QT的源码包,然后执行以下命令:

#cdtools/qconfig

#/usr/share/qt4/bin/qmake-project

#/usr/share/qt4/bin/qmake

#make

编译完成后,在当前目录生成一个qconfig的可执行程序。

#./qconfig

然后选择QT-4源码包路径下的src/corelib/global/目录中的qfeatures.txt文件,如下图所示


然后展开各个选项,得到如下图所示可视化选择界面:


通过勾选每个模块中的选项,即可对各个模块进行个性化配置。需要注意的是通过单击选项可以在右边区域看到模块详细信息,其中列出了所属模块信息以及依赖,即不同模块之间所存在依赖关系,若将某些我们需要的模块所依赖的其他模块裁剪掉了,则在编译过程中会报错。

定制好相关模块的选项后,点击File->SaveAs,选择源码包中的src/corelib/global/目录,填上自定义Filename,例如qconfig-example.h,点击保存,即可生成所需的配置文件。

下边提供一个编译通过的qconfig-example.h文件:

Filesrc/corelib/global/qconfig-example.h

/*D-Bus*/

#ifndefQT_NO_DBUS

#defineQT_NO_DBUS

#endif

/*Dialogs*/

#ifndefQT_NO_COLORDIALOG

#defineQT_NO_COLORDIALOG

#endif

#ifndefQT_NO_ERRORMESSAGE

#defineQT_NO_ERRORMESSAGE

#endif

#ifndefQT_NO_FILEDIALOG

#defineQT_NO_FILEDIALOG

#endif

#ifndefQT_NO_PRINTDIALOG

#defineQT_NO_PRINTDIALOG

#endif

#ifndefQT_NO_WIZARD

#defineQT_NO_WIZARD

#endif

/*Images*/

#ifndefQT_NO_IMAGEFORMAT_BMP

#defineQT_NO_IMAGEFORMAT_BMP

#endif

#ifndefQT_NO_IMAGEFORMAT_PPM

#defineQT_NO_IMAGEFORMAT_PPM

#endif

#ifndefQT_NO_IMAGEFORMAT_XBM

#defineQT_NO_IMAGEFORMAT_XBM

#endif

#ifndefQT_NO_IMAGEFORMAT_XPM

#defineQT_NO_IMAGEFORMAT_XPM

#endif

#ifndefQT_NO_MOVIE

#defineQT_NO_MOVIE

#endif

/*ItemViews*/

#ifndefQT_NO_DATAWIDGETMAPPER

#defineQT_NO_DATAWIDGETMAPPER

#endif

#ifndefQT_NO_LISTVIEW

#defineQT_NO_LISTVIEW

#endif

#ifndefQT_NO_PROXYMODEL

#defineQT_NO_PROXYMODEL

#endif

#ifndefQT_NO_STANDARDITEMMODEL

#defineQT_NO_STANDARDITEMMODEL

#endif

#ifndefQT_NO_TABLEVIEW

#defineQT_NO_TABLEVIEW

#endif

#ifndefQT_NO_TREEVIEW

#defineQT_NO_TREEVIEW

#endif

/*Kernel*/

#ifndefQT_NO_TEXTHTMLPARSER

#defineQT_NO_TEXTHTMLPARSER

#endif

#ifndefQT_NO_XMLSTREAM

#defineQT_NO_XMLSTREAM

#endif

/*Networking*/

#ifndefQT_NO_BEARERMANAGEMENT

#defineQT_NO_BEARERMANAGEMENT

#endif

#ifndefQT_NO_COP

#defineQT_NO_COP

#endif

#ifndefQT_NO_HOSTINFO

#defineQT_NO_HOSTINFO

#endif

#ifndefQT_NO_NETWORKDISKCACHE

#defineQT_NO_NETWORKDISKCACHE

#endif

#ifndefQT_NO_NETWORKINTERFACE

#defineQT_NO_NETWORKINTERFACE

#endif

#ifndefQT_NO_NETWORKPROXY

#defineQT_NO_NETWORKPROXY

#endif

#ifndefQT_NO_UDPSOCKET

#defineQT_NO_UDPSOCKET

#endif

#ifndefQT_NO_URLINFO

#defineQT_NO_URLINFO

#endif

/*Painting*/

#ifndefQT_NO_PRINTER

#defineQT_NO_PRINTER

#endif

#ifndefQT_NO_CUPS

#defineQT_NO_CUPS

#endif

/*Phonon*/

#ifndefQT_NO_PHONON_ABSTRACTMEDIASTREAM

#defineQT_NO_PHONON_ABSTRACTMEDIASTREAM

#endif

#ifndefQT_NO_PHONON_AUDIOCAPTURE

#defineQT_NO_PHONON_AUDIOCAPTURE

#endif

#ifndefQT_NO_PHONON_EFFECT

#defineQT_NO_PHONON_EFFECT

#endif

#ifndefQT_NO_PHONON_MEDIACONTROLLER

#defineQT_NO_PHONON_MEDIACONTROLLER

#endif

#ifndefQT_NO_PHONON_OBJECTDESCRIPTIONMODEL

#defineQT_NO_PHONON_OBJECTDESCRIPTIONMODEL

#endif

#ifndefQT_NO_PHONON_PLATFORMPLUGIN

#defineQT_NO_PHONON_PLATFORMPLUGIN

#endif

#ifndefQT_NO_PHONON_SEEKSLIDER

#defineQT_NO_PHONON_SEEKSLIDER

#endif

#ifndefQT_NO_PHONON_SETTINGSGROUP

#defineQT_NO_PHONON_SETTINGSGROUP

#endif

#ifndefQT_NO_PHONON_VIDEO

#defineQT_NO_PHONON_VIDEO

#endif

#ifndefQT_NO_PHONON_VOLUMESLIDER

#defineQT_NO_PHONON_VOLUMESLIDER

#endif

/*Styles*/

#ifndefQT_NO_STYLE_MOTIF

#defineQT_NO_STYLE_MOTIF

#endif

#ifndefQT_NO_STYLE_WINDOWSXP

#defineQT_NO_STYLE_WINDOWSXP

#endif

/*Utilities*/

#ifndefQT_NO_ANIMATION

#defineQT_NO_ANIMATION

#endif

#ifndefQT_NO_DESKTOPSERVICES

#defineQT_NO_DESKTOPSERVICES

#endif

#ifndefQT_NO_GESTURES

#defineQT_NO_GESTURES

#endif

#ifndefQT_NO_STATEMACHINE

#defineQT_NO_STATEMACHINE

#endif

#ifndefQT_NO_SYSTEMTRAYICON

#defineQT_NO_SYSTEMTRAYICON

#endif

#ifndefQT_NO_UNDOCOMMAND

#defineQT_NO_UNDOCOMMAND

#endif

/*Widgets*/

#ifndefQT_NO_GROUPBOX

#defineQT_NO_GROUPBOX

#endif

#ifndefQT_NO_LCDNUMBER

#defineQT_NO_LCDNUMBER

#endif

#ifndefQT_NO_CONTEXTMENU

#defineQT_NO_CONTEXTMENU

#endif

#ifndefQT_NO_DOCKWIDGET

#defineQT_NO_DOCKWIDGET

#endif

#ifndefQT_NO_TOOLBAR

#defineQT_NO_TOOLBAR

#endif

#ifndefQT_NO_MENUBAR

#defineQT_NO_MENUBAR

#endif

#ifndefQT_NO_RUBBERBAND

#defineQT_NO_RUBBERBAND

#endif

#ifndefQT_NO_SLIDER

#defineQT_NO_SLIDER

#endif

#ifndefQT_NO_GRAPHICSVIEW

#defineQT_NO_GRAPHICSVIEW

#endif

#ifndefQT_NO_SPINWIDGET

#defineQT_NO_SPINWIDGET

#endif

#ifndefQT_NO_SPLASHSCREEN

#defineQT_NO_SPLASHSCREEN

#endif

#ifndefQT_NO_STACKEDWIDGET

#defineQT_NO_STACKEDWIDGET

#endif

#ifndefQT_NO_STATUSBAR

#defineQT_NO_STATUSBAR

#endif

#ifndefQT_NO_STATUSTIP

#defineQT_NO_STATUSTIP

#endif

#ifndefQT_NO_TOOLBUTTON

#defineQT_NO_TOOLBUTTON

#endif

#ifndefQT_NO_WHATSTHIS

#defineQT_NO_WHATSTHIS

#endif

#ifndefQT_NO_TOOLTIP

#defineQT_NO_TOOLTIP

#endif

#ifndefQT_NO_VALIDATOR

#defineQT_NO_VALIDATOR

#endif

然后执行以下命令进行编译:

#./configure-release-shared-fast-no-largefile-no-exceptions-no-accessibility-no-stl-no-sql-sqlite-no-qt3support-no-xmlpatterns-no-multimedia-no-audio-backend-no-phonon-no-phonon-backend-no-svg-no-webkit-no-javascript-jit-no-script-no-scripttools-no-declarative-no-declarative-debug-no-mmx-no-3dnow-no-sse-no-sse2-no-sse3-no-ssse3-no-sse4.1-no-sse4.2-no-avx-no-gif-no-libtiff-qt-libjpeg-no-openssl-makelibs-nomaketools-nomakeexamples-nomakedocs-nomakedemo-no-nis-no-cups-no-iconv-no-dbus-no-openssl-xplatformqws/linux-mips-g++-embeddedmips-no-iconv-no-gtkstyle-no-nas-sound-no-opengl-no-openvg-no-sm-no-xshape-no-xvideo-no-xsync-no-xinerama-no-xcursor-no-xfixes-no-xrandr-no-xrender-no-mitshm-no-xinput-no-xkb-no-glib-qt-freetype-depths8,16,24,32-qt-gfx-linuxfb-no-gfx-transformed-no-gfx-multiscreen-no-gfx-vnc-no-gfx-qvfb-no-glib-no-declarative-debug-qconfigexample

#make

#makeinstall

安装编译完成后再次查看库的大小:

#du-sh/usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/*.so.4.7.1

3.1M /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtCore.so.4.7.1

6.4M /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtGui.so.4.7.1

512K /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtNetwork.so.4.7.1

272K /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtSql.so.4.7.1

168K /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtTest.so.4.7.1

324K /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtXml.so.4.7.1

可以看到裁剪是有效的,其中libQtGui裁剪了近半的空间。

5.QT程序移植及运行环境配置

下边将以QT自带example为例讲述移植过程:

在编译之前,需要先制定好编译的QT环境变量,为了方便使用,建议使用脚本进行配置,在程序源文件目录中新建一个qte4-path.sh的文件,内容如下:

File./qte4-path.sh

exportQTDIR=/usr/local/Trolltech/QtEmbedded-4.7.1-mips/

exportQTEDIR=$QTDIR

exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

exportLD_LIBRARY_PATH=/TSLIB/lib:$LD_LIBRARY_PATH

exportPATH=/home/cpu/gcc-3.4.6-2f/bin:$PATH

然后执行以下命令:

#chmoda+xqte4-path.sh

#sourceqte4-path.sh

#cdexamples/widgets/calculator

#$QTDIR/bin/qmake-project

#$QTDIR/bin/qmake

#make

编译成功后可在目录下找到生成的二进制可执行文件calculator,查看该二进制可执行文件相关链接库信息:

#mipsel-linux-readelf-dcalculator

Dynamicsectionatoffset0x15ccontains33entries:

标记类型名称/

0x00000001(NEEDED)共享库:[libQtGui.so.4]

0x00000001(NEEDED)共享库:[libQtNetwork.so.4]

0x00000001(NEEDED)共享库:[libQtCore.so.4]

0x00000001(NEEDED)共享库:[libpthread.so.0]

0x00000001(NEEDED)共享库:[libstdc++.so.6]

0x00000001(NEEDED)共享库:[libm.so.6]

0x00000001(NEEDED)共享库:[libgcc_s.so.1]

0x00000001(NEEDED)共享库:[libc.so.6]

0x0000000f(RPATH)Libraryrpath: [/usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib]

可以看到Libraryrpath即链接库目录为:

/usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib

还有根据之前安装交叉编译工具链所带的基本库目录为:

/home/cpu/gcc-3.4.6-2f/mipsel-linux/lib/

我们可以在这两个目录下将运行widgets所需要的链接库文件都拷贝出来:

eg.

#cp//usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtGui.so.4.

这些*.so文件即为在Loongson1B开发板上运行QT程序calculator所需要的动态链接库文件。

接下来需要说明一下板上文件系统内QT环境参数设置问题:

上边可以看到QTLibraryrpath的路径参数为:

/usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib

在开发板上,默认的QT路径即为:

/usr/local/Trolltech/QtEmbedded-4.7.1-mips/

故而我们只需要将运行QT程序需要的相关库文件及相关文件放置在此目录下,板上系统在运行QT程序时即会自动搜索此目录下的相应文件进行加载,该目录下的目录结构一般如下:

/usr/local/Trolltech/QtEmbedded-4.7.1-mips/-->

{

lib/ --> fonts

plugins --> imageformats

translations

}

lib目录用于放置运行QT程序需要的动态库文件,lib目录内的fonts用于放置QT程序需要的字体文件;

plugins用于放置运行QT程序需要加载的插件,一般情况下显示图片需要用到imageformats插件;

translations用于放置QT程序语言国际化支持的翻译文件。

而构建自己的QT文件夹,相关文件需要按照以上QT文件目录结构进行放置。

同时为了TSLIB触摸屏支持,我们需要将之前编译完成的TSLIB文件夹拷贝到板上的文件系统,默认存放位置为编译QT时指定的TSLIB路径。

当然我们也可以通过配置环境变量参数来改变QT目录及TSLIB目录的路径,下边列出板上设置的环境参数设置:

File/etc/profile

...

#指定QT目录,可更改成自己的QT目录路径

exportQTDIR=/usr/local/Trolltech/QtEmbedded-4.7.1-mips

#指定中文编码格式,解决中文乱码问题,当然程序中也必须为UTF-8格式编码

exportLC_ALL=zh_CN.UTF-8

exportLANG_ALL=zh_CN.UTF-8

exportLANG=zh_CN.UTF-8

#指定TSLIB目录,可更改成自己的TSLIB目录路径

exportTSLIB_ROOT=/TSLIB

#指定相关TSLIB运行参数及设备类型

exportTSLIB_CONSOLEDEVICE=none

exportTSLIB_FBDEVICE=/dev/fb0

exportTSLIB_TSDEVICE=/dev/event0

exportTSLIB_CALIBFILE=/etc/pointercal

exportTSLIB_CONFFILE=/TSLIB/etc/ts.conf

exportTSLIB_PLUGINDIR=/TSLIB/lib/ts

exportTSLIB_TSEVENTTYPE=INPUT

#指定QT支持TSLIB触摸屏设备

exportQWS_MOUSE_PROTO=Tslib:/dev/event0

#指定QT库及TSLIB库加载路径

exportLD_LIBRARY_PATH=$QTDIR/lib:$TSLIB_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH

#设置QT程序显示参数

exportQWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"

#指定QT程序加载字体路径

exportQT_QWS_FONTDIR=$QTDIR/lib/fonts

#指定QT程序加载插件路径

exportQT_PLUGIN_PATH=$QTDIR/plugins/

...

进行以上配置之后,即可在板子上运行程序,第一次使用TSLIB触摸屏,需要对触摸屏进行校准:

#$TSLIB_ROOT/bin/ts_calibrate

校准后在/etc目录下会生成一个名为pointercal的校准配置文件

#./calculator-qws

这里需要说明的是:qws的全称是Qtwindowssystem,是QT自行开发的窗口系统,体系结构类似XWindows,是一个C/S结构,由QWSServer在物理设备上显示,由QWSClient实现界面,两者通过socket进行彼此的通讯,而这里后边加的运行参数-qws是指明程序是QWSServer

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics