最近拿了一块飞凌的TE2440开发板来做一些QT以及串口相关的开发,本来按照飞凌的手册是用QTopia 2.2.0,但是使用GCC 3.4.1在Fedora上一直也编译不过去,后来才转用Ubuntu并且换成QT 4.6.4来编译(试了4.7.3发现和GCC 3.4.1有兼容性问题,在板子上跑不起来),总算基本完成了,也记录下来以备之后需要查阅。

步骤如下:

前期准备:

1. 当然需要交叉编译器,我使用的是arm gcc 3.4.1

2. 还需要在编译机器上安装autoconf, automake, libtool

3. 解压tslib(触摸屏所需),configure参数大致如下:

export PATH=/usr/local/arm/3.4.1/bin:$PATH

export TOOLCHAIN=/usr/local/arm/3.4.1

export TB_CC_PREFIX=arm-linux-

export PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-linux

./autogen.sh

echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

./configure --host=arm-linux --cache-file=arm-linux.cache --enable-input=no --with-plugin=plugins --prefix=/usr/local/arm/tslib

make

make install

之后比较重要的一个步骤是要把plugins/.libs这个目录copy到/usr/local/arm/tslib/lib/ts下,这个是在目标板上要用到的。

然后就是编辑一下/usr/local/arm/tslib/etc/ts.conf,要把里面的一个module_raw起始的行去掉#号和空格,一般都是module_raw input,但是我用的这个板子上用的试h3600。

现在就进入到编译QT的工作上了:

1. 从QT官网http://qt-project.org/下载qt-everywhere-opensource-src-4.6.4.tar.gz

2. 在Linux上解压

3. 基本上我就用了一个脚本来编译:

 

#/bin/bash

 

export PATH=/usr/local/arm/3.4.1/bin:$PATH

export PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-linux

export TB_CC_PREFIX=arm-linux-

export TOOLCHAIN=/usr/local/arm/3.4.1

 

cd qt-everywhere-opensource-src-4.6.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.6.4   -I /usr/local/arm/tslib/include -L /usr/local/arm/tslib/lib -D__ARM_ARCH_5TEJ__

 

make 2>&1 | tee ../qte4.6.4Makelog && make install

作为裁剪的话里面有不少的选项可以去掉,这个留待之后考虑。
编译完成之后没有什么问题的话就会安装在/opt/qt-4.6.4下,不过我编译的时候还是发现有几个小问题,一个时候mkspecs/qws/linux-arm-g++里的qmake.conf还要改一下,这里的CC什么的那几行都加上-lts,也就是连触摸屏的库,不然居然好像最后没连上,大概configure里也是可以改,但是我查到的一般都这么做,也就依葫芦画瓢了。
 
4. 编译完成后按理来说那些示例程序就可以跑了,但是有几个点要注意,一个是运行的时候都要加上 -qws参数,第二个是要配置一些触摸屏的参数,主要示例如下:
export TSLIB_TSDEVICE=/dev/touchscreen/0raw
export TSLIB_TSEVENTTYPE=H3600
 
# QT的触摸屏配置,如果是QTOPIA的就改成TPanel
export QWS_MOUSE_PROTO="TSLIB:/dev/touchscreen/0raw"
 
export QT_QWS_FONTDIR=/usr/lib/fonts
export TSLIB_ROOT=/usr/tslib
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/ts:$LD_LIBRARY_PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/touchscreen/0raw
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/usr/etc/pointercal
 
设置好了这些环境变量之后就可以运行/usr/local/arm/tslib/bin下的ts_calibrate来校准触摸屏了,校准后会生成/usr/etc/pointercal,一次校准之后就不需要再做了。
 
5. 另外的一个点就是中文显示,
字库方面从网上查到有一个文泉译的字库不错,官网: http://wenq.org/
在程序里(最好是main)先要加几个:
    QTextCodec::setCodecForTr(QTextCodec::codecForName("wenquanyi"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("wenquanyi"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("wenquanyi"));
 
app.setFont(QFont("wenquanyi",12));
一般来说这样就可以正确显示中文了,当然字库所在位置要和上面的QT_QWS_FONTDIR对应。
 
 
基本上就是这次编译QT和运行遇到的主要问题,当然,QT的编程是另一方面,总体来说比几年前用过的QTE3好很多,有QTCreator可以直接可视化的编程和整理界面,我是直接在Windows下装了一个QT libraries和QT Creator,整好界面之后放到linux下编译了就直接放到板子上跑就好了。