Qt4.5.1觸摸屏(tslib 1.4)+sqlite3 移植全記錄

主機系統:Debian 5.0

主機編譯器:gcc/g++4.1.3

交叉編譯器:arm-linux-gcc/g++3.4.5-glibc-2.3.6

軟件資源:qt-embedded-linux-opensource-src-4.5.1.tar.gz

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

                tslib-1.4.tar.gz

目標板:博創UP-TECH S2410

 

1. 安裝X11的相關庫文件和開發包

在編譯時會生成一些在主機上運行的工具,要用到X11的一些頭文件、庫,所以需要安裝X11開發包。

#sudo apt-get -y install x-dev libx11-dev xlibs-static-dev x11proto-xext-dev libxext-dev libqt3-mt-dev

#sudo mkdir -p /usr/X11R6/include

#sudo cp -rf /usr/include/X11 /usr/X11R6/include(參考韋東山《嵌入式Linux應用開發完全手冊》)

2.安裝交叉編譯器arm-linux-gcc-3.4.5

(1) 新建安裝目錄:#mkdir /usr/local/arm

(2) 解壓arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2

arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2複製在目錄/usr/local/arm下,在終端中進行如下操作:

#cd /usr/local/arm

#tar jxvf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2

等待解壓完成。

(3) 導入環境變量

export PATH=$PATH:/usr/local/arm/3.4.5/bin

或者:編輯一個導入環境變量的腳本(方便以後使用):

#vi ArmEnv

  1 #!/bin/sh

  2 export PATH=$PATH:/usr/local/arm/3.4.5/bin

#chmod +x ArmEnv  //增加可執行權限

#arm-linux-gcc -v

這樣就把交叉編譯器的地址變量設置好了,但這樣設置路徑變量的方法只在此終端中生效,對其他的終端無效,若要設置對所有用戶所有終端都有效的路徑變量,在/etc/profile 中最後一行添加“export PATH=/usr/local/arm/3.4.5/bin:$PATH”(不推薦這種方式)。

 

3.編譯安裝qt-x11-opensource-src-4.5.1

qt-x11版本可以產生Qt開發工具,如designerlingust等,最重要的是可以得到qvfb,嵌入式的開發有了qvfb,就可以不需要實際的開發板,也可以開發Qt應程序。qt-embedded版本就是專門用於嵌入式方面的版本。

qt-x11-opensource-src-4.5.1.tar.gz複製到/root/local/qt目錄下,進行解壓,在終端中進行如下操作:

#cd /root/local/qt

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

解壓完成後,得到/root/local/qt/qt-x11-opensource-src-4.5.1目錄。下面就開始進行編譯了。

進入/root/local/qt/qt-x11-opensource-src-4.5.1目錄,進行編譯安裝。在終端中進行如下操作:

#./configure –qvfb

#make

#cd tools/qvfb

#make

#cd ../..

#make install

經過相當長的時間完成後,會在/usr/local目錄下生成一個Trolltech目錄,形成/usr/local/Trolltech目錄,這是qt-x11-opensource-src-4.5.1安裝後所在的目錄,進入/usr/local/Trolltech會看到一個Qt-4.5.1的目錄,將/root/local/qt/qt-x11-opensource-src-4.5.1/tools/qvfb目錄下的qvfb相關文件拷貝到/usr/local/Trolltech/Qt-4.5.1/bin目錄下,在終端中操作(確定當前目錄是/root/local/qt/qt-x11-opensource-src-4.5.1)。

#cp tools/qvfb/qvfb* /usr/local/Trolltech/Qt-4.5.1/bin

至此,qt-x11-opensource-src-4.5.1就編譯安裝成功了

你就可以使用/usr/local/Trolltech/Qt-4.5.1下的Qt進行編程開發了。

===============================================================================

4. 這裏,qt-embedded有兩個複製:qt-embedded-linux-opensource-src-4.5.1-x86qt-embedded-linux-opensource-src-4.5.1-arm,根據他們的名字可以知道前者是適合x86架構的,後者適合arm架構爲什麼需要兩個呢?如果有開發板的話,可以只編譯qt-embedded版本成arm架構的就可以了,但是很多時候用qvfb的話,開發會方便很多,所以多編譯一個x86架構的也不錯。這裏是否有些疑問,qt-x11也是適合x86結構的,這不是和qt-embedded重複了嗎?答案是這樣的,qt-embedded版本只能在嵌入式板子上面運行,編譯成x86架構的程序也只能在x86的嵌入式板子上跑(這裏咱們用的PC機其實是也可以看成嵌入式開發板只不過它是x86架構的)。前面說過,我們需要qvfb來開發,但是qvfb只能執行x86架構的應用程序,所以需要讓qt-embedded生成關於x86的庫和其他文件。而將qt-embedded編譯成arm,又是爲什麼呢?道理很簡單,我最終的qt應用程序需要在arm架構上面運行,當然需要這方面的庫,所以編譯成arm也就順理成章了。好了,現在簡單的總結一下,首先,使用qt-x11提供的庫和開發工具開發出qt應用程序,然後使用qt-embedded關於x86庫和工具再次編譯我們開發qt應用程序,這是所得到的可執行文件就可以在qvfb上運行了,最後,使用qt-embeddeddarm庫再次編譯就可以得到在arm上能運行的可執行程序。很明顯,如果有開發板,第二步是可要可不要的(最好是要),如果沒有開發板的話,第三步也就沒必要了,這樣就不需要將qt-embedded編譯成適合arm架構的。

 

