您的位置:首页 > 服装鞋帽 > 男装 > 在redhat9系统下编译本机虚拟qtopia-2.1.1

在redhat9系统下编译本机虚拟qtopia-2.1.1

luyued 发布于 2011-01-04 22:16   浏览 N 次  

在redhat9系统下编译本机虚拟qtopia-2.1.1

一、 准备工作

e2fsprogs这个包可以提供uuid支持,可以在此下载:

http://e2fsprogs.sourceforge.net/

libjpeg

Qtopia不提供jpeg库,而Qtopia需要Qt/Embedded配置为支持jpeg。

libjpeg库可从http://www.ijg.org/ 下载

qt-x11-3.3.4,

ftp://ftp.trolltech.com/qt/source/

二、 预备知识

1、 Qt-X11/QtEmbedded/Qtopia及其他常见包的关系

build Qtopia时经常能看到以下的包:

qt-x11-2.3.2

qt-x11-3.3.x

qte-2.3.x

qtopia-2.x

tmake-1.3

qmake, uic, moc

...

其中Qtopia编译依赖Qte;

qt-x11-2.3只与编译一些tool有关,如uic,moc,qvfb..Qtopia并不依赖qt-x11;

qt-x11-3.3.x用来编译qtopia desktop(qtopia与桌面同步的工具)和i18n相关的lupdate、lrelease工具, 所以如果你configure qtopia的时候没有加-no-qtopiadesktop选项或者用到了-languages参数就得准备qt-x11-3.x了; 另外在phone版本中有一个modem模拟的工具叫做phonesim,也依赖qt-x11-3.x编译,但一般用不上的。

tmake用于生成Makefile文件, 用在qte应用上;

qmake包含在qtopia里, 用于为Qtopia应用生成Makefile文件;

2、uic,moc,qvfb,qmake,tmake和designer使用的时候要注意版本,2.x, 3.x, 4.x之间是不兼容的,但相同主版本号之间是兼容的,所以我们在build Qtopia过程中经常从qt-x11-2.3中拷贝现成的uic和moc供qte使用。

注意:编译过程中出现一些头文件找不到,类未定义等等,很多时候是因为误使用了系统默认搜索路径下的uic等工具造成的!!

3、Qtopia/QtEmbedded版本对应关系

Qtopia1.7.0 / Qte 2.3.7

Qtopia2.1.1 / Qte 2.3.10

Qtopia2.1.2 / Qte 2.3.11

Qtopia2.2.0 / Qte 2.3.12 (包含在qtopia2.2源码包中)

首先我们来介绍一下这几个文件:

arm-linux-gcc-3.4.1.tar.bz2

这个文件解压后形成usr/local/arm/3.4.1,里面的bin目录里含有用于交叉编译在ARM-linux系统上的运用程式时用的编译联接程序和共享联接库.

比如:

后面用到的arm-linux-gcc,arm-linux-g++.

(交叉编译:将源文件编译联接成能够在目标机器上运行的可执行文件)

qt-embedded-2.3.10-free.tar.gz

这个文件解压后形成qt-2.3.10.里面的bin目录里含有模拟目标机器的qvfb后台程序等,比如:

-rwxr-xr-x 1 root root 408332 8月 1 16:10 moc

-rwxrwxr-x 1 515 515 217013 2005-06-27 qvfb

-rwxrwxr-x 1 515 515 280629 2005-06-27 uic

以及程序在qvfb上PC机模拟运行时需要加载的库文件和可以通过arm-linux-g++编译出在ARM-linux系统上运行Qt所要加载的库文件.

比如:

drwx------ 2 515 515 16384 2005-01-23 fonts/

lrwxrwxrwx 1 root root 16 8月 1 16:23 libqte.so -> libqte.so.2.3.10

lrwxrwxrwx 1 root root 16 8月 1 16:23 libqte.so.2 -> libqte.so.2.3.10

lrwxrwxrwx 1 root root 16 8月 1 16:23 libqte.so.2.3 -> libqte.so.2.3.10

-rwxr-xr-x 1 root root 6671698 8月 1 16:23 libqte.so.2.3.10

