天天看點

Qt移植

終于成功移植QT4.5.3至mini2440,并能運作QT自帶的應用程式,總得來說還算很順利,下面是我移植的全部過程。

首先,我交待一下我的開發環境:

     主控端:Fedora9

      主機Gcc:gcc 版本 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC)

     交叉編譯器:arm-linux-gcc-4.3.2 (友善CD光牒自帶)

      開發闆:mini2440(NAND 128M  SDRAM 64M)

移植步驟:

1.       準備源碼包

        從ftp://ftp.qt.nokia.com/qt/source/ 下載下傳:qt-embedded-linux-opensource-src-4.5.3.tar.gz和qt-x11-opensource-src-4.5.3.tar.gz 前者是移植到開發闆上運作的,後者是友善在X86機上開發應用程式,待一切調試成功再經交叉編譯後下載下傳到開發闆上運作。   從網上下載下傳tslib-1.4.tar.gz包,這包用于管理觸摸屏,例如可用于它來校正觸摸屏,并儲存校正資料。

2.編譯安裝tslib-1.4

        把tslib-1.4 COPY到Fedora9的 /opt下,在Fedora9的終端下執行:

        #cd /tmp

        # tar zxvf tslib-1.4.tar.gz       ――――――――(最後在/tmp下解壓生成tslib)

        #cd  tslib

        #./autogen.sh

        #./configure --prefix=/home/mytslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes

        #make

        #make install

成功後可在/home下生成mytslib,進入mytslib可以看到有bin include lib etc四個檔案夾。我們暫時先不理它,在接下來的移植過程中才用到這些檔案夾。

3. 編譯安裝QT-X11-4.5.3

QT-X11-4.5.3是運作于linux平台下用于仿真QT應用程式的軟體,這樣你便可以在linux平台下把你應用程式都調試好,然後再利用QT4.5.3把應用程式編譯成ARM版本下載下傳至開發闆,這樣你就可以在開發闆上運作你的QT應用程式了。

下面是安裝步驟:

首先把qt-x11-opensource-src-4.5.3.tar.gz 拷貝到Fedora9下的/tmp目錄下,接着執行:

#tar zxvf qt-x11-opensource-src-4.5.3.tar.gz

#cd qt-x11-opensource-src-4.5.3

#./configure

    #gmake      //一般用時2-3小時,如果你的機子配置不太低的情況下

#gmake install

安裝OK後,在/usr/local/目錄下生成Trolltech目錄,這就是我們要用于在x86平台(Fedora9)下開發應用程式時所依賴的一些目錄。現在你可以進入/usr/local/Trolltech/Qt-4.5.3/examples下,進入一個例子,比如進入/usr/local/Trolltech/Qt-4.5.3/examples/widgets/analogclock下,你會發現,這個例子都已經編譯好了,在Fedora9的終端下直接運作:

   #./analogclock –qvfb

     則在Fedora9的螢幕上出現下圖:

Qt移植

也許你會想,我是否能重新編譯一遍analogclock呢?因為analogclock目錄下有一個Makefile,于是執行:

#make clean

#qmake –project

唉,你會發現,提示說找不到指令“qmake”,怎麼辦呢?很簡單,因為我們還沒有設定環境變量,當然會找不到指令啦。  

    讓我們來設定一下QT-X11-4.5.3的環境變量,首先進入你的安裝QT-x11-4.5.3目錄:

#cd /opt/qt-x11-opensource-src-4.5.3

在此目錄下建立一個名為:qt_x11_setenv.sh的shell檔案,内容如下:

#!bin/bash

PATH=/usr/local/Trolltech/Qt-4.5.3/bin:$PATH

    QTDIR=/usr/local/Trolltech/QT-4.5.3

    MAINPATH=$QTDIR/man:$MAINPATH

    LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export PATH QTDIR MAINPATH   LD_LIBRARY_PATH

echo "     set qt-x11 env. successful    "

儲存退出,在終端執行:

#source qt_x11_setenv.sh

終端回顯:set qt-x11 env. successful

#echo $QTDIR

終端回顯:/usr/local/Trolltech/QT-4.5.3 ――――――說明:環境變量設定成功。

在這之後,我們再執行一下:

#qmake –project    (建立*.pro檔案)

#qmake          (産生Makefile檔案)

#make            (編譯産生可執行程式)

如果沒有錯誤将生成analogclock可執行程式,終端執行:

#./analogclock –qvfb

看看是否出現畫面了~~~~~~~~~~

注意一點:

在每次進入qt-x11-linux-opensource-src-4.5.3目錄中要 #source setenv-x11.sh