5編譯配置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系統下gmake)

#make install(gmake install)

OKQtEmbedded-4.5.1-x86就編譯好了。

在需要x86版本QT編譯時建立環境變量:

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

  1 #!/bin/sh

  2 export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/

  3 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

記得加上執行權限。

 

       如果要添加觸摸屏支持還需要安裝tslib,現在最高版本爲1.4(筆者開發時)。下面介紹一下tslib1.4編譯安裝過程。

6.編譯安裝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

下載到開發板上/usr/local目錄解壓。

#tar xzvf mytslib.tar.gz

設置環境變量,校準觸摸屏。修改開發板上創建/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   //觸摸屏設備節點

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設備節點

export QWS_SIZE=640x480   //根據自己觸摸屏大小進行設置,這條也可不加

export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"//如果不加這條會出現觸摸屏字體很小的現象(不管在程序中設置多大的字體)

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/ 

注意:

(1) 上面這些設置一定要仔細寫,否則會出現這樣那樣的問題,筆者曾出現露掉字體問題。總之這個一定要根據自己的配置寫正確。

(2) 檢查ts.conf 參數是否設置正確,下面是我的配置。

  module_raw input

  module pthres pmin=1

  module variance delta=30

  module dejitter delta=100

  module linear

(3) 如果是靜態添加節點的話,觸摸屏設備節點一定要建正確。

#mknod ts0 c 13 128

(4) 觸摸屏的前提是你的觸摸屏驅動已經寫好,並加載進了內核.你可以測試有沒有加載觸摸屏驅動,cat /dev/touchscreen/0raw) ,點擊觸摸屏,看終端有無顯示,若有則表明正確。

(5) 修改文件ts.conf將其他不需要的都刪掉,空格也都刪掉,因爲配置文件有大小限制(好像是不大於150k)。否則有可能會提示: selected device is not a touchscreen I understand錯誤信息

在開發板/usr/local/mytslib/bin目錄下執行校準觸摸屏程序:# ./ts_calibrate

會在/etc目錄生成一個:pointercal觸摸屏效準的必須文件,也可以運行此目錄下的其他程序進行測試。

特別注意:如果是掛載根文件系統,在/etc/exports文件中發佈權限要設置正確,否則可能會出現雖然已經校驗但卻無法生成pointercal文件。

 

7.  編譯安裝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-sqlitesqlite數據庫選項,如果要編寫的程序需要數據庫就必須加上,或者使用插件的形式,但是兩者只能選一個,否則編寫的程序會出現加載不上驅動的現象。

注意:最後兩個路徑如果設置不對則生成的庫文件沒辦法支持觸摸屏

 

假如提示mkspec/qws/linux-arm-g++/qmake.confQMAKE_INCDIRQMAKE_LIBDIR錯誤信息

qmake.conf文件中加入

QMAKE_INCDIR =/home/zyx/project/mytslib/include

QMAKE_LIBDIR =/home/zyx/project/mytslib/lib

重新./configure

#make

#make install

如果在編譯的過程中出錯,在重新make前需要先執行make clean,然後再./configure,再執行make的操作。

安裝默認目錄在/usr/local/Trolltech/QtEmbedded-4.5.1-arm中。

 

8.  打包編譯安裝好的QtEmbedded庫文件以備以後使用

 # tar czvf QtEmbedded-4.5.1-arm.tar.gz QtEmbedded-4.5.1-arm

編譯ARMQT應用程序前建立環境變量:
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自帶的程序例子掛載到開發板執行看是否成功,一般會提示找不到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中拷貝到開發板上即可。

 

 

2010-06-16 整理

問題1:

./ts_calibrate: error while loading shared libraries: libts-0.0.so.0: cannot open shared object file: Error 40

./ts_calibrate: error while loading shared libraries: libts-0.0.so.0: cannot ope

n shared object file: No such file or directory

解決辦法:

#echo $LD_LIBRARY_PATH  //查看lib路徑,

#export LD_LIBRARY_PATH=$T_ROOT/lib

問題2

ts_open: No such file or directory

解決辦法:

#export TSLIB_TSDEVICE=/dev/input/event0   //觸摸屏設備路徑

問題3

Couldnt open tslib config file: No such file or directory ts_config: Illegal seek

解決辦法:

#export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

問題4

Couldnt load module pthres

No raw modules loaded.

ts_config: Success

解決辦法:

#export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

問題5

No raw modules loaded.

Ts_config: No such file or directory

解決辦法:

修改$T_ROOT/etc/ts.conf, 至少放開一個module_raw, 並去掉前面空格

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章