Chinaunix首页 | 论坛 | 博客
  • 博客访问: 89066
  • 博文数量: 24
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2016-03-28 14:12
文章分类

全部博文(24)

文章存档

2016年(24)

我的朋友

分类: LINUX

2016-04-23 16:58:13

我的环境:
主机:redhat 5
主机编译器:gcc 4.1.1
交叉编译器:arm-linu-gcc 4.1.1
工具软件:
qt-embedded-linux-opensource-src-4.5.0.tar.bz2
qt-x11-opensource-src-4.5.0.tar.bz2
 
平时程序都是在PC上完成的,所以我们需要先安装X11版的QT来获得qvfb这工具,嵌入式的开发有了qvfb,就中以不需要实际的开发板,可以开发QT应用程序,至于开发驱动.那有开发板.
 
/usr/local/Trolltech/Qt-4.5.0/demos/                //是pc的qt程序,不是在qvfb里显示.
/usr/local/Trolltech/QtEmbedded-4.5.2-x86//demos/   //是x86版的qt程序,是在qvfb里显示.
/usr/local/Trolltech/QtEmbedded-4.5.2-arm//demos/   //是arm版的qt程序,是在板子里显示.
 
第一步:解压文件并命名
# tar -jxvf qt-x11-opensource-src-4.5.0.tar.bz2
# tar -jxvf qt-embedded-linux-opensource-src-4.5.0.tar.bz2
# mv qt-embedded-linux-opensource-src-4.5.0 qt-embedded-linux-opensource-src-4.5.0-x86    //构建用于pc上模拟开发的库,编译x86版QT应用程序.
# tar -jxvf qt-embedded-linux-opensource-src-4.5.0.tar.bz2
# mv qt-embedded-linux-opensource-src-4.5.0 qt-embedded-linux-opensource-src-4.5.0-arm     ////构建QT交叉编译库,编译arm版QT应用程序.然后移到开发板上直接运行.
 
第二步:配置及编译安装
安装qt-x11-opensource-src-4.5.0
进入 qt-x11-opensource-src-4.5.0目录分别执行:
#    ./configure -qvfb             //这记得把qvfb 配置好,即可直接安装qvfb工具.    
#     make
#     make install
三四个小时安装完后,这地自动生成 /usr/local/Trolltech目录,这是qt-x11-opensource-src-4.5.1安装后所在的目录.qt-x11-opensource-src-4.5.0原目录已编译,放着以后中备用.

下面接着安装qvfb工具:
进入qt-x11-opensource-src-4.5.0/toolS/qvfb 目录进行编订安装.
# make
# make install //这样qvfb就被安装到/usr/local/Trolltech/qt-4.5.0/bin目录下了。
make install完成后             //如能运行qvfb,就不用CP
#cp tools/qvfb/qvfb* /usr/local/Trolltech/Qt-4.5.1/bin
 
或者:也同样得到上面效果.
#cd /tools/qvfb
#make                     --会在qt-x11-opensource-src-4.5.0/bin下生成qvfb,我们将它copy至/usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin下
#cp ../..bin/qvfb /usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin
等于(或者)

将/usr/local/qt/qt-x11-opensource-src-4.5.0/tools/qvfb目录下的qvfb相关文件拷贝到/usr/local/Trolltech/Qt-4.5.0/bin目录下,
#cp /usr/local/qt/qt-x11-opensource-src-4.5.0/tools/qvfb/ /usr/local/Trolltech/Qt-4.5.1/bin3
 
在运行qvfb时,记到/usr/local/Trolltech/Qt-4.5.0/bin/qvfb 目录  (是我另一台虚拟机的系统。可能之前没编译qvfb,先做个笔记。必须到这目录才能运行,郁闷)
运行:
#./qvfb         
解决上面方法:
在/root/local/ qt-x11-opensource-src-4.5.3/tools/qvfb/目录中执行
#make  编译好qvfb可执行文件会在/root/local/qt-x11-opensource-src-4.5.3/bin目录下。
然后把/root/local/qt-x11-opensource-src-4.5.3/bin目录下这个qvfb可执行文件复制到qt-x11安装目录下,即/root/local/Trolltech /qt--4.5.3/bin中 .

安装qt-embedded-linux-opensource-src-4.5.0-x86
进入qt-embedded-linux-opensource-src-4.5.0-x86目录
#  ./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.0-x86 -embedded x86 -qvfb -graphicssystem raster   //这记得把qvfb 配置好,即可直接安装qvfb工具.
#  make
#  make install
//qt-x11-opensource-src-4.5.1-x86就编译好了。
运行前必须运行脚本,脚本是在你要编译x86版QT应用程序前要先执行的。它指定了一些引用。(脚本环境变量在后面有说明)

下面测试qvfb (先启动脚本)
输入:#qvfb &   //启动qvfb                    
#/usr/local/Trolltech/Qt-x86/demos/chip/
#./chip -qws         //启动
成功启动显示.
 
