- 浏览: 12889401 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
sanrenxing_1:
GoEasy 实时推送支持IE6-IE11及大多数主流浏览器的 ...
WindowsPhone消息推送服务 -
张砚辉:
两侧照片绕Y轴旋转后有锯齿,请问锯齿解决方案,很长时间没解决
自定义带倒影和偏转的超炫Gallery -
knight_black_bob:
能不能把你自己的博客整理下分类下,写了这么多 ,都不知道怎么查 ...
Android_View,ViewGroup,Window之间的关系 -
jeasonyoung:
你这个代码实现在iOS8下应该是滑不动的
UISlider 滑块控件—IOS开发 -
wx_hello:
如果能写个可运行的java程序,不胜感激。。。
rs232串口通信原理
Loongson 1B板上移植QT-4及环境搭建(带TSLIB触摸屏支持)
目录
一、文档简介:
本文档用于介绍Loongson1B开发板上移植QT-4以及相关运行环境的搭建。
开发环境参数:
操作系统:Ubuntu11.04
本机平台:X86
目标平台:Loongson1B开发板
交叉编译工具链:gcc-3.4.6-2f(1B交叉编译工具链)
所需软件及工具包:
QT源码包:qt-everywhere-opensource-src-4.7.1.tar.gz
TSLIB源码包:tslib-1.4.tar.gz
二、移植过程
1.安装交叉编译工具链
首先安装Loongson1B开发板提供的交叉编译工具链:
解压gcc-3.4.6-2f.tar.gz。PS.有些工具链对目录有一定的要求,请询问交叉编译工具链提供者,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的参数:
File:mkspecs/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调用系统的,出错的话可以尝试用-qt,qt的在编译过程不容易出错
-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>可选feature在src/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开始采用了模块化的形式,将独立的功能封装在独立的库里,所以可以很简单的去掉一些不需要的库,这样也能节省编译时间和对硬盘空间的占用。Qt的configure配置提供了一些设置模块的方法,参考上边的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.h和qconfig-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文件:
File:src/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。
相关推荐
OpenHarmony龙芯1C300B 开源代码
龙芯mips64 上的 gcc交叉编译包,gcc版本是4.9.3
NeoKylin-Desktop-7.0-loongson_64-B033-personal-20170424.iso
loongson1B处理器用户手册。 单核处理器,是驱动开发人员必备参考。
龙芯Loongson1B模块文件 包含资料文件 源代码 国产化处理器
在龙芯3a5000系统下编译的qt静态库
loongson 1B 的开发入门手册与 loongson 1B 开发板配合使用,让开发者快速入门
loongson 平台上 使用buildroot交叉编译Qt5,也可以编译Qt 4.8,最后会生成一个可用于loongson平台的文件系统。
本项目的目的是把EFI/UEFI移植到Loongson(MIPS)上 EFI介绍参看: http://zh.wikipedia.org/w/index.php?title=Extensible_Firmware_Interface&variant=zh-cn 项目地址: http://efi-mips.sourceforge.net SVN : svn...
高薪程序员必备刷题软件
适用于龙芯平台的fio3.12版本工具源码,修复了fio在龙芯平台上无法使用libaio的bug,大家也可以去龙芯官网上去下载
中科院loongson3A处理器官方手册。 4核mips架构的处理器,开发必备
银河麒麟桌面操作系统V10SP1-loongarch64架构(龙芯3A5000) QT5离线安装包版本,包含所有依赖。 如需其他软件包可私信我
ubuntu下配置qt creator,最后可以使用loongson的gcc编译可用于龙芯平台上的二进制文件。
龙芯下java安装包
loongson2F处理器用户手册。 单核处理器,是驱动开发人员必备参考。
yocto 龙芯MIPS菜单
适用于龙芯平台的libaio源码包,该包修复了龙芯平台下fio无法调用libaio的bug,大家也可以去龙芯官网下载
龙芯2 笔记本可用的编译器,非交叉编译
详细介绍了loongson 2F的各项技术指标,为硬件和软件开发提供技术参考和依据。