平台:ubuntu、 arm-linux-gcc4.3.2、 linux2.6.36、 QTSDK1.1.4(windows)、 QT library4.7.4、 QT creator2.3、Tslib1.4、FORLINX_6410_touch.cramfs
首先来了解一下Qtopia QT4等版本的关系,现有流行的几个版本为:Qtopia2.2.0、Qtopia4.4.3、Qt4.7。这几个版本有何区别呢?本人理解如下:Qtopia为桌面系统,就像我们用的ubuntu,里面可以安装很多应用程序,2.2.0和4.4.3为它的两个用的最多的版本。而Qt4.7仅仅只是库文件,用来支持QT4应用程序。但也不能说是包含关系,他们还是有很多区别的,所以不能用Qt4.7编译的程序放到Qtopia下直接运行,而需要重新编译。
再说一下X86版和ARM版,关系如下:这两个版本源代码是同一套,比如qt-everywhere-opensource-src-4.7.4,它既可以编译出x86版,也可以编译出arm版,只是使用不同的配置。编译出的x86版可以用来编译在x86平台上运行qt4应用程序;而编译出的arm版则用来编译在arm平台上运行的qt4应用程序。而qtopia x86版用来在x86平台上仿真开发的qtopia应用程序,以节省开发时间。
这里我们讨论的仅仅是QT4.7的移植和应用程序的开发。当然,前提是你已有可用的u-boot、linux内核、文件系统。
由于Qt应用程序将使用触摸屏替代鼠标,因此要先移植Tslib为触摸屏进行校准等工作。Tslib移植步骤可参考《OK6410 QT移植百科全书》,讲解得比较详细。也可直接使用,拷贝到文件系统中。
QT4.7.4移植步骤如下:
1. 下载qt-everywhere-opensource-src-4.7.4.tar.gz
QT官网下载。
2. 新建一个自动编译脚本(参考飞凌开发板资料)
vim build-all
脚本内容如下:
#/bin/bash
export PATH=/usr/local/arm/4.3.2/bin:$PATH
exportPKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi
export TB_CC_PREFIX=arm-linux-
export TOOLCHAIN=/usr/local/arm/4.3.2
rm -fr qt-everywhere-opensource-src-4.7.4
rm -fr /opt/qt-4.7.4-arm
tar xfvz qt-everywhere-opensource-src-4.7.4.tar.gz
cd qt-everywhere-opensource-src-4.7.4
echo yes | ./configure -opensource-embedded arm -xplatform qws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -prefix /opt/qt-4.7.4-arm -I /usr/local/tslib/include -L/usr/local/tslib/lib
make 2>&1 | tee ../qte4.7.1Makelog&& make install
第3-9行指定交叉编译器为arm-linux-gcc4.3.2并设置其环境变量。
第11-13行移出上次编译的文件夹和文件。
第15-17行解压缩,并切换目录。
第19行配置,这里配置成arm平台,-prefix后为安装目录,-I –L为目标板Tslib目录,即上面将Tslib拷入文件系统的目录。(若需编译x86版则使用另外的配置)
第21行编译、安装(需要root权限,若不是使用root登录可使用sudo make && sudo makeinstall重新安装)
3. 运行脚本,等待安装完成。
这步需要耐心等待,编译安装时间较长,几个小时……
4. 将安装完成的目录复制进文件系统相同目录下。
QT4应用程序开发步骤如下:
1. 下载QTSDK1.1.4(windows)
可以到QT官网下载,并安装,相信这一步不需要多做介绍。记得是windows版,这样,我们可以先在windows下调试我们的QT应用程序。当然,如果你是直接在linux下调试,就直接安装linux版的就好。步骤2也可以略过了。
2. 安装QT creator(linux)
下载QT creator安装文件,记得是.bin格式的,如果下的是源码,还得重新编译…而前者可以直接安装。
安装完成之后,添加qmake,在工具-->选项-->QT4-->添加,选择我们上面移植的QT4.7库/opt/qt-4.7.4-arm/bin,选中qmake。
添加工具链,工具-->选项-->工具链-->添加,选择交叉编译工具,即arm-linux-gcc4.3.2。
这样载入工程后点击构建就可以交叉编译应用程序了。
3. 编写QT4应用程序
利用安装好的QT creator编写应用程序,并在x86平台上调试通过。
4. 交叉编译应用程序
将编写好的工程文件拷贝到Linux下,用第二步建立好的交叉编译平台,编译此程序。即产生了arm平台可执行文件。
其中设置可能需要修改,包括qmake、工具链、目标文件目录。
5. 移植到arm平台
将编译好的QT库文件(即第二步编译安装的,目录/opt/qt-4.7.4-arm)拷入文件系统中相同目录下,并将交叉编译好的应用程序拷入qt-4.7.4-arm目录下。
6. 编写开机运行脚本
在/bin目录下新建脚本
vim myqt4application
内容如下:
#!/bin/sh
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_TSEVENTTYPE=H3600
exportTSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
exportTSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
#export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CALIBFILE=/mnt/disk/pointercal
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QTDIR=/ opt/qt-4.7.4-arm
export QT_QWS_FONTDIR=/opt/qt-4.7.4-arm/lib/fonts
exportLD_LIBRARY_PATH=$QTDIR/plugins/qtopialmigrate/:$QTDIR/qt_plugins/imageformats/:$QTDIR/lib:/root/tslib/build/lib:$LD_LIBRARY_PATH
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/root/tslib/build/bin
if [ -c /dev/input/event1 ]; then
export QWS_MOUSE_PROTO="Tslib:${TSLIB_TSDEVICE}"
if [! -s /mnt/disk/pointercal ] ; then
rm /mnt/disk/pointercal
/usr/local/tslib/bin/ts_calibrate
fi
else
export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
> TSLIB_CALIBFILE
fi
export QWS_KEYBOARD=TTY:/dev/tty1
FB_SIZE=$(cat /sys/class/graphics/fb0/virtual_size)
#exportQWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
case "$FB_SIZE" in
800,480)
exportQWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
;;
480,272)
exportQWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
;;
*)
exportQWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
;;
esac
#export QWS_DISPLAY=:1
export HOME=/mnt/disk/QtE4Home
cd /opt/qt-4.7.4-arm
./myqt4application–qws
第3-21行设置有关tslib环境变量。
第23-29行设置有关qt4环境变量,这里增加了QT_QWS_FONTDIR环境变量的设置,不然可能导致以下错误:
QFontDatabase:Cannot find font directory /usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts
- is Qt installed correctly?
第31-49行判断用户是使用触摸屏还是鼠标设备,并使用不同的配置,这里需要说明的是:在OK6410配套文件中,这里设置得不对,会导致触摸屏没有反应! 其中-c表示文件存在且为字特殊文件时为真(/dev/input/event1为触摸屏设备,在linux3.0中为event2),-s表示文件存在且大小不为零时为真。
第83-85行切换到应用程序目录并运行。
7. 修改/etc/init.d/rcS
最后一行修改为:/bin/ myqt4application&
整个过程就如上所述,其中还是有很多问题需要解决,例如移植到arm平台不能显示中文字体。以后再讨论。