一、下载tslib源码:
git clone
https://github.com/kergoth/tslib
这里的安装包是已经解压的直接
在这之前需要安装软件:如
automake、 libtool、autoconf(或autoconf2.13)。
否则会出现一些问题:如:
autoreconf :command not found
erro:
possibly undefined macro: AC_DISABLE_STATI...
一些未定义的错误。
如果还出现了以外的问题大家只能百度了,或者把问题发我也可以,一起探讨一下。
下面执行命令:
.
/configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes CC=/opt/xtools/arm920t/bin/arm-linux-gcc
解释一下:
--prefix=/usr/local/tslib/
指定tslib的安装路径
ac_cv_func_malloc_0_nonnull=yes //在tslib中可能会用到malloc,所以让它执行
然后在执行
然后在安装目录下tslib会看到生成的五个文件
将图中bin etc include lib 四个文件打包成,我命名为tslib.tar.gz
然后将压缩包下载到开发板app目录下。
cd /apps/
tftp -gr tslib.tar.gz 192.168.1.20 //下载到开发板上。
下一步在profile文件中添加环境变量
export TSLIB_ROOT=/apps/tslib
// (解压出四个文件夹所在的目录)
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf // (tslib模块配置文件)
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/pointercal // (告诉QTOPIA,pointercal文件在哪里)
export TSLIB_TSDEVICE=/dev/input/event1 // (触摸屏设备节点文件)(因为每个设备的功能不同,所以选择的设备不同,我这里的触摸屏设备是event1)
export TSLIB_CONSOLEDEVICE=none
// (tslib运行需要的控制台,这里是LCD屏幕,设定的控制台设备为none,默认为/dev/tty)
export TSLIB_FBDEVICE=/dev/fb0
// (framebuffer设备文件)
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
// (tslib插件库目录)
export LD_LIBRARY_PATH=/lib:/usr/lib:/apps/tslib/lib
// (设置你tslib下lib的路径,让系统能够找到)
然后在ts.conf文件中修改并添加代码(如果源文件有就不用添加了)
#module_raw input
将这里的#号去掉,然后将代码紧靠左边,前面什么都不能有,否则会出错
module_raw input
No raw modules loaded.
ts_config: No such file or directory
添加:
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
接下来运行程序校检
进入到/apps/tslib/bin下 (
(这是我的目录,你们看着自己的目录来)
执行./ts_calibrate(建议还是重新赋予其执行权限比较好,因为可能在移动的时候,文件有些变动)
然后出现了如图错误:
这是因为我在linux内核文件中缺少对触屏驱动的支持,所以需要对其做出修改:
修改完毕之后重新烧录内核,之后就可以了。
切换到bin目录下
执行校准文件
但是这里的校准并不是很精准,随便点击屏幕,光标仍然显示校准成功。(后面有时间分析)
程序中,触摸屏设备
TSLIB_TSDEVICE
校准文件
TSLIB_CALIBFILE
都是从环境变量中获取的,在配置tslib库中应该指定。
TSLIB_TSDEVICE
一般是/dev/input/event0文件,这个跟触屏设备有关,可以用cat /proc/bus/input/devices命令查看确认,或者直接在终端用cat /dev/input/event0命令,然后点击触摸屏,会有数据打印出。
TSLIB_TSCALIBFILE
一般是/etc/pointercal文件,文件中记录了计算后的校准值。通过ts_open()、ts_config()函数打开和初始化触摸屏设备后,在get_sample()函数中通过put_cross()函数显示光标,然后通过getxy()函数等待用户点击触屏上的光标,获取触点数据,然后存在cal结构体中。获取完5个校准点(左上、右上、右下、左下、中间)数据后,通过perform_calibration()进行计算,把校准值写入到/etc/pointercal文件中。(这里有相关的介绍——
https://blog.csdn.net/westlor/article/details/68065627)
再次校准前,需要把pointercal文件删掉,否则它的值仍然是错误的。
后来校准过后,屏幕采集数据正确后,测试效果正确
执行
测试如图(画得丑,随便看看.haha)