最近開始正式接觸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
編譯過程中,有一個問題,
#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 進行測試
測試結果如下圖所示:(這里就用他的圖了,懶得拍)
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