QT+QTOPIA在linux上的移植
1. 簡(jiǎn)介
QT是目前在linux上使用較廣的一個(gè)圖形系統。用戶(hù)經(jīng)常配合KDE桌面環(huán)境來(lái)使用。需要注意的是我們看到的并操作的是KDE,而不是QT。QT只是一套庫函數(類(lèi)庫),KDE才是可執行程序.同時(shí)KDE為了其他程序方便的對其操作,也提供一套庫函數(類(lèi)庫)。
在PC機上的QT是基于X11圖形系統的,在嵌入設備中往往不需要這么累贅,只需使用QTE(QT Embedded)即可包括PC平臺中X11和QT庫的功能。
另一方面,嵌入設備受許多條件的限制,桌面系統也不能直接使用PC機上已有的系統。QTOPIA就是相當于KDE的桌面系統.根據具體嵌入設備的需要可以配置成phone和pocket pc兩種。
2. 準備工作
2.1 目標
首先要明確將要干的是什么,將怎么做。
我們的目標很明確——就是在自己的開(kāi)發(fā)板上使用基于QTE的桌面系統QTOPIA。
我們的工作往往是先在PC完成以后移植到ARM平臺上;先編譯好QTE的庫,再編譯QTOPIA。因為這個(gè)系統和具體的設備有關(guān)(例如:觸摸屏、時(shí)鐘、電源管理設備等),所以最后還需要做設備接口的移植工作。
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的桌面環(huán)境程序)
tmake-1.11.tar.gz (編譯時(shí)會(huì )用到)
e2fsprogs-1.35.tar.gz (只使用其中的uuid的庫)
當下載完這些包以后我們先建立一個(gè)工作環(huán)境。假設所有軟件包都下載在用戶(hù)目錄下,通常都是/root。
2.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
記住,用戶(hù)目錄下的x86-qtopia目錄是PC機上編譯的工作環(huán)境,arm-qtopia是arm平臺的交叉編譯工作環(huán)境,qt-x11是兩者公用的。
接下來(lái)還必須編譯qt-x11,主要是為了編譯生成其中的qtdesigner和qvfb。qvfb程序在系統中并未安裝,需要我們自己編譯。qtdesigner是和qt庫的版本是相關(guān)的,當我們使用PC機上和QTE版本不符的qtdesigner時(shí),可能在PC機上的qt-x11能使用的控件在QTE上并未實(shí)現,導致應用程序編譯不成功。所以,我們使用2.3版本的QTE時(shí),必須使用相同版本的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平臺編譯
編譯之前做一下準備工作:打開(kāi)一個(gè)控制臺之后設置環(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
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目錄下是否已經(jīng)有了qt的庫了?
3.2 編譯QTOPIA
# cd $QPEDIR/src
# ./configure
# make clean
# make
3.3 測試QTOPIA
激動(dòng)的時(shí)刻來(lái)了,如果這個(gè)步驟成功將意味著(zhù)可以做應用開(kāi)發(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有點(diǎn)錯誤,所以必須進(jìn)行一下操作:
# cd pics
# pngtopnm Security.png>a.pnm
# pnmtopng a.pnm>Security.png
因為qpe運行的時(shí)候,當前目錄必須是$QTDIR/bin,所以不能在$QTDIR目錄下執行bin/qpe來(lái)運行。
# export QTDIR=~/x86-qtopia/qt
# cd $QTDIR/bin
# ./qvfb &
# ./qpe &
看到qpe在qvfb中的界面了嗎?我看到了~!
4. 目標平臺交叉編譯
與PC機上的編譯一樣,打開(kāi)一個(gè)控制臺之后需要設置環(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
4.1 交叉編譯QT
4.2 交叉編譯QTOPIA
5. 移植QT中的相關(guān)設備接口
5.1 鼠標
5.2 觸摸屏
6. 移植QTOPIA中的相關(guān)設備接口
6.1 電源管理設備
7. 編寫(xiě)QT程序并移植
8. 編寫(xiě)QTOPIA程序并移植
X. tips
@移植的時(shí)候編譯器的版本很重要.qte-2.3.7在redhat9的3.2編譯器下工作很正常,但在Fedora4的gcc-3.4.2編譯器下編譯卻不成功.根據測試,PC平臺上使用gcc-3.2可以順利編譯,arm平臺上使用gcc-2.95.2可以順利通過(guò)(gnuarm的編譯器好像不行,用華恒光盤(pán)中的armv4l-unkown-linux-gcc的可以編譯通過(guò))
@ 編譯過(guò)程中會(huì )提示缺少u(mài)uid的頭文件和庫,下載e2fsprogs-libs-1.38.tar.gz,里面有uuid的相關(guān)代碼.
@編譯的時(shí)候需要指定編譯器,在qt的configs目錄下有許多文件,修改linux-arm-g++-*這些文件中的相關(guān)定義.例如:默認使用arm-linux-gcc編譯器,而我使用的是GNUARM的arm-elf-gcc編譯器,替換文件中所有arm-linux-前綴為arm-elf-即可.
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。