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

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 :是你執(zhí)行make install 的時(shí)候編譯后生成的可執(zhí)行文件和庫文件以及配置文所安裝的目錄,這個(gè)目錄不能和tslib源碼目錄相同;
--enable-inputapi=no :看你的觸摸屏驅(qū)動(dòng)是否支持ioctl操作,如果支持就不用寫上,不支持就要添上,如果不添加會(huì)有ts_open:Inappropriate ioctol for device
configure文件下還有很多選項(xiàng),你可以執(zhí)行./configure --help 來進(jìn)行選擇其他項(xiàng),不過在這里這些選項(xiàng)就夠了。
5) 編譯安裝
$ 修改tests/ts_calibrate.c 修改226行和229行,加上0666

$ make
$ make install
6) 把指定安裝目錄下的tslib的文件都拷貝到你所掛載的根文件系統(tǒng)下
$ cp -a /home/linux/tslib /source/rootfs
7) 修改/source/rootfs/tslib下的etc目錄中ts.conf文件
#vim ts.conf
將第二行的#module_raw input修改成module_raw input
注意一定要頂格寫,否則程序執(zhí)行時(shí)會(huì)發(fā)生讀取ts.conf錯(cuò)誤
每次重編譯tslib并安裝后,都要重新修改/etc/ts.conf.
8)導(dǎo)出環(huán)境變量
在/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 //觸摸屏設(shè)備文件名。
TSLIB_CALIBFILE //校準(zhǔn)的數(shù)據(jù)文件,由ts_calibrate校準(zhǔn)程序生成。
SLIB_CONFFILE //配置文件名。
TSLIB_PLUGINDIR //插件目錄
TSLIB_CONSOLEDEVICE //控制臺(tái)設(shè)備文件名
TSLIB_FBDEVICE //設(shè)備名
以上環(huán)境變量在實(shí)際開發(fā)中的實(shí)際配置可以根據(jù)實(shí)際情況決定。而這些指定的設(shè)備節(jié)點(diǎn)一定要和你的開發(fā)板上的/dev目錄下的設(shè)備節(jié)點(diǎn)相對(duì)應(yīng)。在以往項(xiàng)目中設(shè)備文件名有可能是/dev/event4
9)插上屏后,在開發(fā)板上運(yùn)行/tslib/bin下的測(cè)試程序。
把交叉工具鏈中的庫拷貝到/source/rootfs/lib下面
$ cp /home/linux/toolchain/arm-cortex_a8-linux-gnueabi/lib/* /source/rootfs/lib
開發(fā)板上執(zhí)行:# /tslib/bin/ts_calibrate
4. 移植QT lib <4.7.0 for arm>
把該光盤下:\移植相關(guān)\QT相關(guān)\文件夾下的qt-everywhere-opensource-src-4.7.0-beta2.tar拷貝到linux環(huán)境下。不能/mnt/hgfs/掛載目錄下執(zhí)行。因?yàn)榇宋募锩嬗衛(wèi)n 連接文件。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制定的安裝目錄全部拷貝到開發(fā)板上
$ cp -a /qt-everywhere /source/rootfs
5、在板子下配置環(huán)境變量:(該步驟已做)
1) 修改/source/rootfs/etc/profile添加如下內(nèi)容:
export LD_LIBRARY_PATH=/qt-everywhere-/lib:$LD_LIBRARY_PATH
export QWS_SW_CURSOR
export QT_QWS_FONTDIR=/qt-everywhere/lib/fonts
(// fonts目錄下放字體集,使qt支持中文。(刪除其他字體,只留以下三個(gè))
wenquanyi_130_75.qpf wenquanyi_150_50.qpf wenquanyi_150_75.qpf)
export set HOME=/root
export set QPEDIR=/qt-everywhere