在Linux中移植QT QTOPIA
Qtopia 是Trolltech 公司為采用嵌入式Linux操作系統(tǒng)的消費電子設備而開發(fā)的綜合應用平臺, Qtopia包含完整的應用層、靈活的用戶界面、窗口操作系統(tǒng)、應用程序啟動程序以及開發(fā)框架。
QT是目前在linux上使用較廣的一個圖形系統(tǒng)。用戶經(jīng)常配合KDE桌面環(huán)境來使用。需要注意的是我們看到的并操作的是KDE,而不是QT。QT只是一套庫函數(shù)(類庫),KDE才是可執(zhí)行程序.同時KDE為了其他程序方便的對其操作,也提供一套庫函數(shù)(類庫)。
在PC機上的QT是基于X11圖形系統(tǒng)的,在嵌入設備中往往不需要這么累贅,只需使用QTE(QT Embedded)即可包括PC平臺中X11和QT庫的功能。
另一方面,嵌入設備受許多條件的限制,桌面系統(tǒng)也不能直接使用PC機上已有的系統(tǒng)。QTOPIA就是相當于KDE的桌面系統(tǒng).根據(jù)具體嵌入設備的需要可以配置成phone和pocket pc兩種。
1、準備工作
(1) 目標
首先要明確將要干的是什么,將怎么做。
我們的目標很明確??就是在自己的開發(fā)板上使用基于QTE的桌面系統(tǒng)QTOPIA。
我們的工作往往是先在PC完成以后移植到ARM平臺上;先編譯好QTE的庫,再編譯QTOPIA。因為這個系統(tǒng)和具體的設備有關(例如:觸摸屏、時鐘、電源管理設備等),所以***還需要做設備接口的移植工作。
(2)軟件包
系統(tǒng)平臺:RedHat Array(完全安裝)
- 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的桌面環(huán)境程序)
- tmake-1.11.tar.gz (編譯時會用到)
- e2fsprogs-1.35.tar.gz (只使用其中的uuid的庫)
當下載完這些包以后我們先建立一個工作環(huán)境。假設所有軟件包都下載在用戶目錄下,通常都是/root。
(3)環(huán)境的建立
- # 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機上編譯的工作環(huán)境,arm-qtopia是arm平臺的交叉編譯工作環(huán)境,qt-x11是兩者公用的。
接下來還必須編譯qt-x11,主要是為了編譯生成其中的qtdesigner和qvfb。qvfb程序在系統(tǒng)中并未安裝,需要我們自己編譯。qtdesigner是和qt庫的版本是相關的,當我們使用PC機上和QTE版本不符的qtdesigner時,可能在PC機上的qt-x11能使用的控件在QTE上并未實現(xiàn),導致應用程序編譯不成功。所以,我們使用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
2、PC平臺編譯
編譯之前做一下準備工作:打開一個控制臺之后設置環(huán)境變量。
- # 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
(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目錄下是否已經(jīng)有了qt的庫了?
#p#
(2)編譯QTOPIA
- # cd $QPEDIR/src
- # ./configure
- # make clean
- # make
(3)測試QTOPIA
激動的時刻來了,如果這個步驟成功將意味著可以做應用開發(fā)了。
- # 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目錄下執(zhí)行bin/qpe來運行。
- # export QTDIR=~/x86-qtopia/qt
- # cd $QTDIR/bin
- # ./qvfb &
- # ./qpe &
看到qpe在qvfb中的界面了嗎?我看到了~!
3、 目標平臺交叉編譯
與PC機上的編譯一樣,打開一個控制臺之后需要設置環(huán)境變量。
- # 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
(1)交叉編譯QT
(2) 交叉編譯QTOPIA
4、移植QT中的相關設備接口
(1) 鼠標
(2)觸摸屏
5、移植QTOPIA中的相關設備接口
(1)電源管理設備
6、編寫QT程序并移植
7、編寫QTOPIA程序并移植
- X. tips
1、移植的時候編譯器的版本很重要.qte-2.3.7在redhatArray的3.2編譯器下工作很正常,但在Fedora4的gcc-3.4.2編譯器下編譯卻不成功.根據(jù)測試,PC平臺上使用gcc-3.2可以順利編譯,arm平臺上使用gcc-2.Array5.2可以順利通過(gnuarm的編譯器好像不行,用華恒光盤中的armv4l-unkown-linux-gcc的可以編譯通過)
2、編譯過程中會提示缺少uuid的頭文件和庫,下載e2fsprogs-libs-1.38.tar.gz,里面有uuid的相關代碼.
3、編譯的時候需要指定編譯器,在qt的configs目錄下有許多文件,修改linux-arm-g++-*這些文件中的相關定義.例如:默認使用arm-linux-gcc編譯器,而我使用的是GNUARM的arm-elf-gcc編譯器,替換文件中所有arm-linux-前綴為arm-elf-即可.
小結(jié):前段時間,諾基亞宣布收購從事桌面和移動設備應用架構(gòu)開發(fā)的公司Trolltech。Trolltech以QT架構(gòu)而聞名,這種架構(gòu)是開源KDE的核心。恩,還是比較重要一點!希望本文對你有所幫助!
【編輯推薦】