1. 搭建Qt開發環境平臺
1、開發環境:ubuntu 12.04
2、交叉編譯鏈:arm-cortex_a8-linux-gnueabi
3、開發板:FS210
2. Qt移植所需的工具
首先,我們可以從官網下載Qt源碼,
&nbnbsp; 1) qt-everywhere-opensource-src-4.7.0.tar.gz QT的源碼包(庫)
2) qt-sdk-linux-x86-opensource-2010.05.bin QT-IDE開發軟件
3) tslib-1.4.tar.gz QT觸摸校驗程序
這里我們項目文檔中已經給出三個源碼。源碼位置:該光盤下:\移植相關\QT相關\。
下面介紹一下三個源碼的用途:
1) qt-everywhere-opensource-src-4.6.3.tar.gz為Qt的源碼包,用來編譯各種Qt的庫等,這里需要編譯三次,分別為x11版本,embedded版本和arm版本(需要應用到不同的平臺上);
a. 編譯x11版只是為了得到qvfb工具,至于qvfb的用途后面自會說明;
b. embedded版本為Qt 的嵌入式版本,將來和qvfb配合使用;
c. arm版本很好理解,即要放到開發板上的東西。
2) qt-sdk-linux-x86-opensource-2010.04.bin是開發qt的IDE,這里我用的是linux版本,用它來開發自己的Qt應用。
3) tslib-1.4.tar.gz為觸摸屏校正程序,編譯qt的arm版本的時候需要tslib的庫,tslib編譯后會生成觸摸屏校正程序(t”s_calibrate),用來給開發板的觸摸屏進行校正。
3. tslib的移植
1) 拷貝“該光盤下:\移植相關\QT相關\”目錄下的tslib-1.4.tar.gz到linux系統。
2)解壓源碼:
$ tar -zxvf tslib-1.4.tar.gz
$ cd tslib-1.4
3)執行autogen.sh腳本生產configure文件
這一步需要安裝一些工具,如:在ubuntu系統下可以執行:
$ sudo apt-get install autotools-dev
$ ./autogen.sh
如果出現以下錯誤:則處理如下
./autogen.sh: 4: autoreconf: not found
是在不同版本的 tslib 下執行 autogen.sh 產生。它們產生的原因一樣,是
因為沒有安裝automake 工具,(ubuntu 10.04)用下面的命令安裝好就可以了。
$ sudo apt-get install autoconf automake libtool
4) 執行confugure生成Makefile文件
a. $ echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
b. $ vi tslib-1.4/plugins/input-raw.c
注釋掉 static int check_fd函數中的部分代碼,如下所示。

c. $./configure --host=arm-cortex_a8-linux-gnueabi --prefix=/home/linux/tslib --cache-file=arm-linux.cache
說明:
--host :是指你的交叉編譯器的前綴;例如:
你的交叉編譯器是arm-linux-gcc,則--host=arm-linux。
如果是arm-none-linux-gnueabi-gcc,則--host=arm-none-linux-gnueabi。
--prefix :是你執行make install 的時候編譯后生成的可執行文件和庫文件以及配置文所安裝的目錄,這個目錄不能和tslib源碼目錄相同;
--enable-inputapi=no :看你的觸摸屏驅動是否支持ioctl操作,如果支持就不用寫上,不支持就要添上,如果不添加會有ts_open:Inappropriate ioctol for device
configure文件下還有很多選項,你可以執行./configure --help 來進行選擇其他項,不過在這里這些選項就夠了。
5) 編譯安裝
$ 修改tests/ts_calibrate.c 修改226行和229行,加上0666