把環境變量設定好,否則又會出現無法編譯。

成功後,是不是有點迫不及待地想自己試驗一個QT程式呢,讓我們來編寫一個hello程式吧!

#cd qt-x11-linux-opensource-src-4.5.3/ /opt/qt-x11-opensource-src-4.5.3/examples/

#mkdir hello

#vi hello.cpp   

然後把下列源程式COPY到hello.cpp中。

#include

  #include

   int main(int argc, char *argv[])

        {

             QApplication app(argc,argv);

             QPushButton b("Hello World !");

                b.show();

                QObject::connect(&b,SIGNAL(clicked()),&app,SLOT(quit()));

                 return app.exec();

          }

進入前記得執行source setenv-x11.sh

# qmake –project (産生hello.pro檔案)

#qmake            (産生Makefile檔案)

#make              (執行Makefile以生成可執行程式)

如果不出錯在目前目錄下生成hello可執行程式,既然生成了,那還等什麼,執行吧。

#./hello –qvfb

我執行後就出圖了,你的呢?

Qt移植

  其實圖是可以拉大的,你試試!

4.編譯安裝QT4.5.3

首先我們建立兩個目錄用來存放接下來編譯出來的一些目标檔案,在Fedora9的根目錄下建立mini2440 和 tslib兩個目錄,終端執行:

#cd /

#mkdir mini2440

#mkdir tslib

接下來我們把qt-embedded-linux-opensource-src-4.5.3.tar.gz COPY到/tmp下, 終端執行:

#cd /tmp

#tar zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz

#cd qt-embedded-linux-opensource-src-4.5.3

#./configure -prefix /mini2440  -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 -qt-mouse-tslib -I/home/mytslib/include -L/home/mytslib/lib

上面最後一句“-I/home/mytslib/include -L/home/ mytslib/lib ”指明我們剛才編譯出來觸摸屏的庫檔案及頭檔案存放路徑。它前面的“-qt-mouse-tslib”表示将使用觸摸屏。

然後執行:

#gmake

#gmake install

上面編譯時間較長,一般要2到3個小時。

這樣,嵌入式版本的qt4裝成功了,若想進行交叉編譯,首先也得改變環境變量,是以也可以在目前目錄下建一個環境變量的檔案setenv-embedded.sh 如下:

   #gedit setenv-embedded.sh

這時跳出一個編輯文本輸入:

    PATH=/mini2440/bin:$PATH

    QTDIR=/mini2440

    MAINPATH=$QTDIR/man:$MAINPATH

    LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

    export PATH QTDIR MAINPATH   LD_LIBRARY_PATH

儲存退出。每次進行qt4-embedded的交叉編譯前先# source setenv-embedded.sh,注意我們在編譯QT應用程式時要用到上述變量。下文會提到。

4. 移植相關庫檔案至開發闆

  首我們得準備一個檔案系統,我是根據友善提供的文檔制作了一個檔案系統,路徑為/opt/studyarm/rootfs, 其中rootfs就是我的根檔案系統。

首先在rootfs 的根目錄下建立兩個目錄:

     在開發闆的終端下執行:

#cd /

#mkdir mini2440

#mkdir tslib

接下來我們要COPY我們剛才編譯生成的一些庫檔案及配置檔案至開發闆上的mini2440, tslib。我是用NFS方式挂載檔案系統的,當然你可以用其它下載下傳方式把目标庫檔案等下載下傳到你的開發闆就行。

  因為是用NFS挂載方式,是以我在Fedora9終端上執行:

   #cp –rf /home/mytslib/lib  /opt/studyarm/rootfs/tslib/

   #cp –rf /home/mytslib/etc /opt/studyarm/rootfs/tslib/

   #cp –rf /mini2440/lib /opt/studyarm/rootfs/mini2440/

#cp –rf /home/mytslib/etc /opt/studyarm/rootfs/tslib

#cp /home/mytslib/bin/ts_calibrate /opt/studyarm/rootfs/bin

#cp /home/mytslib/bin/ts_test /opt/studyarm/rootfs/bin

編輯開發闆/etc/profile,用來在在開發闆上設定環境變量,開發闆終端輸入内容如下:

Cat >> /etc/profile/ << EOF

(當然也可以一個一個變量敲入,但是這種方法設定的變量在斷電重新上電後又得設定一遍很麻煩,是以把變量直接寫入/etc/profile後,系統啟動時會自動更新變量,很簡便)

export  QTDIR=/mini2440

export  T_ROOT=/tslib

