[轉載]tslib1.4與Qt4.8.6的交叉編譯與移植

原文:http://www.cnblogs.com/Jasonsblog/p/3757985.htmlhtml

http://blog.csdn.net/sno_guo/article/details/16897577 linux

 

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

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

 

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

 

就像上面那位老兄說的「Linux的東西搞起來麻煩的地方就在於太雜、太散」,這個我十分贊成,有時候少作了那麼一個步驟,後面就會出錯,到網上搜半天才能解決。這就是所謂的蛋疼吧。工具

QT個各版本之間是存在差別的,qt-creator和qt-library儘可能用最新的吧。測試

 


先大體說一下整個過程:ui

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


 

下面正式開始:.net

軟件平臺


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

相關文章
相關標籤/搜索