qtopia-free-source-2.1.1.tar.bz2这个文件解压后形成qt-2.1.1,里面是Qtopia平台.Qtopia是TrollTech公司为采用嵌入式linux系统的消费电子设备而开发的综合应用平台.

qt-x11-2.3.2.tar.gz这个文件解压活形成qt-2.3.2,里面的bin目录里含有在PC机器上的运行的开发工具和编译程序,

比如:

-rwxr-xr-x 1 root root 2350402 8月 1 15:53 designer

-r-xr-xr-x 1 500 1000 4160 2001-01-26 findtr

-rwxr-xr-x 1 root root 320277 8月 1 15:41 moc

-r-xr-xr-x 1 500 1000 8065 2001-01-26 qt20fix

-r-xr-xr-x 1 500 1000 5324 2001-01-26 qtrename140

-rwxr-xr-x 1 root root 280629 8月 1 15:49 uic

lib目录里含有源文件编译成PC机器X11环境下的共享联接库,比如:

lrwxrwxrwx 1 root root 14 8月 1 15:49 libqt.so -> libqt.so.2.3.2

lrwxrwxrwx 1 root root 14 8月 1 15:49 libqt.so.2 -> libqt.so.2.3.2

lrwxrwxrwx 1 root root 14 8月 1 15:49 libqt.so.2.3 -> libqt.so.2.3.2-rwxr-xr-x 1 root root 6445720 8月 1 15:49 libqt.so.2.3.2

lrwxrwxrwx 1 root root 17 8月 1 15:49 libqutil.so -> libqutil.so.1.0.0

lrwxrwxrwx 1 root root 17 8月 1 15:49 libqutil.so.1 -> libqutil.so.1.0.0

lrwxrwxrwx 1 root root 17 8月 1 15:49 libqutil.so.1.0 -> libqutil.so.1.0.0

-rwxr-xr-x 1 root root 41568 8月 1 15:49 libqutil.so.1.0.0

tmake-1.13.tar.gz这个文件解压后形成tmake-1.13,里面bin目录里含有用于组织生成.pro文件的progen工具,和组织生成Makefile的tmake工具.以后经常会用到.

比如:

-r-xr-xr-x 1 500 users 6150 2003-08-01 progen

-r-xr-xr-x 1 500 users 32933 2004-01-28 tmake

-r--r--r-- 1 500 users 118 2003-08-01 tmake_win

三、开始编译和安装本机Qtopia 虚拟平台

1、需要资源:

tmake-1.13.tar.gz、qtopia-free-source-2.1.1.tar.gz、qt-embedded-2.3.10-free.tar.gz、qt-x11-2.3.2.tar.gz、qt-x11-free-3.3.4.tar.gz、e2fsprogs-1.39.tar.gz、 jpegsrc.v6b.tar.gz

将本次实验所需的四个文件拷贝到/root/2410sQt目录下,以下的实验都是在这个目录下进行的。

然后分别解压,如下:

tar -zxvf tmake-1.13.tar.gz

tar -xzvf qt-x11-2.3.2.tar.gz

tar -xzvf qt-embedded-2.3.10-free.tar.gz

tar -xzvf qtopia-free-source-2.1.1.tar.gz

2、初始环境变量

vi root/2410sQt//initial.sh

下面是文件内容

#!/bin/bash

export QPEDIR=$PWD/qtopia-free-2.1.1

export TMAKEDIR=$PWD/tmake-1.13

export QT2DIR=$PWD/qt-2.3.2

export QTEDIR=$PWD/qt-2.3.10

export QTDIR=$QTEDIR

export PATH=$QT2DIR/bin:$QTEDIR/bin:$QPEDIR/bin:$QTDIR/bin:$TMAKEDIR/bin:$PATH

export LD_LIBRARY_PATH=$QT2DIR/lib:$QTEDIR/lib:$QPEDIR/lib:$QTDIR/lib:$LD_LIBRARY_PATH

使文件生效

source root/2410sQt//initial.sh

3、安装qt-x11-2.3.2

export TMAKEPATH=$TMAKEDIR/lib/linux-g++

export QTDIR=$QT2DIR

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

./configure -no-xft

make

mkdir $QTEDIR/bin