export  PATH=$QTDIR/bin:$PATH

export  TSLIB_CONSOLEDEVICE=none

export  TSLIB_FBDEVICE=/dev/fb0

export  TSLIB_TSDEVICE=/dev/ event0

export  TSLIB_PLUGINDIR=$T_ROOT/lib/ts

export  TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

export  TSLIB_CALIBFILE=/etc/pointercal

export  QWS_MOUSE_PROTO=tslib:/dev/event0

export  LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib

EOF

http://tiyubisai.com/video_news/news_135626.html

終端輸入上述變量設定後,再執行一下:source /etc/profile使系統更新一遍剛設定的系統環境變量。

驗證變量設定是否成功:

在開發闆終端下執行:

  #echo $QTDIR  如果顯示  #/mini2440,則說明設定成功了,在QT的移植過程中環境變量的設定是非常重要的,如果設定的不正确會出現很多問題。

比如說:在參考别人QT移植的文章時,有人環境變量設定與我的不同,主要有如下幾個:

export  TSLIB_FBDEVICE=/dev/input/fb0

export  TSLIB_TSDEVICE=/dev/input/event0

export  QWS_MOUSE_PROTO=tslib:/dev/input/event0

注意到沒有:他們的環境變量中,fb0,event0裝置都在/dev/input下,而我檢視了我的/dev下沒有input目錄,是以這點要根據自已所做檔案系統的實際情況來設定這些變量。

接下來我們還得設定一下觸摸屏的配置檔案ts.conf. 它在哪裡呢?前面我們把mytslib下的etc目錄COPY到了開發闆的/tslib/下,那麼tslib一共就有bin及etc兩個目錄,而ts.conf就在etc目錄下,開發闆下用vi /tslib/etc/ts.conf

把# module_raw collie 前面的“#”号去掉,然後把該行移至行首,最後我的配置檔案如下:

module_raw collie

module pthres pmin=1

module variance delta=30

module dejitter delta=100

module linear

自執行source /etc/profile後,開發闆的環境變量就完全設定好了,并且QT4.5.3的移植也基本完成了,這是以說基本,是因為現在可以運作QT程式了,但是還需要進一步的做一些移植,比如說字庫,中文顯示等等。接下來将驗證tslib及QT4.5.3是否移植成功。

5. 測試觸摸屏校正

在開發闆終端下執行:

#ts_calibrate      ---------觸摸較正程式

運作該程式後,螢幕将出現五點校正畫面,依次點選五點後,将生成觸摸屏校正資料檔案/etc/pointercal.

#ts_test         ----------觸摸屏拖曳測試程式

運作後螢幕出現drag,draw  依次選擇後進行測試,同時終端下出現拖曳後的取點資料。

6.運作QT應用程式以驗證QT4.5.3是否移植成功

我們要編譯一些例子程式,同時将它們下載下傳至開發闆運作。

在終端下首先檢測一下環境變量,因為在qt-embedded-linux-opensource-src-4.5.3下編譯應用程式要依賴于它所生成的一些庫,我們在前面第3步,不是在主機/mini2440下生成了一些庫和其它檔案麼?其中/mini2440/lib我們移植到了開發闆,這些庫和其它目錄中的檔案我們編譯QT應用程式時也是要依賴它們的,是以環境變量路徑是否設定正确直接影響應用程式編譯是否成功。

主機終端執行:

#echo $QTDIR  ――――回顯為“/mini2440”則說明環境變量設定OK,如果回顯為空,或者為其它路徑,則要source setenv-embedded.sh一下,不明白的請回到第3步再看一遍。

環境變量測試沒問題,那麼就可以編譯QT程式了。

#cd  ……/ qt-embedded-linux-opensource-src-4.5.3/ examples/mainwindows/application/

#qmake –project      (如果提示無“qmake”指令,則肯定是你的環境變量的路徑設定不正确,或者source setenv-embedded.sh一下即可)

#qmake     (成生Makefile)

#make      (生成可執行程式)

至此,如果你沒發生什麼錯誤應該可以在application下看到“application”的可執行程式了,把它下載下傳到你的開發闆下并執行:

#./application –qws  

現在可以看到螢幕上的對話框了吧?可能顯示的不是很“正”,(但可以用觸摸筆把它拖到屏中央),并且字也不是看得很清。

你可以編譯其它自帶的例子運作試試看。

接下來的工作就是如何把修正字型等其它工作。但初步移植算是成功了。

http://blog.csdn.net/chengfeng135/article/details/49638353

http://blog.csdn.net/chengfeng135/