分类: 嵌入式
2010-08-02 11:03:16
网上看了好多关于Qt开发平台搭建的帖子,但发现上面的帖子都比较旧,是针对Qt旧版本而写的。本人喜欢用较新版的东西,相信新版的东西肯定比旧版的东西 好用,果不其然Qt的新版本真的很好用,而且搭建起来更加容易。刚开始接触的时候,Qt的众多版本搞的自己头昏脑涨,什么Qt/x11,Qt /win,Qt/embedded ,Qtopia core,Qtopia等等,真的是丈二和尚摸不着头脑,幸好有网络,上网总能找到自己想要的东西,而且又不需要给予别人回报,当然自己也有些责任共享自 己的资料,看来共产主义在互联网已经开始萌芽了,哈哈。
先看看Qt的各个版本简介:
1.什么是QT
Qt是一个完整的C++应用程序开发框架。它包含一个类库,和用于跨平台开发及国际化的工具。Qt API在所有支持的平台上都是相同的,Qt工具在这些平台上的使用方式也一致, 因而Qt应用的开发和部署与平台无关。
2.什么是Qtopia
Qtopia 是一个面向嵌入式Linux的全方位应用程序开发平台,同时也是用于基于Linux的PDA(个人数字助理),智能电话(Smartphone)以及其他 移动设备的用户界面。简单地说,Qtopia实质上是一组关于PDA和智能电话的应用程序结合,如果需要开发这类产品可以在这组程序的基础上迅速构建出 PDA或者智能电话。Qtopia实质上依赖Qt/Embedded。
3.什么是Qt/Embedded
Qt/Embedded 是一个完整的自包含GUI和基于Linux的嵌入式平台开发工具。这个开发工具的名字好像最容易混淆,当然Qt/Embedded是最熟悉的名字,好像 Qtopia Core说的也是它。最近,奇趣公司又该名字了,它的新名字叫做qt-embedded-linux-xxxx,看来这个Qt/Embedded的马甲还 很多哈。
下面就是搭建Qt开发平台了,我的平台是fedora core 7,需要的Qt版本有两个:
qt-x11-opensource-src-
qt-embedded-linux-opensource-src-
qt-x11版本可以产生Qt开发工具,如designer等等,最重要的是可以得到qvfb,嵌入式的开发有了qvfb,就可以不需要实际的开发板,也可以开发Qt应程序。qt-embedded版本就是专门用于嵌入式方面的版本。下面是安装步骤:
1. 解压这两个qt包
a) tar –jxvf qt-x11-opensource-src-
b) tar –jxvf qt-embedded-linux-opensource-src-
c)cp qt-embedded-linux-opensource-src-
d)mv qt-embedded-linux-opensource-src-
这里,qt-embedded有两个复制:
qt-embedded-linux-opensource-src-
具体步骤与说明:
1. 下载源码包
qt-x11-opensource-src-
qt-embedded-linux-opensource-src-
下载地址:ftp://ftp.qtsoftware.com/qt/source/
2.编译及安装qt-x11-opensource-src-
qt-x11版本可以产生Qt开发工具,如designer等等,最重要的是可以得到qvfb,嵌入式的开发有了qvfb,就可以不需要实际的开发板,也可以开发Qt应程序。qt-embedded版本就是专门用于嵌入式方面的版本。
tar xjvf qt-x11-opensource-src-
cd qt-x11-opensource-src-
./configure
make
make install
历经漫长的编译过程,约一个半小时,默认安装在/usr/local/Trolltech/Qt-
3.编译及安装qt-embedded-linux-opensource-src-
在用户目录下建立一个src目录,用于存放编译源文件qt-embedded-linux-opensource-src-
mkdir ~/src
mv qt-embedded-linux-opensource-src-
tar xjvf qt-embedded-linux-opensource-src-
mv qt-embedded-linux-opensource-src-
tar xjvf qt-embedded-linux-opensource-src-
mv qt-embedded-linux-opensource-src-
cd qt-embedded-linux-opensource-src-
编译配置QtEmbedded-
./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.0-x86 -embedded x86 -qvfb
make
make install
-------OK!qt-embedded-x86被安装在/usr/local/Trolltech/QtEmbedded-
建立脚本文件:setenv_arm.sh,输入以下内容:
export QTEDIR=/usr/local/Trolltech/QtEmbedded-
export PATH=/usr/local/Trolltech/QtEmbedded-
export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-
编译x86版QT应用程序前,先执行此脚本文件:
root@hrixin-desktop:/usr/local/Trolltech/QtEmbedded-
编译安装tslib1.4
A、安装编译过程需用到的程序
root@hrixin-desktop:/home/hrixin# apt-get install autoconf(或autoconf2.13)
root@hrixin-desktop:/home/hrixin# apt-get install automake
root@hrixin-desktop:/home/hrixin# apt-get install libtool
B、配置编译
root@hrixin-desktop:/work/qt# tar xzvf tslib-1.4.tar.gz
root@hrixin-desktop:/work/qt# cd tslib
生成./configure
root@hrixin-desktop:/work/qt/tslib# source autogen.sh
root@hrixin-desktop:/work/qt/tslib# ./configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
root@hrixin-desktop:/work/qt/tslib# make
C、安装
root@hrixin-desktop:/work/qt/tslib# make install-strip //生成瘦身应用程序和库
打包
root@hrixin-desktop:/usr/local# tar czvf tslib.tar.gz tslib
D、复制到NFS文件系统/usr/local目录下解压
root@hrixin-desktop:/work/root_qtopia/usr/local# tar xzvf tslib.tar.gz
E、设置环境变量,校准触摸屏。
在天开板终端建立脚本文件,并执行:
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
注意:触摸屏的前提是你的触摸屏驱动已经写好,并加载进了内核.
你可以测试有没有加载触摸屏驱动,cat /dev/input/event0(这只是我的板子上的触摸屏) ,
点击触摸屏,看终端有无显示,若有则表明正确。
在开发板/usr/local/tslib/bin目录下执行校准触摸屏程序:
[root@FriendlyARM bin]# ./ts_calibrate
可以运行此目录下的其他程序进行测试。
至此,触摸屏程序能顺利运行,接下来移植QtEmbedded-
cd qt-embedded-linux-opensource-src-
./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.0-arm -embedded arm
make
make install
-------OK!qt-embedded-arm被安装在/usr/local/Trolltech/QtEmbedded-
4.至此我们已经安装好了qt-x11版,即在PC机上运行的QT,qt-embedded-x86版(x86体系的嵌入式板子上运行的QT)和qt-embedded-arm(arm板子上运行的QT).下一步:设置环境变量
(1)qt-x11:
vi setenv.sh
添加如下内容:
PATH=/usr/local/Trolltech/Qt-
LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-
保存退出.移到/usr/local/Trolltech/Qt-
(2)qt-embedded-x86:
vi setenv.sh
添加如下内容:
QTEDIR=/usr/local/Trolltech/QtEmbedded-
PATH=/usr/local/Trolltech/QtEmbedded-
LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-
保存退出.移到/usr/local/Trolltech/QtEmbedded-
(3)qt-embedded-arm:
vi setenv.sh
添加如下内容:
QTEDIR=/usr/local/Trolltech/QtEmbedded-
PATH=/usr/local/Trolltech/QtEmbedded-
LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-
保存退出.移到/usr/local/Trolltech/QtEmbedded-
我们在运行的时候分别运行对应的脚本即可,比如我们要用qt-x11:
cd /usr/local/Trolltech/Qt-
source setenv.sh
然后就可以用qmake designer等工具了.
5.做到这一步还有qvfb没有编译,到qt-x11-opensource-src-
cd qt-x11-opensource-src-
cd /tools/qvfb
make --会在qt-x11-opensource-src-
cp ../..bin/qvfb /usr/local/Trolltech/QtEmbedded-
6.做一个测试
cd /usr/local/Trolltech/QtEmbedded-
source setenv.sh
cd /usr/local/Trolltech/QtEmbedded-
qvfb -width 640 -height 480 &
./books -qws
-----------------------------------------------------------
出错信息一般为
Error opening framebuffer device /dev/fb0QScreenLinuxFb::connect: No such file or directory
这种情况发生最多的是编译Qt-Embedded的x86版本,希望在qvfb上运行应用时
使用者在
第一步运行qvfb后
第二步运行./myapp -qws
出现以上的提示错误
原因是Qt-Embedded在查找系统的显示设备时,默认去寻找LinuxFb,也即Linux的/dev/fb0设备,但是如果Qt- Embedded安装了其它显示设备,比如qvfb,则可以在qvfb上显示,但是需要一个插件(或者说驱动,可能会和设备驱动混淆),使Qt- Embedded能使用qvfb。 为了作到这一点,需要在编译Qt-Embedded时的configure命令加上如下选项
./configure -plugin-gfx-qvfb -plugin-kbd-qvfb -plugin-mouse-qvfb 或./configure -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
如果,你不想重新编译Qt-Embedded,也可以单独编译qvfb的gfxdrivers,命令如下
$ cd qt-embedded-linux-opensource-src-
对应所在的路径,在大家的机器上可能不尽相同,领会意思就行