原文链接:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=357014&authorid=222350&page=3#comment_top
在进行Qt开发之前,建立Qt编译环境、移植Qt是一个至关重要的步骤。
1.1.1 tslib安装
OK6410开发平台在使用触摸屏时,因为电磁噪声的缘故,触摸屏容易存在点击不准确、有抖动等问题。tslib能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供一个统一的接口。
在官方网站下载tslib-1.0.tar.bz2,地址:http://sourceforge.net/projects/tslib.berlios/files/。
将下载完成之后的tslib-1.0.tar.bz2存放在宿主机任意一个目录下:
zhuzhaoqi@zhuzhaoqi-desktop:~/Qt-4.8.4/tslib$ ls
tslib-1.0.tar.bz2
将其解压出来:
zhuzhaoqi@zhuzhaoqi-desktop:~/Qt-4.8.4/tslib$ tar jxvftslib-1.0.tar.bz2
解压完成之后进入tslib-1.0目录,如下所示:
zhuzhaoqi@zhuzhaoqi-desktop:~/Qt-4.8.4/tslib/tslib-1.0$ls
acinclude.m4 autogen.sh COPYING m4 plugins tests
AUTHORS ChangeLog etc Makefile.am tslib.pc.in
autogen-clean.sh configure.ac INSTALL NEWS src
安装autoconf、automake、libtool:
root@zhuzhaoqi-desktop:/home/zhuzhaoqi#apt-get installautoconf
root@zhuzhaoqi-desktop:/home/zhuzhaoqi#apt-get installautomake
root@zhuzhaoqi-desktop:/home/zhuzhaoqi#apt-get installlibtool
由于open函数的语法不符合最新的gcc,在/tests/ts_calibrate.c中加入open的第三个参数:
if ((calfile = getenv("TSLIB_CALIBFILE")) !=NULL) {
cal_fd= open (calfile, O_CREAT | O_RDWR,0777);
} else {
cal_fd= open ("/etc/pointercal", O_CREAT | O_RDWR,0777);
}
执行编译:
zhuzhaoqi@zhuzhaoqi-desktop:~/Qt-4.8.4/tslib/tslib-1.0$./autogen.sh
……
zhuzhaoqi@zhuzhaoqi-desktop:~/Qt-4.8.4/tslib/tslib-1.0$./configure --prefix=/usr/local/tslib-1.0/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes--enable-inputapi=no
……
--prefix=/usr/local/tslib-1.0/这是安装路径,进行编译、安装。
zhuzhaoqi@zhuzhaoqi-desktop:~/Qt-4.8.4/tslib/tslib-1.0$make
……
zhuzhaoqi@zhuzhaoqi-desktop:~/Qt-4.8.4/tslib/tslib-1.0$sudomake install
安装完成之后在/usr/local/目录下有:
zhuzhaoqi@zhuzhaoqi-desktop:/usr/local$ ls
arm etc include lib qwt-6.0.2 sbin src
bin games info man qwt-6.0.2-arm share
tslib-1.0
修改ts.conf:
zhuzhaoqi@zhuzhaoqi-desktop:/usr/local/tslib-1.0/etc$vim ts.conf
去掉module_rawinput前面的#,注意前面这个空格也得删除,如下:
# Uncomment if you wish to use the linux input layerevent interface
module_raw input
将/usr/local/tslib-1.0/目录下的所有文件拷贝到开发板,笔者是存放在usr/local/。如下:
zhuzhaoqi@zhuzhaoqi-desktop:/usr/local/tslib-1.0$ sudocp -r * /home/zhuzhaoqi/rootfs/usr/local/
在OK6410中设置tslib环境变量,在文件系统的/etc/profile中添加如下:
//
指定帧缓冲设备
export set TSLIB_FBDEVICE=/dev/fb0
//
指定触摸屏设备节点
export set TSLIB_TSDEVICE=/dev/input/event0
//
指定TSLIB
配置文件的位置
export set TSLIB_CONFFILE=/usr/local/etc/ts.conf
//
指定触摸屏校准文件 pintercal
的存放位置
export set TSLIB_CALIBFILE=/etc/pointercal
//
指定触摸屏插件所在路径
export set TSLIB_PLUGINDIR=/usr/local/lib/ts
//
设定控制台设备为 none
,否则默认为 /dev/tty
,
export TSLIB_CONSOLEDEVICE=none
在测试触摸屏之前,首先得保证在/dev目录下有触摸屏设备节点eventX:
[YJR@zhuzhaoqi]\# ls -l /dev/input/e*
crw-rw---- 1 root root 13, 64 Jan 1 08:00 /dev/input/event0
运行ts_calibrate:
[YJR@zhuzhaoqi]\# cd bin/
[YJR@zhuzhaoqi]\# ls
ts_calibrate ts_harvest ts_print ts_print_raw ts_test
[YJR@zhuzhaoqi]\# ./ts_calibrate
运行/usr/local/bin中的ts_calibrate进行校准,成功的话会出现界面,并点击十字符号,完成后会生成/etc/pointercal文件,这便是触摸屏的校准配置文件。
或者可以写一个触摸屏校准脚本calibrate,存放在/bin目录下:
#!/bin/sh
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
export TSLIB_TSEVENTTYPE=H3600
export TSLIB_CONSOLEDEVICE=none
export QWS_KEYBOARD="TTY:/dev/tty1"
if [ -c /dev/input/event0 ]; then
if [ -e/etc/pointercal -a ! -s /etc/pointercal ] ; then
rm /etc/pointercal
fi
fi
export PATH=$QTDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QTDIR/plugins/qtopialmigrate/:$QTDIR/qt_plugins/imageformats/:$QTDIR/lib:/root/tslib/build/lib:$LD_LIBRARY_PATH
exec /usr/local/tslib/bin/ts_calibrate 1>/dev/null 2>/dev/null
#exec /usr/local/tslib/bin/ts_test 1>/dev/null 2>/dev/null
执行calibrate:
[YJR@zhuzhaoqi]\# ./calibrate