安装tslib
安装qt-embedded-linux-opensource-src-4.5.0-arm
//安装这个是最为关键的,因为编译好后要把lib拷贝到板子上
对于触摸屏幕,我使用的是tslib1.4.tar.gz
交叉编译tslib过程如下:
arm-9tdmi-linux-gnu交叉编译变量已在 /etc/bashc 里添加.
#tar -zxvf tslib1.4.tar.gz
#./autogen.sh  //生成configure
#./configure --prefix=/usr/local/tslib/ --host=arm-9tdmi-linux-gnu ac_cv_func_malloc_0_nonnull=yes (可以先生成个cache文件)
#make
#make install
 
 
接着安装qt-arm
进入qt-embedded-linux-opensource-src-4.5.0-arm目录
#./configure --prefix=/usr/local/Trolltech/QtEmbedded-4.5.0-arm -arch arm -embedded arm -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib       //因为开发版空间有限,只要完成需要的功能就可以了,可以直接裁剪. configure -help 查看.
   (./configure -prefix /home/jimmy/opt/run/qt-arm  -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb -confirm-license )
     //后面一大堆参数,其实就是为了尽量减少库的大小,而剪裁一些不需要的功能
 
今天出现:
The tslib functionality test failed!
 You might need to modify the include and library search paths by editing
 QMAKE_INCDIR and QMAKE_LIBDIR in
 /user/qt-embedded-linux-opensource-src-4.5.0-arm/mkspecs/qws/linux-arm-g++.
然后把arm/mkspecs/qws/linux-arm-g++/qmake.conf 里的linux-arm-g++ 改成交叉编译器 arm-9tdmi-linux-gnu  问题解决。
#make
#make install
//qt-x11-opensource-src-4.5.1-arm就编译好了。
运行前必须运行脚本,脚本是在你要编译arm版QT应用程序前要先执行的。它指定了一些引用。(脚本环境变量在后面有说明)
 
以上都安装完后.接下来设置环境变量:
分别三个环境变量脚本文件:(我把它们放到一个目录管理)
setenvQtpc.sh  (PC X11 版QT); setenvQtx86.sh (X86 版QT); setenvQtarm.sh (arm 版QT)
 
(1)qt-x11:
vi setenvQtpc.sh
添加如下内容:
PATH=/usr/local/Trolltech/Qt-4.5.0/bin:$PATH
QTDIR=/usr/local/Trolltech/Qt-4.5.0
QTDEDIR=$QTDIR
MANPATH=$QTDIR/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH QTDIR MANPATH LD_LIBRARY_PATH
 
(2)qt-embedded-x86:
vi setenvQtx86.sh
添加如下内容:
PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin:$PATH
QTDIR=/usr/local/Trolltech/QtEmbedded-4.5.0-x86
QTDEDIR=$QTDIR
MANPATH=$QTDIR/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH QTDIR MANPATH LD_LIBRARY_PATH
 
(3)qt-embedded-arm:
vi setenvQtarm.sh
添加如下内容:
PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-arm/bin:$PATH
QTDIR=/usr/local/Trolltech/QtEmbedded-4.5.0-arm
QTDEDIR=$QTDIR
MANPATH=$QTDIR/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH QTDIR MANPATH LD_LIBRARY_PATH

我们在运行的时候分别运行对应的脚本即可,比如我们要用qt-arm:
#cd /user/shdir
#source setenvQtarm.sh
然后就可以用qmake designer等工具了.
注:在端口执行有效,如果运行source setenv 再打开另端口.那样就会出错.
在qt-x86端口运行setenv脚本,在本端口再进行编译QT程序.
运行x86程序必须先运行qt-x11/qt-x86 的setenv脚本,然后就可运行qvfb工具.再另一个端口打应用程序.  ./qthello -qws  就样就可以在qvfb中显示.(运行qvfb,必须运行脚本)
 
接下来测试(现在例子)--也可以自己用QT写自己程序:):  //以下步骤是同一个端口
#cd /user/shdir
#source setenvQtx86.sh
#qvfb             //启动qvfb
#cd /usr/local/Trolltech/QtEmbedded-4.5.0-x86/demos/books          
#./books -qws                       //这样可以在QVFB里显示        //可另一个端口
 
注:
如果编译QT程序,记得先运行相应脚本,即可用相应的QT平台编译QT程序。
如:编译PC QT4程序,因为本子是qt3,所以必须先运行脚本。
#source setenvQtpc.sh
#desiger/qmake                  //同一个端口,这样,它们是用QT4编译程序。
如:编译x86 QT4程序,必须先运行脚本。
#source setenvQtx86.sh
#qmake                  //同一个端口,这样,它们是用X86版QT4编译程序,可以QVFB里显示.
如:编译arm QT4程序,必须先运行脚本。
#source setenvQtarm.sh
#qmake                  //同一个端口,这样,它们是用arm版QT4编译程序,可以在板子里显示。
 

以上是本人实践通过笔记。呵呵。从不了解到了解,让自己更理解,同时谢谢网上的高手献的文章。
 
阅读(1996) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~