tslib1.4與Qt4.8.6的交叉編譯與移植


 最近開始正式接觸QT開發,網上看了些移植教程都寫的有點亂,博客園的emouse思·睿有一篇寫的很好的文章,下面是文章的鏈接

http://www.cnblogs.com/emouse/archive/2013/01/29/2881311.html

 

我結合自己編譯移植過程中遇到的問題重新整理下,寫下這篇博客,大部分跟上面的一樣,但也有些原帖沒有的東西,算是一個總結。

 

就像上面那位老兄說的“Linux的東西搞起來麻煩的地方就在於太雜、太散”,這個我十分同意,有時候少做了那么一個步驟,后面就會出錯,到網上搜半天才能解決。這就是所謂的蛋疼吧。

QT個各版本之間是存在差異的,qt-creator和qt-library盡量用最新的吧。

 


先大致說一下整個過程:

首先,在PC上交叉編譯tslib和Qt(交叉編譯是為了生成在開發板上能用的文件),然后將生成文件下載或拷到開發板上,我是用SD卡拷的。然后將開發板的環境變量設置好,移植就算成功了,大概過程就是這樣。


 

下面正式開始:

軟件平台


Linux:Ubuntu 12.04(32位,盡量用32位的,不然還得安裝32位的庫文件。)

qt-library:4.8.6

qt-creator:5.3.0

交叉編譯工具鏈:arm-linux-gcc (version 4.4.6)

 

tslib編譯與安裝


tslib是電阻式觸摸屏用於校准的一個軟件庫,是一個開源的程序,能夠為觸摸屏驅動獲得的采樣提供諸如濾波、去抖、校准等功能,通常作為觸摸屏驅動的適配層,為上層的應用提供了一個統一的接口。因此這里先編譯安裝tslib,這樣在后面編譯Qt的時候才能打包編譯進去。

 

准備工作:安裝以下三個軟件(原帖中autoconf無需安裝,另外需安裝libtool

sudo apt-get install automake
sudo apt-get install autogen
sudo apt-get install libtool

 

安裝完上面的3個軟件以后,將下載的tarlib-1.4源碼解壓編譯安裝

# tar -zxvf tslib-1.4.tar.gz
# cd tslib
# ./autogen.sh
#./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/usr/local/tslib 
# make # make install

 編譯過程中,有一個問題,

在make時出錯,提示
In function ‘open’,
inlined from ‘main’ at ts_calibrate.c:229:11:
/usr/include/bits/fcntl2.h:51:24: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
make[2]: *** [ts_calibrate.o] Error 1
解決方法:
這是因為open函數的語法不符合最新的gcc,在/tests/ts_calibrate.c中加入open的第三個參數0777:
#cd tests/
#vi ts_calibrate

修改如下

if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
    cal_fd = open (calfile, O_CREAT | O_RDWR, 0777);
} else {
    cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, 0777);
}

 

tslib的開發板移植與測試


將tslib文件夾整個拷到開發板/usr/local/目錄下,然后修改ts.conf文件

下面是ts.conf文件的第一行與第二行

# Uncomment if you wish to use the linux input layer event interface
# module_raw input

去掉# module_raw input前面的注釋,一定要注意中間的空格也去掉,module頂格。

 

 最后添加環境變量,通過超級終端在開發板系統中添加環境變量,可以在開發板文件系統的/etc/profile文件里添加,也可以直接添加。(若修改/etc/profile,要立即使這些變量生效,還需要修改完后輸入命令source /etc/profile)

export set TSLIB_FBDEVICE=/dev/fb0
export set TSLIB_TSDEVICE=/dev/event3
export set TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export set TSLIB_CALIBFILE=/etc/pointercal
export set TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts                                       

 

說明: 
                TSLIB_TSDEVICE        //觸摸屏設備文件名,這個需要選對
TSLIB_CALIBFILE //校准的數據文件,由ts_calibrate校准程序生成。 SLIB_CONFFILE //配置文件名。 TSLIB_PLUGINDIR //插件目錄 TSLIB_CONSOLEDEVICE //控制台設備文件名 TSLIB_FBDEVICE //設備名 以上環境變量在實際開發中的實際配置可以根據實際情況決定。而這些指定的設備節點一定要和你的開發板上的/dev目錄下的設備節點相對應。

 

最后運行測驗程序

ts_calibrate 進行校驗   ts_test      進行測試

測試結果如下圖所示:(這里就用他的圖了,懶得拍)

SNAGHTML2232630

image

 

QT 的交叉編譯與安裝


首先配置,同樣是通過運行./configure來生成Makefile,由於配置項較多,所以把它寫成一個腳本,如下

#!/bin/sh
./configure \
-opensource \
-confirm-license \
-release -shared \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-depths 16,18,24,32 \
-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 \
-no-phonon \
-no-nis \
-no-opengl \
-no-cups \
-no-glib \
-no-xcursor -no-xfixes -no-xrandr -no-xrender \
-no-separate-debug-info \
-nomake examples -nomake tools -nomake docs \
-qt-mouse-tslib \
-I/usr/local/tslib/include \
-L/usr/local/tslib/lib

exit

上面的主要參數含義說明如下:
-embedded arm: 表示將編譯針對 arm 平台的 embedded 版本;  
-xplatform qws/linux-arm-g++: 表示使用 arm-linux 交叉編譯器進行編譯;  
-qt-mouse-tslib: 表示將使用 tslib 來驅動觸摸屏;

 

運行腳本

#chmod +x autoconfig
#./autoconfig

成功后會出現如下信息

Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /usr/local/Trolltech/QtEmbedded-4.8.4-arm

To reconfigure, run 'make confclean' and 'configure'.

 

接下來執行make進行編譯

編譯完后執行make install 進行安裝。

可以在文件夾/usr/local/Trolltech/下看到剛剛編譯好的Qt文件夾。


移植到開發板


將編譯的文件夾,PC中的/usr/local/Trolltech/Qt-4.8.6/,拷到開發板的/usr/local/目錄下,我是用SD卡拷的。

 

設置環境變量:

我直接修改profile文件
#vi /etc/profile

在最后加入以下內容

export set QTDIR=/usr/local/Qt-4.8.6   #目錄名要與拷貝的Qt文件夾名一致                     
export set LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export set PATH=$QTDIR/bin:$PATH  
export set MANPATH=$QTDIR/man:$MANPATH            
export set QT_QWS_FONTDIR=/usr/local/Qt-4.8.6/lib/fonts
export set QWS_MOUSE_PROTO=tslib:/dev/event3 #重要

立即使用變量

#source /etc/profile


到此為止,QT的移植算是成功了

可以用Qt自帶的示例程序來測試一下,

# cd /usr/local/Qt-4.8.6/demos/

此文件夾下有很多示例程序,隨便選一個運行。

例如

cd affine/
./affine -qws 

必須要加參數-qws

 

 

 

 

 


免責聲明!

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



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