1. 简介 QT是目前在linux上使用较广的一个图像系统。用户经常配合KDE桌面环境来使用。需要注意的是我们看到的并操作的是KDE,而不是QT。QT只是一套库函数(类库),KDE才是可执行程式.同时KDE为了其他程式方便的对其操作,也提供一套库函数(类库)。 在PC机上的QT是基于X11图像系统的,在嵌入设备中往往不必这么累赘,只需使用QTE(QT Embedded)即可包括PC平台中X11和QT库的功能。 另一方面,嵌入设备受许多条件的限制,桌面系统也不能直接使用PC机上已有的系统。QTOPIA就是相当于KDE的桌面系统.根据具体嵌入设备的需要能设置成phone和pocket pc两种。 2. 准备工作 2.1 目标 首先要明确将要干的是什么,将怎么做。 我们的目标非常明确??就是在自己的研发板上使用基于QTE的桌面系统QTOPIA。 我们的工作往往是先在PC完成以后移植到ARM平台上;先编译好QTE的库,再编译QTOPIA。因为这个系统和具体的设备有关(例如:触摸屏、时钟、电源管理设备等),所以最后还需要做设备接口的移植工作。
2.2 软件包 系统平台:RedHat 9(完全安装) qt-embedded-2.3.7.tar.gz (qte的库) qt-x11-2.3.2.tar.gz (为了生成相应的qtdesigner和qvfb) qtopia-free-1.7.0.tar.gz (qte的桌面环境程式) tmake-1.11.tar.gz (编译时会用到) e2fsprogs-1.35.tar.gz (只使用其中的uuid的库) 当下载完这些包以后我们先建立一个工作环境。假设所有软件包都下载在用户目录下,通常都是/root。 2.3 环境的建立 # cd ~ # mkdir x86-qtopia # tar zxvf qt-x11-2.3.2.tar.gz # mv qt-2.3.2 qt-x11 # cd x86-qtopia # tar zxvf ../tmake-1.11.tar.gz # tar zxvf ../qt-embedded-2.3.7.tar.gz # tar zxvf ../qtopia-free-1.7.0.tar.gz # tar zxvf ../e2fsprogs-1.35.tar.gz # mv tmake-1.11 tmake # mv qt-2.3.7/ qt # mv qtopia-free-1.7.0 qtopia # mv e2fsprogs-1.35 e2fsprogs # cp x86-qtopia arm-qtopia -rf 记住,用户目录下的x86-qtopia目录是PC机上编译的工作环境,arm-qtopia是arm平台的交叉编译工作环境,qt-x11是两者公用的。 接下来还必须编译qt-x11,主要是为了编译生成其中的qtdesigner和qvfb。qvfb程式在系统中并未安装,需要我们自己编译。 qtdesigner是和qt库的版本是相关的,当我们使用PC机上和QTE版本不符的qtdesigner时,可能在PC机上的qt-x11能使用的控 件在QTE上并未实现,导致应用程式编译不成功。所以,我们使用2.3版本的QTE时,必须使用相同版本的qt-x11编译生成的qtdesigner和 qvfb。 # cd ~/qt-x11 # export QTDIR=$PWD # echo yes | ./configure -static -no-xft -no-opengl -no-sm # make -C src/moc # cp src/moc/moc bin # make -C src # make -C tools/designer # make -C tools/qvfb # cp tools/qvfb/qvfb bin # strip bin/uic bin/moc bin/designer bin/qvfb # cp qt-x11/bin/* qt/bin -f # cp qt-x11/bin/* qt/bin -f
3. PC平台编译 编译之前做一下准备工作:打开一个控制台之后设置环境变量。 # cd ~/x86-qtopia # export QTDIR=$PWD/qt # export QPEDIR=$PWD/qtopia # export TMAKEDIR=$PWD/tmake # export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++ # export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH 3.1 编译QTE # cd $QTDIR # cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/ -f # (echo yes ; echo no) | ./configure -platform linux-generic-g++ -qconfig qpe -depths 16,24,32 # make -C src clean # make -C src 看一下$QTDIR目录下是否已有了qt的库了? 3.2 编译QTOPIA # cd $QPEDIR/src # ./configure # make clean # make 3.3 测试QTOPIA 激动的时刻来了,如果这个步骤成功将意味着能做应用研发了。 # cd ~/x86-qtopia # mkdir dist # cd dist # cp -af ../qt/lib/ . # cp -af ../qtopia/apps . # cp -af ../qtopia/bin . # cp -af ../qtopia/plugins . # cp -af ../qtopia/i18n . # cp -af ../qtopia/pics . 因为Security.png有点错误,所以必须进行一下操作: # cd pics # pngtopnm Security.png>a.pnm # pnmtopng a.pnm>Security.png 因为qpe运行的时候,当前目录必须是$QTDIR/bin,所以不能在$QTDIR目录下执行bin/qpe来运行。 # export QTDIR=~/x86-qtopia/qt # cd $QTDIR/bin # ./qvfb & # ./qpe & 看到qpe在qvfb中的界面了吗?我看到了~! 4. 目标平台交叉编译 和PC机上的编译相同,打开一个控制台之后需要设置环境变量。 # cd ~/arm-qtopia # export QTDIR=$PWD/qt # export QPEDIR=$PWD/qtopia # export TMAKEDIR=$PWD/tmake # export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++ # export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH 4.1 交叉编译QT
4.2 交叉编译QTOPIA
5. 移植QT中的相关设备接口 5.1 鼠标 5.2 触摸屏 6. 移植QTOPIA中的相关设备接口 6.1 电源管理设备 7. 编写QT程式并移植 8. 编写QTOPIA程式并移植 X. tips @ 移植的时候编译器的版本非常重要.qte-2.3.7在redhat9的3.2编译器下工作非常正常,但在Fedora4的gcc-3.4.2编译器下编 译却不成功.根据测试,PC平台上使用gcc-3.2能顺利编译,arm平台上使用gcc-2.95.2能顺利通过(gnuarm的编译器似乎不行,用华 恒光盘中的armv4l-unkown-linux-gcc的能编译通过) @ 编译过程中会提示缺少uuid的头文件和库,下载e2fsprogs-libs-1.38.tar.gz,里面有uuid的相关代码. @ 编译的时候需要指定编译器,在qt的configs目录下有许多文件,修改linux-arm-g++-*这些文件中的相关定义.例如:默认使用arm- linux-gcc编译器,而我使用的是GNUARM的arm-elf-gcc编译器,替换文件中所有arm-linux-前缀为arm-elf-即可. |