1. 程式人生 > >Qt4.5.1移植mini2440解決7寸屏問題(移植筆記)

Qt4.5.1移植mini2440解決7寸屏問題(移植筆記)

1.我的環境及所需資源:

   PC機作業系統:fedora 9

   交叉編譯工具:arm-linux-gcc-4.3.2.tar.gz  arm920t-eabi.tgz(7寸屏下編譯qt-embedded-linux-opensource-src-4.5.1)

   所需資源:  tslib-1.4.tar.gz  qt-embedded-linux-opensource-src-4.5.1.tar.gz

                  qt-x11-linux-opensource-src-4.5.1.tar.gz

   # tar xzvf arm920t-eabi.tgz -C /

   #gedit /root/.bashrc

   這是編輯/root/.bashrc檔案,在最後一行 export PATH=$PATH:/usr/local/arm/4.3.2/bin

                                                                  #export PATH=$PATH:/opt/toolchains/arm920t-eabi/bin

   登出系統

   #arm-linux-gcc -v 可以看到版本資訊

   .....(部分內容省略)

   gcc version 4.3.2

3,安裝tslib-1.4

    這是個觸控式螢幕的庫檔案,據網上說qt4

只支援tslib-1.4。我沒有實驗別的,就用了這個,可以成功。

    把tslib-1.4.tar.gz放到/home目錄下

    #tar xvzf tslib-1.4.tar.gz

    #cd tslib

    #./autogen.sh

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

    #make

    #make install

    這樣以後可以看到/home/mytslib/下有了庫檔案,移植時會用到!先不詳細說明。

4.安裝qt-x11-linux-opensource-src-4.5.1.tar.gz

    把qt-x11-linux-opensource-src-4.5.1.tar.gz放到/opt目錄下

    #tar xvzf qt-x11-linux-opensource-src-4.5.1.tar.gz

    #cd qt-x11-linux-opensource-src-4.5.1

    #./configure

    #gmake      //過程很長,我用的三個多小時

    #gmake install

    這是安裝PC機上的qt4,方便設計,在PC機上能夠成功了,在交叉編譯就方便了!然後製作一個執行環境變數的檔案,方便改變環境變數設定,如下在當前資料夾下接著輸入

    #gedit setenv-x11.sh

這時會跳出來一個編輯文字,在裡面輸入:

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

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

    MAINPATH=$QTDIR/man:$MAINPATH

    LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

    export PATH QTDIR MAINPATH   LD_LIBRARY_PATH

然後儲存!在每次進入qt-x11-linux-opensource-src-4.5.1目錄中要 #source setenv-x11.sh

把環境變數設定好。

5,安裝qt-embedded-linux-opensource-src-4.5.1.tar.gz

    把qt-embedded-linux-opensource-src-4.5.1.tar.gz放到/tmp目錄下

    在安裝qt-embedded-linux-opensource-src-4.5.1.tar.gz之前先在根目錄下建立兩個目錄(即資料夾)如下步驟:

更改交叉工具鏈(注意7寸屏一定要改,不然執行QT程式會有段錯誤)

    編輯/root/.bashrc檔案,在最後一行 #export PATH=$PATH:/usr/local/arm/4.3.2/bin

    #cd /     進入根目錄

    #mkdir mini2440   這裡準備存放qt-embedded-linux-opensource-src-4.5.1的庫檔案

                     最後要移植到開發板的。

    #mkdir tslib    這裡準備放觸屏的庫檔案,最後也會移植到開發板。

    好了,現在安裝qt-embedded-linux-opensource-src-4.5.1.tar.gz

    #cd /tmp  確定qt-embedded-linux-opensource-src-4.5.1.tar.gz放到/tmp目錄下了才行

    #tar xvzf qt-embedded-linux-opensource-src-4.5.1.tar.gz

    #cd qt-embedded-linux-opensource-src-4.5.1.

mini2440內的空間有限,所以剪裁很多,注意最後的紅色部分是為了找到觸屏的庫檔案,然後

    #./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/duancp/mytslib/include -L/home/duancp/mytslib/lib

    #gmake

    #gmake install

    這樣,嵌入式版本的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

7,例子 hello world!

   A,PC機下編譯:

     進入PC機中/opt/qt-x11-linux-opensource-src-4.5.1

     #cd /opt/qt-x11-linux-opensource-src-4.5.1.

     #source setenv-x11.sh   改變環境變數,設定為適合pc機的開發環境

     #mkdir hello         

     #cd hello  進入hello目錄

     #vi hello.cpp  編寫hello world 程式,在hello.cpp中輸入以下程式碼:

                   #include <QApplication> 

                   #include <QPushButton>

                  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();

                   }

儲存退出。然後在當前目錄下繼續執行以下命令:

   #qmake -project

   #qmake 

   #make

   #ls

這時在這個目錄下可以看到生成了可執行檔案hello,然後

   #./hello

你會發現,跳出了一個hello world的對話方塊,這樣一個簡單的介面就成功了

B,交叉編譯

  首先把/opt/qt-x11-linux-opensource-src-4.5.1下的hello目錄拷到/tmp/qt-embedded-linux-opensource-src-4.5.1目錄下

#cp -fr /opt/qt-x11-linux-opensource-src-4.5.1/hello /tmp/qt-embedded-linux-opensource-src-4.5.1

#cd  /tmp/qt-embedded-linux-opensource-src-4.5.1

#source setenv-embedded.sh   這一步很關鍵,否則你交叉編譯不了,改變的環境變數

#cd hello

#make clean

#qmake -project             重新生成.pro

#qmake                    重新生成適合交叉編譯的Makefile

#make

#ls

這時候,你發現有hello 的可執行檔案,原來的hello已經被替換掉了,現在這個hello檔案是適合開發板執行的!這時候你如果執行./hello是不會有介面的,把它放到開發板的檔案系統下才會有介面(前提是設定好了開發板的環境變數,具體看下一步)

C,移植到開發板

   把剛才在/tmp/qt-embedded-linux-opensource-src-4.5.1/hello下生成的hello可執行檔案移植到開發板的根目錄下(可自己選擇存放位置),你可以用串列埠傳送,優盤傳送或者nfs,不管怎樣,最後的結果是在超級終端下可以看到開發板的檔案系統中有hello,我是放在了根目錄下,然後在超級終端下操作開發板:

   #chmod +x hello   增加它的可執行許可權

   #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/input/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/input/event0

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

但目前為止,環境變數設定成功 可以通過echo命令檢視是否成功,如echo $QTDIR

最後執行:

  #./hello -qws   你會發現開發板的螢幕上上有了hello world的介面了!

                                                            export PATH=$PATH:/opt/toolchains/arm920t-eabi/bin

   登出系統

   #arm-linux-gcc -v 可以看到版本資訊

   .....(部分內容省略)

   gcc version 4.1.2

6.製作庫檔案

   前面介紹了在根檔案系統下建立兩個目錄mini2440tslib1.4.經過第5步後,mini2440內已經有了庫檔案,現在把觸屏的庫檔案移植到tslib目錄。

   #cd /home/mytslib   進入觸屏庫檔案所在地

   #cp -fr lib /tslib      lib目錄放到根目錄的tslib目錄下

在根檔案的mini2440檔案中除了有lib目錄,還有bin,examples等目錄,但是移植到開發板的檔案只需要mini2440下的lib目錄。Lib目錄有30多兆,若太大,可以刪除/lib/fonts中的一些字型!我的沒有刪除任何字型!我的mini244064兆的,剩餘大概13兆了,顯然不夠,於是我把它自帶的Qt2的庫檔案及有關qt2的檔案全刪除了(所以現在沒有辦法執行qt2),剩餘47兆,足夠執行qt4.那麼接下來解釋移植的過程了:

   首先,在超級終端下操作開發板,在開發板的根目錄下建立兩個目錄mini2440tslib,一樣的方法:

#mkdir mini2440   注意這是對開發板的操作,不再是PC機了!

#mkdir tslib

     然後,不你是用什麼方法,要把PC機根目錄下/mini2440裡的lib目錄(整個檔案件)(其他的如bin等都不用)全部拷到開發板根目下的/mini2440中,同理把要把PC機根目錄下/tslib裡的lib目錄(整個檔案件)全部拷到開發板根目下的/tslib.

    你可以用串列埠傳輸 ,或者優盤傳輸,或者nfs等,最終的效果是開發板根目錄下的/mini2440中有QT4lib,/tslib有觸屏的lib.

    最後,就是設定開發板的環境變量了:在超級終端裡的命令列下輸入:

#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/input/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/input/event0

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

2.安裝交叉編譯環境:

   把arm-linux-gcc-4.3.2.tar.gz放到/tmp 目錄下

   # tar xzvf arm-linux-gcc-4.3.2.tar.gz -C /