转自:http://forum.eepw.com.cn/thread/267828/1

嵌入式设备中触摸屏使用非常广泛,但触摸屏的坐标和屏的坐标是不对称的,需要校准。校准广泛使用的是开源的tslib。
Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。
 
1.Tslib工具交叉编译与安装
编译tslib-1.4.tar.gz步骤:
# tar  zxvf  tslib-1.4.tar.gz
# cd  tslib
# export  PATH=/opt/gcc-3.4.6/bin:$PATH
# ./autogen.sh
# ./configure  --host=mipsel-linux  --prefix=/TSLIB
# make
# make  install
注意:以上步骤使用root用户权限执行
在/TSLIB目录下生成的文件夹则是需要移植的工具包。
A)可能遇到的问题与解决方法(ubuntu系统)
下面是我在移植Tslib工具过程中所遇到的一些问题与解决方法:
问题1.执行./autogen.sh提示
./autogen.sh: 4: autoreconf:not found
解决方法:
没有安装automake 工具,
(ubuntu 10.04)用下面的命令安装:
sudo apt-get install autoconf automake libtool
 
问题2.执行./autogen.sh后出现错误信息:
libtoolize: `configure.in' does not exist
Try `libtoolize --help' for more information.
autoreconf: libtoolize failed with exit status: 1
解决方法:
#whereis libtoolize
libtoolize: /usr/bin/libtoolize /usr/local/bin/libtoolize
发现出现该错误信息是由于系统中安装了两个ilbtoolize工具链。将/usr/local/bin/libtoolize删除后问题解决(将/usr/bin/libtoolize删除后问题依然存在)。
 
问题3.执行./autogen.sh出现错误信息:
/autogen.sh: 4: autoreconf: not found 
解决方法:
安装autoconf工具包。
 
问题4.执行make后出现错误信息:“…/usr/local ”is a directory …..
解决方法:该问题出现原因是由于配置好环境变量后,但系统编译时仍无法找到工具链导致。打开新的窗口,重新配置环境变量后编译此问题解决。
 
问题5.执行make后出现错误信息:
ts_test.o: In function `main':
ts_test.c:(.text+0x3b4): undefined reference to `rpl_malloc'
fbutils.o: In function `open_framebuffer':
fbutils.c:(.text+0x2f8): undefined reference to `rpl_malloc'
collect2: ld returned 1 exit status
解决方法:
执行# ./configure  --host=mipsel-linux  --prefix=/TSLIB后,在config.h中将“#define malloc  rpl_malloc malloc”注释掉,编译通过。
 
问题6.执行make后出现错误信息:
In function ‘open’,
inlined from ‘main’ at ts_calibrate.c:227:
/usr/include/bits/fcntl2.h:51: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
In function ‘open’,
    inlined from ‘main’ at ts_calibrate.c:229:
/usr/include/bits/fcntl2.h:51: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
解决方法:
sudo vim /home/loongson/workspace/tslib/tests/ts_calibrate.c +227将cal_fd = open (calfile, O_CREAT | O_RDWR);改为
cal_fd = open (calfile, O_CREAT | O_RDWR,0666);
229行
将cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR);
改为cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR,0666);
 
B)可能遇到的问题与解决方法(2F系统):
问题1. 执行./autogen.sh后出现错误信息:
Configure.ac:25:error:possibly undefined macro:AC_DISABLE_STATIC
     If this token and others are legitimate,please use m4_pattern_allow.
     See the Autoconf documentation.
Configure.ac:26:error:possibly undefined macro:AC_ENABLE_SHARED
Configure.ac:27:error:possibly undefined macro:AC_LIBTOOL_DLOPEN
Configure.ac:28:error:possibly undefined macro:AC_PROG_LIBTOOL
解决方法:重新安装libtool到/usr目录下。
 
2.Tslib移植
Tslib移植步骤如下:
1.将安装目录TSLIB拷贝到文件系统的根目录下。
2.在文件系统/etc下创建一个空的校准文件pointercal(此步骤可省略)。执行ts_calibrate并校准完毕后,校准数据会被存放在该文件中(文件系统需可写,若是cramfs文件系统可参考备注1)。
3.修改TSLIB/etc/ts.conf文件,打开module_raw input。(注意:module_raw inut前不能有空格,参照问题2)
4.制作一个可运行脚本run.sh,内容如下:
(备注:以下环境变量的配置也可写在文件系统的/etc/profile文件下) [cpp] view plaincopyprint?

  1. #!/bin/sh
  2. export TSLIB_ROOT=/TSLIB
  3. export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH
  4. export TSLIB_CONSOLEDEVICE=none
  5. export TSLIB_FBDEVICE=/dev/fb0   //frambuffer设备节点
  6. export TSLIB_TSDEVICE=/dev/event0  //触摸屏设备节点
  7. export TSLIB_TSEVENTTYPE=INPUT
  8. export TSLIB_CALIBFILE=/etc/pointercal   //校准文件
  9. export TSLIB_CONFFILE=/TSLIB/etc/ts.conf   //动态库加载的配置文件
  10. export TSLIB_PLUGINDIR=/TSLIB/lib/ts  //动态库路径
  11. cd /TSLIB/bin
  12. ./ts_calibrate    //运行校正程序

