转自: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. Ubuntu和Windows相互共享文件夹

    一.Ubuntu访问Windows共享文件夹 1.对需要共享文件夹右击->属性->共享 2.选择要与其共享的用户,选择好用户点击有点添加按钮添加,然后点击下方的共享按钮 3.完成共享 4. ...

  2. Java并发编程:线程池

    一.为什么使用线程池 使用线程的时候直接就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降 ...

  3. Day22-Django之缓存

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...

  4. 遇到问题----gradle-----myeclipse的gradle插件导入项目报错nsupported major.minor version 51.0

    装好了gradle插件之后 想要导入gradle类型的项目,然后在 build model的过程中发现: 报错nsupported major.minor version 51.0 查了下发现是jdk ...

  5. INSTALL_FAILED_TEST_ONLY: installPackageLI. 问题解决

    FAQ: Installation failed with message Failed to finalize session : INSTALL_FAILED_TEST_ONLY: install ...

  6. (转)编码规范系列(一):Eclipse Code Templates设置

    背景:长久以来,对java编程中的注释不甚理解.再次学习<疯狂JAVA讲义>基础,深深的感到自己基本功的不牢固.所以要做到事无巨细,好好修炼. 认识注释 常识 注释的作用: 回顾原有的代码 ...

  7. 01 C++ 多线程入门实例

    1.可复用的完整实例 #include <iostream> #include <thread> #include <mutex> using namespace ...

  8. VS项目属性的一些配置项的总结(important)

    以下内容为“原创”+“转载” 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系,假设新建一个项目ssyy,解决方案起名fan ...

  9. git 第一次关联远程仓库

    1.首先需要先git pull origin master 2.然后合并两个无关的仓库 git pull origin master --allow-unrelated-histories

  10. hbase系列之:独立模式部署hbase

    一.概述 在上一篇博文中,我简要介绍了hbase的部分基础概念,如果想初步了解hbase的理论,可以参看上一篇博文 hbase系列之:初识hbase .本博文主要介绍独立模式下部署hbase及hbas ...