QT/E 4.6.2和tslib 1.4在mini2440上的移植

QT自从被Nokia抢走以后改动比较大,加入了一些新的特性,也变的更加通用,支持更多的平台,也把Trolltech混乱的版本结构理了理,我觉得还是不错的。QT/E 4.6以后的版本都叫做everywhere,可见其野心啊。。。只有4.5以上的版本是用的LGPL,所以不想公开源代码的人要注意了。

本文用的是qt-everywhere-opensource-src-4.6.2.tar.gz,tslib-1.4.tar.gz,Ubuntu 10.04,GCC 4.4.3,arm-linux-gcc 4.3.2,一个华丽的组合,基本都是目前能找到的最新的东东。

由于网上的移植教程泛滥,我就只是大概讲一下我的移植步骤和经验:

1         安装交叉编译工具

我用的是开发板上的arm-linux-4.3.2,建议用越新的编译器越好,网上用低版本的人都会出现各种错误,不是要改代码就是改配置文件,千万别被忽悠了。

2         编译tslib

我用的tslib1.4,过程中会有一些小问题,网上有解决方法。

./autogen.sh    #用于生成configure脚本,要装autoconf

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

#产生一个cache文件arm-linux.cache,欺骗configure,tslib的bug

./configure  --host=arm-linux --prefix=/opt/tslib-install --cache-file=arm-linux.cache

make

make install

交叉成功后在目标位置产生/bin、/etc、/include、/lib 4个文件夹。

网上很多人说在configure的时候要加上--enable-inputapi=no,我想请问1.4里有这个选项么,抄帖子为何都不先自己试试,每当这次我就很鄙视把它搜出来的搜索引擎,害人啊害人。网上人加的这个选项估计是—enable-input=no,但这个也是要看情况的,tslib默认会把所有raw module编进去,像笔者用的mini2440的触摸屏就是基于linux的input设备的,把它disable掉肯定就废了,所以建议全部编译才是王道。

3         编译QT/E

如果你采用的也是笔者的arm-linux-4.3.2的话,那就什么都不用改,直接配置编译就好,否则的话就去网上找找大家是怎么改代码和配置文件的。

以下是笔者的配置文件:

a)     

#!/bin/sh

./configure \

-embedded arm \

-prefix /nfs/qt \

-release -shared \

-opensource \

-no-largefile \

-no-qt3support \

-xplatform qws/linux-arm-g++ \

-qt-gif -qt-libpng -qt-libjpeg –qt-zlib \

-iconv -little-endian -qt-freetype \

-depths 16,18,24,32 \

-no-qvfb \

-qt-sql-sqlite -no-kbd-qvfb -no-mouse-qvfb -no-glib \

-qt-mouse-tslib \

-nomake tools \

-L/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib
 


多余的就不解释了,自己应该都可以理解。

1)      -qt-mouse-tslib是为了我们要用tslib;

2)      和qvfb有关的我也全都干掉了,我的理解是有些人为了要在X11上运行、调试,所以要在X11上模拟一个framebuffer,本文是基于一个真实的设备,所以也就不需要了,而且就算想调试,用Windows版的岂不是更爽。

3)      -L/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib,这是交叉编译的库文件目录,这个选项一定要有,而且很重要,一定要写对。

接下来就是无聊的configure,make,make install。

其实4.6.2很好编,只要理解configure的内容就好,还有就是不要太相信网上的。

4         应用tslib

把编译好的tslib全部考进开发板,接下来设置一些环境变量:

export TSLIB_ROOT=/home/tslib

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH

以上的这样根据自己的开发平台而定。然后要修改一个配置文件。Tslib虽然默认编译了所有的raw module,但是却一个都没有启用,真是另人费解。笔者是把etc/ts.conf里的# module_raw input这行的注释给取消了,配置文件中的其实参数请上网查看。

这样就可以用bin下的测试程序了。这时要想在QT中支持触摸屏的话只需要启动它内嵌的鼠标设备就好了,实际中是设置一个环境变量:

export QWS_MOUSE_PROTO='tslib:/dev/input/event0'

这样就可以开始编程了。

5         总结

虽然我被网上的人浪费了一些时间,总体QT/E还是无罪的,mini2440比pxa270的处理器要弱,但是运行QT的速度感觉差不多,说明QT变快了。以前在pxa270上用的是QT/E 4.4。

触摸屏感觉不错,其实大都的触摸屏都感觉不错的说,只是用亿道的触摸屏用出阴影了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxwyf.html