Qt 4.5.1觸摸屏和Sqlite 3 移植教程 下篇
接著介紹Qt 4.5.1觸摸屏和Sqlite 3 移植教程,開始編譯。
qt-x11-opensource-src-4.5.1就編譯安裝成功了。,你就可以使用/usr/local/Trolltech/Qt-4.5.1下的Qt進行編程開發(fā)了。
1、這里,qt-embedded有兩個復制:qt-embedded-linux-opensource-src-4.5.1-x86和qt-embedded-linux-opensource-src-4.5.1-arm,根據(jù)他們的名字可以知道前者是適合x86架構的,后者適合arm架構為什么需要兩個呢?如果有開發(fā)板的話,可以只編譯qt-embedded版本成arm架構的就可以了,但是很多時候用qvfb的話,開發(fā)會方便很多,所以多編譯一個x86架構的也不錯。這里是否有些疑問,qt-x11也是適合x86結構的,這不是和qt-embedded重復了嗎?答案是這樣的,qt-embedded版本只能在嵌入式板子上面運行,編譯成x86架構的程序也只能在x86的嵌入式板子上跑(這里咱們用的PC機其實是也可以看成嵌入式開發(fā)板只不過它是x86架構的)。
前面說過,我們需要qvfb來開發(fā),但是qvfb只能執(zhí)行x86架構的應用程序,所以需要讓qt-embedded生成關于x86的庫和其他文件。而將qt-embedded編譯成arm,又是為什么呢?道理很簡單,我最終的qt應用程序需要在arm架構上面運行,當然需要這方面的庫,所以編譯成arm也就順理成章了。好了,現(xiàn)在簡單的總結一下,首先,使用qt-x11提供的庫和開發(fā)工具開發(fā)出qt應用程序,然后使用qt-embedded關于x86庫和工具再次編譯我們開發(fā)qt應用程序,這是所得到的可執(zhí)行文件就可以在qvfb上運行了,最后,使用qt-embeddedd的arm庫再次編譯就可以得到在arm上能運行的可執(zhí)行程序。很明顯,如果有開發(fā)板,第二步是可要可不要的(最好是要),如果沒有開發(fā)板的話,第三步也就沒必要了,這樣就不需要將qt-embedded編譯成適合arm架構的。
2、編譯配置QtEmbedded-4.5.1-x86版本
解壓qt-embedded-linux-opensource-src-4.5.1.tar.bz2在路徑/root/local/qt路徑下
- # tar xjvf qt-embedded-linux-opensource-src-4.5.1.tar.bz2
修改解壓后的文件夾名稱
- #mv qt-embedded-linux-opensource-src-4.5.1 qt-embedded-linux-opensource-src-4.5.1-x86
- 進入/root/local/qt/qt-x11-opensource-src-4.5.1-x86目錄,進行編譯安裝。在終端中進行如下操作:
- #cd /root/local/qt/qt-x11-opensource-src-4.5.1-x86
- ./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.1-x86 -embedded x86 –qvfb
- #make(或windowns系統(tǒng)下gmake)
- #make install(或gmake install)
OK,QtEmbedded-4.5.1-x86就編譯好了。
在需要x86版本QT編譯時建立環(huán)境變量:
- export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/
- export PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/bin/:$PATH
- export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.21-x86/lib/:$LD_LIBRARY_PATH
這里也寫成腳本:
- #vi setX86env
- #!/bin/sh
- export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/
- export PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/bin:$PATH
- 4export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/lib/:$LD_LI BRARY_PATH
記得加上執(zhí)行權限。
如果要添加觸摸屏支持還需要安裝tslib,現(xiàn)在最高版本為1.4(筆者開發(fā)時)。下面介紹一下tslib1.4編譯安裝過程。
3、編譯安裝tslib1.4
安裝編譯過程需用到的程序
- # apt-get install autoconf(或autoconf2.13)
- # apt-get install automake
- # apt-get install libtool
將tslib1.4解壓到/home下
- #./autogen.sh
- #./configure --prefix=/home/zyx/project/mytslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
- #make
- #make install-strip //生成瘦身應用程序和庫
注意:/home/zyx/project/mytslib/為tslib1.4安裝目錄在裝QtEmbedded-4.5.1-arm版本時需要用到此目錄,打包mytslib。
- # tar czvf mytslib.tar.gz mytslib
下載到開發(fā)板上/usr/local目錄解壓。
- #tar xzvf mytslib.tar.gz
設置環(huán)境變量,校準觸摸屏。修改開發(fā)板上創(chuàng)建/bin/ts.sh文件。
- #!/bin/sh
- export QTDIR=/usr/local/Qtembedded-4.5.1
- export QPEDIR=/usr/local/Qtembedded-4.5.1
- export PATH=$PATH:$QTDIR/bin
- export TSLIB_ROOT=/usr/local/tslib //tslib主目錄
- export TSLIB_TSDEVICE=/dev/event0 //觸摸屏設備節(jié)點
- export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf //觸摸屏配置文件
- export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts //觸摸屏在進行AD轉換時用到的插件
- export TSLIB_CALIBFILE=/etc/pointercal //生成的校驗文件存放目錄
- export TSLIB_FBDEVICE=/dev/fb0 //觸摸屏framebuff設備節(jié)點
- export QWS_SIZE=640x480 //根據(jù)自己觸摸屏大小進行設置,這條也可不加
- export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"//如果不加這條會出現(xiàn)觸摸屏字體很小的現(xiàn)象(不管在程序中設置多大的字體)
- export LD_LIBRARY_PATH=$QPEDIR/lib:$TSLIB_ROOT/lib:$LD_LIBRARY_PATH
- export QWS_MOUSE_PROTO="Tslib:/dev/event0"
- export TSLIB_CONSOLEDEVICE=none
- export QT_QWS_FONTDIR=$QPEDIR/lib/fonts //設置字體,否則程序顯示亂碼
- export QT_PLUGIN_PATH=$QTDIR/plugins/
#p#
注意:
(1) 上面這些設置一定要仔細寫,否則會出現(xiàn)這樣那樣的問題,筆者曾出現(xiàn)露掉字體問題??傊@個一定要根據(jù)自己的配置寫正確。
(2) 檢查ts.conf 參數(shù)是否設置正確,下面是我的配置。
- module_raw input
- module pthres pmin=1
- module variance delta=30
- module dejitter delta=100
- module linear
(3) 如果是靜態(tài)添加節(jié)點的話,觸摸屏設備節(jié)點一定要建正確。
- #mknod ts0 c 13 128
(4) 觸摸屏的前提是你的觸摸屏驅動已經(jīng)寫好,并加載進了內核.你可以測試有沒有加載觸摸屏驅動,cat /dev/touchscreen/0raw) ,點擊觸摸屏,看終端有無顯示,若有則表明正確。
(5) 修改文件ts.conf將其他不需要的都刪掉,空格也都刪掉,因為配置文件有大小限制(好像是不大于150k)。否則有可能會提示: selected device is not a touchscreen I understand錯誤信息
在開發(fā)板/usr/local/mytslib/bin目錄下執(zhí)行校準觸摸屏程序:# ./ts_calibrate
會在/etc目錄生成一個:pointercal觸摸屏效準的必須文件,也可以運行此目錄下的其他程序進行測試。
特別注意:如果是掛載根文件系統(tǒng),在/etc/exports文件中發(fā)布權限要設置正確,否則可能會出現(xiàn)雖然已經(jīng)校驗但卻無法生成pointercal文件。
4、編譯安裝QtEmbedded-4.5.1-arm版本
解壓qt-embedded-linux-opensource-src-4.5.1.tar.bz2(在路徑/root/local/qt路徑下),進入/root/local/qt/ qt-embedded-linux-opensource-src-4.5.1-arm目錄,進行編譯安裝。在終端中進行如下操作:
- # tar xjvf qt-embedded-linux-opensource-src-4.5.1.tar.bz2
- #mv qt-embedded-linux-opensource-src-4.5.1 qt-embedded-linux-opensource-src-4.5.1-arm
- # cd qt-embedded-linux-opensource-src-4.5.1-arm
配置選項編譯:
- ./configure -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2
- -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs
- -nomake tools -nomake examples -nomake docs -nomake demo -no-nis
- -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb
- -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc
- -no-gfx-qvfb -qt-kbd-usb
- -no-glib -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib
解釋:-fast:快速編譯,加此項不會生成中間文件,如果你確定你能一次編譯通過的話可以加上,否則重新編譯會浪費很多時間。
-qt-sql-sqlite:sqlite數(shù)據(jù)庫選項,如果要編寫的程序需要數(shù)據(jù)庫就必須加上,或者使用插件的形式,但是兩者只能選一個,否則編寫的程序會出現(xiàn)加載不上驅動的現(xiàn)象。
注意:最后兩個路徑如果設置不對則生成的庫文件沒辦法支持觸摸屏
假如提示mkspec/qws/linux-arm-g++/qmake.conf中QMAKE_INCDIR和QMAKE_LIBDIR錯誤信息
將qmake.conf文件中加入
- QMAKE_INCDIR =/home/zyx/project/mytslib/include
- QMAKE_LIBDIR =/home/zyx/project/mytslib/lib
重新./configure
- #make
- #make install
如果在編譯的過程中出錯,在重新make前需要先執(zhí)行make clean,然后再./configure,再執(zhí)行make的操作。
安裝默認目錄在/usr/local/Trolltech/QtEmbedded-4.5.1-arm中。
5、打包編譯安裝好的QtEmbedded庫文件以備以后使用
- # tar czvf QtEmbedded-4.5.1-arm.tar.gz QtEmbedded-4.5.1-arm
在編譯ARM版QT應用程序前建立環(huán)境變量:
- export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-arm/
- export PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-arm/bin/:$PATH
- export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-arm/lib/:$
- LD_LIBRARY_PATH
編譯簡單的QT程序或者QtEmbedded-4.5.1-arm自帶的程序例子掛載到開發(fā)板執(zhí)行看是否成功,一般會提示找不到fonts libQtGui.so.4 libstdc++.so.6 libQtNetwork.so.4 libQtCore.so.4 librt.so.1等庫文件。從/usr/local/trolltech/QtEmbedded-4.5.2-arm/lib 和 /usr/local/arm/3.4.5/arm-linux/lib中拷貝到開發(fā)板上即可。
小結:關于Qt 4.5.1觸摸屏和Sqlite 3 移植教程 上下篇介紹完了,還是基于的Qt 嵌入式版本QtEmbedded。最后希望本文能幫你解決問題。