(备注:若需在qt或SDL等图形界面使用tslib,需要另外配置其他环境变量,这里不作叙述)
5.将文件系统和带触摸屏驱动的内核烧写到目标板上,上电运行run.sh即可看到校准界面。按屏幕光标点触5次后,程序在/etc下生成pointercal坐标校准文件(/etc目录需可写)。
6.校正完成后可执行/TSLIB/bin/ts_print查看输出坐标是否正确。
 
可能遇到的问题与解决方法
下面是我在运行Tslib工具是所遇到的问题与解决方法:
问题1.运行run.sh出错,提示“ts_open:no such file or directory”
解决方法:
引起此错误的情况较多,触屏校正程序执行时会先去打开触屏的设备节点,LOONGSON-1B开发板的触屏设备节点对应为/dev/event0,查看系统环境变量是否配置正确,查看/dev/目录下是否存在触屏的设备节点event0。
 
问题2.出现:no raw modules load
tsconfig:no such file or directory
解决方法:
/TSLIB/etc/ts_conf 文件中语句modle_raw input前可能存在空格,把空格去掉。
 
问题3.结合图形界面使用tslib时,出现无法load module的错误
解决方法:
如Tslib读取触点坐标的例子程序ts_pirnt中,加载h3600.so、pthres.so、…等等模块时使用了dlopen()函数打开;在/TSLIB/etc/ts_conf配置没有错误的情况下,出现load module的错误可能是编译程序时没有把libts库加入一起编译,导致程序使用dlopen()打开.so文件出现错误所致。
 
备注
若文件系统不可写,校正后程序就无法在文件系统的/etc/目录下创建pointercal校准文件。一般根文件系统/tmp目录都设置为ramfs类型,该文件夹内可写;在根文件系统中/etc目录下,创建一个名为pointercal的空链接文件,操作如下:
#cd /etc
#ln –s ../tmp/pointercal pointercal
这样在执行校准程序后就会在/tmp目录下生成一个校准文件pointercal。
 
3.Tslib ts_calibrate校准原理
    Tslib 是触摸屏驱动和应用层之间的适配层,它从触摸屏驱动处获得原始的设备坐标数据,通过一系列的去噪、去抖、坐标变换等操作,来去除噪声并将原始的设备坐标转换为相应的屏幕坐标。tslib为应用层提供了2个主要的接口ts_open(),ts_close();ts_read()和ts_read_raw(),其中ts_read()读取校正后的相对坐标数据,ts_read_raw()读取校正前的实际坐标。
    从tslib默认的ts.conf文件中可以看出,tslib 从触摸屏驱动采样到的设备坐标进行处理再提供给应用端的过程大体如下:
  raw device --> variance --> dejitter --> linear --> application
  module         module       module      module
    校准情况下,tslib对驱动采样到的数据进行处理的一般过程如下:
    1.读取屏上5个点的坐标(Top Left,Top Right,Bottom Left,Bottom Right,Center),在进行一系列的变换,取样的5个点,实际上是包含3个不同的X值,3个不同的Y值。和scaling 值一共7个值,一起保存到/etc/pointercal中.
    2.这个/etc/pointercal文件主要是供linear插件使用。而我们每次的触摸的操作都进行多次触摸坐标变换。
 
4.Tslib配置文件ts.conf介绍
    Tslib 的配置文件ts.conf 同样是个十分重要的部分,在ts.conf 中配置了需要加载的插件、插件加载顺序以及插件的一些约束参数,这些配置参数对触摸屏的触摸效果具有十分重要的影响。
其中:pthres 为Tslib 提供的触摸屏灵敏度门槛插件 默认参数为pmin=1;
     variance 为Tslib提供的触摸屏滤波算法插件 默认参数为delta=30;
     dejitter 为Tslib 提供的触摸屏去噪算法插件 默认参数为delta=100;
      linear为Tslib 提供的触摸屏坐标变换插件。
    由于各种因素的影响,在不同的硬件平台上,相关参数可能需要调整。以上参数的相互关系为:采样间隔越大,采样点越少,采样越失真,但因为信息量少,容易出现丢笔划等丢失信息情况,但表现出来的图形效果将会越好;去噪算法跟采样间隔应密切互动,采样间隔越大,去噪约束应越小,反之采样间隔越小,去噪约束应越大。去抖算法为相对独立的部分,去抖算法越复杂,带来的计算量将会变大,系统负载将会变重,但良好的去抖算法可以更好的去除抖动,在进行图形绘制时将会得到更好的效果;灵敏度和ts 门槛值为触摸屏的灵敏指标,一般不需要进行变动,参考参考值即可。

