宿主机:Ubuntu10.04
主机编辑器:gcc4.6.1
交叉编译器:mipsel-linux-gcc (龙芯gcc-3.4.6-2f)
开发板:龙芯1b开发板(http://item.taobao.com/item.htm?spm=a1z10.1.w4004-4678790104.8.WBYZuT&id=36562593290)
QT版本:QT4.5.3
注:此方法同时适用ARM平台,只需要作少量的修改即可。
1、 下载源码包
从ftp://ftp.qt.nokia.com/qt/source/ 下载:
(1)qt-embedded-linux-opensource-src-4.5.3.tar.gz
(2)qt-x11-opensource-src-4.5.3.tar.gz
下载触摸屏管理程序:tslib-1.4.tar.gz
2、 编译安装QT-X11-4.5.3(本地编译)
#tar zxvf qt-x11-opensource-src-4.5.3.tar.gz
#cd qt-x11-opensource-src-4.5.3
#./configure
#make
#make install
可通过prefix=在configure阶段时指定安装路径,默认安装到/usr/local/,可通过./configure --help获知配置信息。
以上操作结束后,在/usr/local/目录下生成Trolltech目录。默认情况下已经把例子也进行编译,也可以通过配置不编译例子程序,这样编译的时间会短一些。
如进入/usr/local/Trolltech/Qt-4.5.3/examples/widgets/analogclock,运行./analogclock–qvfb,则可看到在屏幕上看到模拟时钟界面。
设置环境变量,可创建一配置文件setenv-qt-x11.sh,加入如下内容:
#!bin/bash
PATH=/usr/local/Trolltech/Qt-4.5.3/bin:$PATH
QTDIR=/usr/local/Trolltech/QT-4.5.3
MAINPATH=$QTDIR/man:$MAINPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH QTDIR MAINPATH LD_LIBRARY_PATH
在终端执行如下命令,使其起作用:
#source setenv-qt-x11.sh
测试环境变量是否设置成功:
#echo $QTDIR
如显示/usr/local/Trolltech/QT-4.5.3,则设置成功
进入某个例子工程,执行:
#qmake –project --生成*.pro工程文件
#qmake --生成Makefile文件
#make --生成可执行程序
3、 编译安装tslib-1.4
# tar zxvf tslib-1.4.tar.gz
#cd tslib
#./autogen.sh
#./configure --prefix=/opt/tslib-mipsel/ --host=mipsel-linux ac_cv_func_malloc_0_nonnull=yes
#make
#make install
以上命令执行成功后,在/opt/tslib目录下生成bin、include、 lib 、etc四个文件夹。
4、 编译安装QT4.5.3(交叉编译)
#tar zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
#cd qt-embedded-linux-opensource-src-4.5.3
# ./configure -prefix /opt/qt4-mipsel -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -no-webkit -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-mips-g++ -embedded mips -little-endian -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb -confirm-license -qt-mouse-tslib -I/opt/tslib-mipsel/include -L/opt/tslib-mipsel/lib
其中,” -I/opt/tslib-mipsel/include -L/opt/tslib-mipsel/lib”指定触摸屏头文件与库所在位置,之所以需要指定是因为配置时开启了触摸屏功能:-qt-mouse-tslib。
打开文件mkspecs/qws/linux-mips-g++/qmake.conf,把宏变量修改为正确的值:
把mips修改为mipsel,这是由于我们的GCC编译器为mipsel-linux-gcc,否则提示找不到编译器mips-linux-xx。
另外,把QMAKE_CFLAGS += -mips32,QMAKE_CXXFLAGS += -mips32修改为:
QMAKE_CFLAGS += -pipe,QMAKE_CXXFLAGS += -pipe
#make
#make install
设置环境变量,加入到文件setenv-qt-embedded.sh
#!bin/bash
PATH=/opt/qt4-mipsel/bin:$PATH
QTDIR=/opt/qt4-mipsel
MAINPATH=$QTDIR/man:$MAINPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH QTDIRMAINPATH LD_LIBRARY_PATH
通过在终端执行如下命令生效:
#source setenv-qt-embedded.sh
在进行交叉编译时需要此环境变量生效。
5、 移植库文件到开发板
开发板上电后,挂载NFS文件系统到/mnt下,然后创建库文件目录,拷贝qt库文件与tslib库文件到相应的目录下:
#cd /opt
#mkdir tslib qt4lib
#cp /mnt/tslib-mipsel/lib /mnt/tslib-mipsel/etc /opt/tslib/ –rdf
#cp /mnt/tslib-mipsel/bin/ts_calibrate /mnt/tslib-mipsel/bin/ts_test /bin/
#cp /mnt/qt4-mipsel/lib /opt/qt4lib/ -rdf
设置开发板的环境变量使其支持触摸屏与QT4的操作,打开/etc/profile,加入如下内容:
exportQTDIR=/opt/qt4lib
exportT_ROOT=/opt/tslib/
exportPATH=$QTDIR/bin:$PATH
exportTSLIB_CONSOLEDEVICE=none
exportTSLIB_FBDEVICE=/dev/fb0
exportTSLIB_TSDEVICE=/dev/event0
exportTSLIB_PLUGINDIR=$T_ROOT/lib/ts
exportTSLIB_CONFFILE=$T_ROOT/etc/ts.conf
exportTSLIB_CALIBFILE=/etc/pointercal
exportTSLIB_TSEVENTTYPE=INPUT
exportQWS_MOUSE_PROTO=tslib:/dev/event0
exportQT_QWS_FONTDIR=/opt/qt4lib/lib/fonts
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH
保存退出,通过在终端执行source /etc/profile使其起作用,或重启后,自动执行该脚本。
需要根据开发板的实际情况来进行配置环境变量,特别注意的是触摸屏设备:
export TSLIB_TSDEVICE=/dev/event0
也有可能是:
export TSLIB_TSDEVICE=/dev/input/event0
要根据实际的驱动进行选择,同时需要注意:
exportTSLIB_TSEVENTTYPE=INPUT
该变量的设置要根据实际进行,与tslib配置相关联。
需要对tslib的配置文件作相应的修改,才可以使用,打开/opt/tslib/etc/ts.conf:
module_rawinput
module pthrespmin=1
module variancedelta=30
module dejitterdelta=100
module linear
6、 在开发板上验证触摸屏程序
验证触摸较正程序,在开发板终端下执行:
#ts_calibrate
运行该程序后,屏幕将出现五点校正画面,依次点击五点后,将生成触摸屏校正数据文件/etc/pointercal。该文件被QT程序所使用。
运行触摸屏拖曳测试程序:
#ts_test
运行后屏幕出现drag,draw 依次选择后进行测试,同时终端下出现拖曳后的取点数据。
7、 在开发板上验证QT程序
回到主机端交叉编译QT程序,首先确认环境变量是否配置正确:
#echo $QTDIR
查看打印的路径是否为指向交叉编译后的QT库路径,如果否,执行如下脚本进行配置:
#source setenv-qt-embedded.sh
然后进入例子程序目录,如:
#cd qt-embedded-linux-opensource-src-4.5.3/examples/mainwindows/application/
#qmake –project
#qmake
#make
将生成的application代码下载到开发板,在开发板终端上运行:
#./application -qws
如看到QT界面,表示运行成功。