$ make
$ make install
6) 把指定安裝目錄下的tslib的文件都拷貝到你所掛載的根文件系統下
$ cp -a /home/linux/tslib /source/rootfs
7) 修改/source/rootfs/tslib下的etc目錄中ts.conf文件
#vim ts.conf
將第二行的#module_raw input修改成module_raw input
注意一定要頂格寫,否則程序執行時會發生讀取ts.conf錯誤
每次重編譯tslib并安裝后,都要重新修改/etc/ts.conf.
8)導出環境變量
在/source/rootfs/etc/profile中添加如下代碼:
export TSLIB_TSDEVICE=/dev/event4
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/tslib/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/tslib/etc/ts.conf
export set HOME=/root
export set QPEDIR=/qt-everywhere
export set QTDIR=/qt-everywhere
export set LD_LIBRARY_PATH=/qt-everywhere/lib:/tslib/lib:$LD_LIBRARY_PATH
export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"
export TSLIB_TSEVENTTYPE=H3600
export set QT_QWS_FONTDIR=/qt-everywhere/lib/fonts/
export set PLUGIN_PATH=$QTDIR/plugins
export set PATH=$QPEDIR/bin:$PATH
export PATH LD_LIBRARY_PATH
export TSLIB_ROOT=/tslib
export QWS_SIZE=800x480
說明:
TSLIB_TSDEVICE //觸摸屏設備文件名。
TSLIB_CALIBFILE //校準的數據文件,由ts_calibrate校準程序生成。
SLIB_CONFFILE //配置文件名。
TSLIB_PLUGINDIR //插件目錄
TSLIB_CONSOLEDEVICE //控制臺設備文件名
TSLIB_FBDEVICE //設備名
以上環境變量在實際開發中的實際配置可以根據實際情況決定。而這些指定的設備節點一定要和你的開發板上的/dev目錄下的設備節點相對應。在以往項目中設備文件名有可能是/dev/event4
9)插上屏后,在開發板上運行/tslib/bin下的測試程序。
把交叉工具鏈中的庫拷貝到/source/rootfs/lib下面
$ cp /home/linux/toolchain/arm-cortex_a8-linux-gnueabi/lib/* /source/rootfs/lib
開發板上執行:# /tslib/bin/ts_calibrate
4. 移植QT lib <4.7.0 for arm>
把該光盤下:\移植相關\QT相關\文件夾下的qt-everywhere-opensource-src-4.7.0-beta2.tar拷貝到linux環境下。不能/mnt/hgfs/掛載目錄下執行。因為此文件里面有ln 連接文件。Window和linux的磁盤不一樣,不支持ln。
1) 解壓源碼
$ tar xvf qt-everywhere-opensource-src-4.7.0-beta2.zip
2) 改配置文件,指明交叉編譯工具鏈
$ cd qt-everywhere-opensource-src-4.7.0-beta2
$ vi mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf

3) 配置
$ ./configure -prefix /qt-everywhere -embedded arm -release -opensource -fast -no-accessibility -no-scripttools -no-mmx -no-multimedia -no-svg -no-webkit -no-3dnow -no-sse -no-sse2 -silent -qt-libpng -qt-libjpeg -no-libtiff -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-gnueabi-g++ -little-endian -qt-freetype -depths 4,8,12,16,24,32 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-tslib -I/home/linux/tslib/include -L/home/linux/tslib/lib
備注:紅色的為連接TSLIB庫的路徑,一定要正確。
4) 編譯并安裝
$ make
$ sudo make install
5) 把prefix制定的安裝目錄全部拷貝到開發板上
$ cp -a /qt-everywhere /source/rootfs
5、在板子下配置環境變量:(該步驟已做)
1) 修改/source/rootfs/etc/profile添加如下內容:
export LD_LIBRARY_PATH=/qt-everywhere-/lib:$LD_LIBRARY_PATH
export QWS_SW_CURSOR
export QT_QWS_FONTDIR=/qt-everywhere/lib/fonts
(// fonts目錄下放字體集,使qt支持中文。(刪除其他字體,只留以下三個)
wenquanyi_130_75.qpf wenquanyi_150_50.qpf wenquanyi_150_75.qpf)
export set HOME=/root
export set QPEDIR=/qt-everywhere