cp bin/uic $QTEDIR/bin/

4、安装qvfb

export TMAKEPATH=$TMAKEDIR/lib/linux-g++

export QTDIR=$QT2DIR

export PATH=$QT2DIR/bin:$PATH:$TMAKEDIR/bin

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

cd $QTEDIR/tools/qvfb

tmake -o Makefile qvfb.pro

make

mv qvfb $QTEDIR/bin/

5、安装libqte

cd $QTEDIR

export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++

export QTDIR=$QTEDIR

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

cp -f $QPEDIR/src/qt/qconfig-qpe.h src/tools/

./configure -system-jpeg -gif -no-xft -qconfig qpe -qvfb -depths 4,8,16,32

make sub-src

6、安装 e2fsprogs-1.39(如果完全安装redhat9则不需要这一步)

cd e2fsprogs-1.39

./configure -enable-elf-shlibs

make

make install lib/uuid/

然后,安装qtopia需要的文件

l 将e2fsprogs-1.35/lib/目录下uuid的文件夹复制到qtopia-2.1.1-host/include下

l 将e2fsprogs-1.35/lib/中的libuuid.a libuuid.so复制到qtopia-2.1.1-host/lib下

7、安装qtopia

cd $QPEDIR

export QTDIR=$QTEDIR

export PATH=$QPEDIR/bin:$PATH

./configure

make

make install

cd image/opt/Qtopia

mkdir demohome

qtopia安装完整后,其目录下有一个image目录,有关qtopia所有东西都在里面。

三、 运行一下试试

可以写一个脚本:

vim /root/2410sQt/runQtopia.sh

#!/bin/bash

export QPEDIR=/root/2410sQt/qtopia-free-2.1.1

export QTDIR=/root/2410sQt/qt-2.3.10

export LD_LIBRARY_PATH=/root/2410sQt/qt-2.3.10/lib:/root/2410sQt/qt-2.3.2/lib:/root/2410sQt/qtopia-free-2.1.1/lib:

export PATH=/root/2410sQt/qt-2.3.10/bin:$PATH

qvfb -width 640 -height 480&

sleep 5

$QPEDIR/bin/qpe.sh

过大约5秒钟,可以看到界面,但是不能运行里面的应用程序。

四、 让本机虚拟qtopia里的应用程序跑起来

Qtopia 2.1.1自由版中没有提供启动脚本,我们可以自己写一个:

vim root/2410sQt/demo.sh

下面是shell文件内容

#!/bin/bash

source /root/2410sQt/initial.sh

export QTDIR=/root/2410sQt/qtopia-free-2.1.1/image/opt/Qtopia

export QPEDIR=/root/2410sQt/qtopia-free-2.1.1/image/opt/Qtopia

export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH

export PATH=$QPEDIR/bin:$PATH

findproc() {

/bin/ps -e | /bin/sed -n -e '/\<'$1'\>/ s/^ *\([0-9][0-9]*\).*/\1/p'

}

killproc() {

pid=`findproc $1`

[ "$pid" != "" ] &&kill $pid

}

killall quicklauncher

killall qpe

killall qvfb

[ -x /sbin/fuser ] &&( /sbin/fuser -kn tcp 4242 || /sbin/fuser -kn tcp 4243 )

[ -x /bin/fuser ] &&( /bin/fuser -kn tcp 4242 || /bin/fuser -kn tcp 4243 )

echo "Stopping common sound deamons..."

artsd_pid=`findproc artsd`

[ "$artsd_pid" != "" ] &&kill $artsd_pid

esd_pid=`findproc esd`

[ "$esd_pid" != "" ] &&kill $esd_pid

echo "Starting qvfb..."

qvfb -width 640 -height 480 &

sleep 5

echo "Starting Qtopia 2.1.1..."

HOME=/root/2410sQt/qtopia-free-2.1.1/image/opt/Qtopia/demohome qpe

echo "Restarting killed sound deamons..."

[ "$artsd_pid" != "" ] &&artsd &

[ "$esd_pid" != "" ] &&esd &

然后就是让这个shell文件生效了。

source root/qtopia/shell/demo.sh

congratulations!!!

广告赞助商