Qt4.8.5在ARM9上的移植


                                     Qt4.8.5在ARM9開發板上的移植

    以前移植過qtopia-embedded-2.2.0,俗稱Qt/E,在早期的Qt框架中是使用X11桌面服務器系統,無法應用於嵌入式平台,為此產生了qtopia,qtopia2.2.0就是一款針對嵌入式小資源平台的GUI系統,他是直接操作嵌入式系統顯示設備的FramerBuffer,精簡高效。但這是一款過時的產品,奇趣公司在Qt的4.5.0的時候,將Qt/E納入了Qtopia,推出Qtopia4,可以使用在任何平台上,只需在編譯時做相應的配置,這次我們就將移植Qt4.8.5到S3C2440開發板。

    主機環境:Ubuntu12.04 LTS

    編譯器:arm-linux-gcc 4.4.3

    開發板:JZ2440,Linux-2.6.32.12

一. 首先得搞定驅動的問題,主要是觸屏的驅動和LCD的驅動,我是直接將兩個驅動編譯進內核了,針對不同的開發板,驅動是不同的,LCD驅動可以直接移植,但是觸屏驅動需要自己寫,具體的驅動可以參考友善之臂的觸屏驅動。這里不再詳細贅述。

 

二. 編譯tslib庫:

    由於Qt的運行會調用tslib的庫,所以先移植安裝tslib,下載tslib-1.4的壓縮文件,百度上到處都有下載的,下載后解壓,如果你使用的是4.4.3的編譯器的話,一定要注意配置。

解壓后進入目錄:

cd  tslib

首先安裝autoconfig工具:

sudo   apt-get install autoconf

sudo   apt-get install automake

sudo   apt-get install libtool

然后依次執行:

sudo   ./autogen.sh

 

mkdir   tmp

 

sudo   echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

 

sudo   ./configure --host=arm-none-linux-gnueabi

--cache-file=arm-linux.cache --prefix=$(pwd)/tmp

CC=/usr/local/arm-tool/bin/arm-linux-gcc CXX=/usr/local/arm-tool/bin/arm-linux-g++

 

export   CC=/usr/local/arm-tool/bin/arm-linux-gcc

 

export   CXX=/usr/local/arm-tool/bin/arm-linux-g++

上面需要注意的就是一定要指定交叉編譯器的絕對路徑,我就是在這個地方弄了好長時間,編譯后的文件總是X86的,指定成絕對路徑就是交叉編譯器了,而且host選項必須是和編譯器名一致,而不是編譯器的鏈接名。

接下來:sudo  make;然后sudo  make  install

這時就能看到tmp目錄下多了編譯后的庫文件。在開發板的根目錄的opt目錄中建立tslib,這個目錄將是tslib目錄的安裝位置,最好使用先使用nfs掛載根文件系統,這樣可以減少燒寫flash的次數,有利於保護開發板,將剛才tmp目錄下的所有文件全部拷貝過來,這里我選擇全部拷貝。

 

三:編譯移植Qt4.8.5

    至此,tslib安裝結束,下面編譯Qt庫,下載qt-everywhere-opensource-src-4.8.5.tar.gz,官網有下載,下載后解壓進入目錄,先要配置,最好寫一個配置文件

vim  autoconfig.sh

內容為:

#!/bin/sh

sudo ./configure \

-prefix /usr/local/qte-arm/ \

-force-pkg-config \

-opensource \

-confirm-license \

-release -shared \

-embedded arm \

-xplatform qws/linux-arm-gnueabi-g++ \

-depths 16,18,24 \

-fast \

-optimized-qmake \

-pch \

-qt-sql-sqlite \

-qt-libjpeg \

-qt-zlib \

-qt-libpng \

-qt-freetype \

-little-endian -host-little-endian \

-no-qt3support \

-no-libtiff -no-libmng \

-no-opengl \

-no-mmx -no-sse -no-sse2 \

-no-3dnow \

-no-openssl \

-no-webkit \

-no-qvfb \

