最近在弄触摸屏,在网上看了一些资料介绍tslib,于是下了一个tslib1.4进行试验。
编译过程
1.下载源码包后解压;
2.运行autogen.sh脚本文件,产生configure文件;
3../configure配置生成make;这里可以加一下选项,比如编译器(开发arm板要指定arm交叉编译器),安装目录等。我是在主机下的没有加任何选项。
4.make编译。这一切都非常顺利。
移植过程
1.我在主机下建立usr/tslib目录作为目标目录。
2.根据网上说建立一些目录,如etc,lib,plugins等;
3.拷贝需要的程序和库文件到指定目录;
测试过程
这个环节问答最多,折磨我好几天,主要症结如下。
首先在注册环境变量时问答最大的是不知道值是多少,网上提供的都不符合我的要求。
export TSLIB_ROOT=/usr/tslib ——tslib的根目录
export TSLIB_PLUGINDIR=$TSLIB_ROOT/plugins——插件目录
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib——添加运行的依赖库目录
export TSLIB_CONSOLEFILE=none——控制台设备
export TSLIB_FBDEVICE=/dev/fb0——framebuffer,这里我遇到了问题,内核不支持framebuffer,所以在dev目录下没有这个设备fb0,出现IOCTL错误,后来发现在grub启动的时候添加vga=0x317后竟然就把framebuffer打开了,fb0也出来了,这一点让我很兴奋。我用的是debian,红旗6本身就有的,这可能就是不同linux的区别。
export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal——校准后的坐标文件
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf——tslib的配置文件。在这里有两个问题,首先就是测试程序申请块指针的大小是512字节,所在在ts.conf中有好多东西,要把没用的全部删掉,不然读这个文件会发生指针越界报段错误。另外留下来的module要符合硬件,我刚开始留下input模块机器说触摸屏不是我所能识别的,我猜是模块不对,后来换成ucb1x00就可以了。ts.conf如下:
module_raw ucb1x00
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
原始的ts.conf里module_raw有好多,并且都被注释掉了,所以刚开始报告raw module找不到,你要把需要的raw module恢复,并且把不用的全删掉,前面已经说了。至于哪个是对的,可能要自己去一个一个试了,我就试了input和ucb1x00。
export TSLIB_TSDEVICE=dev/input/mouse3——这是触摸屏设备,没有的话报错ts_open:no such directory。网上很多都是/dev/input/event0, /dev/input/ucb1x00等等,这些都不符合我的要求。后来通过在触摸屏插拔前后浏览/dev/input文件夹才发现是mouse3,当然从这一点可以看出每台机器的触摸屏设备文件都不一样,可以从/dev中的设备文件变化确定。
运行过程
最后运行$TSLIB_ROOT/tests/ts_calibrate,屏幕上出现了十字鼠标,用5点进行校准。
debian自带触摸屏硬件驱动是/lib/modules/2.6.26-2-686/kernel/drivers/input/touchscreen/usbtouchscreen.ko.