Tslib步骤以及出现问题的解决方案【转】的更多相关文章

  1. Tslib步骤以及出现问题的解决方案(转)

    嵌入式设备中触摸屏使用非常广泛,但触摸屏的坐标和屏的坐标是不对称的,需要校准.校准广泛使用的是开源的tslib. Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波.去抖.校准等功能, ...

  2. Nginx安装步骤及本地浏览器不通解决方案,Nginx在Linux发布项目,Tomcat 与本地浏览器不通解决方案

    Nginx安装步骤及本地浏览器不通解决方案 1.将安装包放到usr/local文件夹下 2..进入local目录,解压 tar -zxvf nginx-1.17.5.tar.gz 3.进入 nginx ...

  3. IOS JPush 集成步骤(极光远程推送解决方案,支持android和iOS两个平台)

    ●  什么是JPush ●  一套远程推送解决方案,支持android和iOS两个平台 ●  它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量.开发复杂 度 ●  更多的信息,可 ...

  4. 部署解决方案包 (SharePoint Server 2010)

    转:http://technet.microsoft.com/zh-cn/library/cc262995(v=office.14).aspx 本文介绍各个解决方案包,及其在 Microsoft Sh ...

  5. C# windows服务:创建Windows服务(Windows Services)的一般步骤

    C#创建Windows服务(Windows Services) Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称.用Visual C# 创建Wind ...

  6. 成功安装SQL Server实例后 无法找到SQL Server Configuration Manager工具的解决方案

    有一次成功安装SQL Server实例后 ,但是在所有程序中无法找到SQL Server Configuration Manager工具,以下步骤是我们当时的解决方案.最后成功将这个工具的转移到了桌面 ...

  7. Xamarin NuGet 缓存包导致 already added : Landroid/support/annotation/AnimRes 问题解决方案

    在VS中打开您遇到问题的解决方案. 转到工具> NuGet包管理器>包管理器设置 - >常规,然后点击“清除所有NuGet缓存” 这应该返回一个错误,因为你有一个项目打开,但如果没有 ...

  8. SimpleDateFormat线程不安全原因及解决方案

    一. 线程不安全验证: /** * SimpleDateFormat线程安全测试 * 〈功能详细描述〉 * * @author 17090889 * @see [相关类/方法](可选) * @sinc ...

  9. 移除VS解决方案中的TFS版本控制

    项目每次会弹出提示 正在打开的解决方案已绑定到以下 Azure DevOps Server 上的源代码管理: xxxxx.是否要联系此服务器以尝试启用源代码管理集成? 移除VS解决方案中的TFS版本控 ...

随机推荐

  1. NOIP2011

    DAY1 铺地毯 (carpet.cpp/c/pas) 模拟 倒序离线处理 program carpet; var l,w:..,..] of longint; n,i,a,b,g,k,x,y:lon ...

  2. MT【142】Bachet 问题,进位制

    问题: 满足下面两种限制条件下要想称出40以内的任何整数重量,最少要几个砝码: i)如果砝码只能在天平的某一边; ii)如果砝码可以放在天平的两边. 提示:对于 i)先证明如下事实: \[\textb ...

  3. 【POJ2411】Mondriaan's Dream(轮廓线DP)

    [POJ2411]Mondriaan's Dream(轮廓线DP) 题面 Vjudge 题解 这题我会大力状压!!! 时间复杂度大概是\(O(2^{2n}n^2)\),设\(f[i][S]\)表示当前 ...

  4. 【bug】Could not find method compile() 解决

     集成第三方库出现 Error:Could not find method compile() for arguments [com.android.support:design:23.4.0] on ...

  5. Android proguard-rules.pro 混淆模板

    在../sdk/tools/proguard/目录下,其中包含了android最基本的混淆 ..\proguard-rules.pro  混淆文件配置模板: ############# 混淆模板 ## ...

  6. Android Studio & eclipse 调试技巧

    如上图设置多个断点,开启调试.想跨断点移动到下一个断点,点击如下图1箭头,程序将运行一个断点到下一个断点之间需要执行的代码.如果后面代码没有断点,再次点击该按钮将会执行完程序.点击箭头2指向的按钮,可 ...

  7. MySQL基本了解与使用

    MySQL的相关概念介绍 MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格 ...

  8. 使用spring cache和ehcache

    一.spring cache Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该 ...

  9. RF - selenium - 常用关键字

    1. 打开浏览器 Open Browser    htpp://www.testclass.net    chrome 2. 关闭浏览器 Close Browsers Close All Browse ...

  10. 图像处理之色彩转换(CCM)

    1 色彩校正原理 人眼对色彩的识别,是基于人眼对光谱存在三种不同的感应单元,不同的感应单元对不同波段的光有不同的响应曲线的原理,通过大脑的合成得到色彩的感知.  一般来说,我们可以通俗的用 RGB三基 ...