其中的配置選項根據自己的需要添加或刪減,選項說明直接./configure --help就出來了,當然上面的可以直接拷貝。

然后sudo chmod autoconfig.sh 777增加可執行權限,最后sudo ./autoconfig.sh

即可配置,這里說明一點,-force-pkg-config選項增加后會有警告,直接忽略,但是如果不加的話,則會出錯,這個錯誤是谷歌了好長時間才解決的。

配置到一半的時候,肯定會彈出類似的錯誤,

The tslib functionality test failed!

 You might need to modify the include and library search paths by editing QMAKE_INCDIR and QMAKE_LIBDIR in

/qt-embedded-linux-opensource-src-4.8.5-arm/mkspecs/qws/linux-arm-g++

沒關系,這個錯誤有兩個原因,一個是沒加額外的tslib的鏈接庫文件,還記得剛才編譯tslib時用的tmp目錄么,現在就要用了,還有一個就是編譯器要使用絕對路徑,這就是4.4.3版本坑爹的地方,我是試了好長時間才發現的,一開始以為是tslib編譯錯了,后來發現是編譯器要使用絕對路徑而不是環境變量。

打開mkspecs/qws/linux-arm-gnueabi-g++目錄下的qmake.conf文件,修改編譯器為絕對路徑,並添加剛剛那個tmp目錄中的庫目錄,也是絕對路徑,我的設置是:

                           

主要是QMAKE_INCDIR和QMAKE_LIBDIR,對應於你自己編譯tslib的庫目錄。

然后重新sudo ./autoconfig.sh,

接下來,就是sudo make,這個過程是個很長的過程,make完了后,sudo make install,就會安裝到你設置的目錄下,就是-prefix /usr/local/qte-arm/配置選項的目錄,但是不知道為什么,我的配置了,他給我安裝到了usr的下的默認的目錄下了,默認的是/usr/local/Trolltech,但最后的提示確實我配置的目錄,顯得有點坑爹。至此編譯就結束了,一般是不會出錯的。在開發板的根文件系統的opt目錄下建立Qte目錄,

再進入Qt安裝目錄下,將其中的四個目錄:imports   lib  mkspecs  plugins復制到,/opt/Qte下,也可將demos也復制過來,因為待會要測試,就使用他的程序了。

四. 測試:

    將/opt/tslib/etc/下的ts.conf打開,將

# module_raw input一行前面的符號和空格去掉,注意空格也不能留。

配置環境變量:

export TSLIB_ROOT=/opt/tslib

export TSLIB_TSDEVICE=/dev/event0

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_PLUGINDIR=/opt/tslib/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CONFFILE=/opt/tslib/etc/ts.conf

export POINTERCAL_FILE=/etc/pointercal

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_SIZE=480x272

export QWS_MOUSE_PROTO=Tslib:/dev/event0

 

export QTDIR=/opt/Qte

export QPEDIR=/opt/Qte

export PATH=$QTDIR/bin:$PATH

 

export QWS_DISPLAY=LinuxFb:/dev/fb0

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

 

export QT_QWS_FONTDIR=$QTDIR/lib/fonts

如果你的開發板剛剛的目錄設置和我一樣的話,可以直接使用,不同的話根據自己的設置配置,根據環境變量的名字應該能看出每個目錄代表什么,主要就是tslib和Qt的安裝目錄,同時配置屏幕的大小,我的是480X272的,還有就是輸入子系統的文件節點,基本都差不多的。OK,下面,將demos下的一個可執行文件隨便拷貝一個過來,先進入tslib的bin目錄,執行./ts_calibrate校准觸屏,然后執行一個Qt程序,./textedit -qws就可以看到打開了一個文本編輯器,./mainwindow -qws就可以打開一個窗口界面,

 

這些程序在demos目錄下需要拷貝到開發板上執行,執行成功則說明移植成功,接下來,編寫一個腳本文件,將上述環境變量的設置寫入腳本文件,開機執行,並且在/etc/init.d/rcS中寫入開機啟動Qt程序的命令,則開機即可看到優美的GUI界面了,OK。至此,移植完成。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM