Tslib移植与分析【转】
转自:http://blog.csdn.net/water_cow/article/details/7215308
目标平台:LOONGSON-1B开发板(mips32指令集)
编译平台:x86PC--VMware6.5--Ubuntu10.04(下面简称“ubuntu系统”)
或:龙芯2F-debian6(下面简称“2F系统”)
交叉工具链:gcc-3.4.6
软件版本:Tslib1.4
0.简介(from 百度)
嵌入式设备中触摸屏使用非常广泛,但触摸屏的坐标和屏的坐标是不对称的,需要校准。校准广泛使用的是开源的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文件下)
- #!/bin/sh
- export TSLIB_ROOT=/TSLIB
- export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH
- export TSLIB_CONSOLEDEVICE=none
- export TSLIB_FBDEVICE=/dev/fb0 //frambuffer设备节点
- export TSLIB_TSDEVICE=/dev/event0 //触摸屏设备节点
- export TSLIB_TSEVENTTYPE=INPUT
- export TSLIB_CALIBFILE=/etc/pointercal //校准文件
- export TSLIB_CONFFILE=/TSLIB/etc/ts.conf //动态库加载的配置文件
- export TSLIB_PLUGINDIR=/TSLIB/lib/ts //动态库路径
- cd /TSLIB/bin
- ./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 门槛值为触摸屏的灵敏指标,一般不需要进行变动,参考参考值即可。
参考资料:
http://hi.baidu.com/dos2004/blog/item/ce330bde7fd3f45294ee37a2.html/cmtid/52987a8b3e8962dafc1f1060
http://www.armfans.net/thread-501-1-8.html
http://yueyueniao526.blog.163.com/blog/static/4934746920092311101882/
http://hi.baidu.com/wstone_h/blog/item/565d9cec901fc7d62e2e2131.html
http://blog.csdn.net/itismine/article/details/4190141
http://www.xici.net/#d105601364.htm
http://www.100ksw.com/jsj/linux/xxjc/420744.shtml
instructables.com/id/E1SRIXGI26OP9G8/
instructables.com/id/EZ0F3OWI2740HNE/
instructables.com/id/EQ4EQ1LI2740HNY/
Tslib移植与分析【转】的更多相关文章
- tslib移植笔记(1)【转】
本文转载自:https://blog.csdn.net/zijie_xiao/article/details/50740950 tslib移植笔记(1)2016-04-25 tslib背景[摘自百度] ...
- tslib移植中环境变量编辑
(1)将/usr/local/tslib下的所有文件复制到移植系统文件中/usr/local(2)编辑移植系统中/etc/profile添加触摸屏支持内容:在/etc/profile文件中设置tsli ...
- tslib移植arm及使用
测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 tslib 1.4 下载 https://gitlab. ...
- 最新QT4.8+kernel_3.2.5+uboot_2010.06+tslib移植成功-问题小结
2012-02-19 21:34:13 都是从源码下载然后自己修改,使用与TQ2440,之前uboot其实已经完成了.但是yaffs2没带起来.现在回头看来是很简单的了.bootargs参数中我设置成 ...
- 【转载】tslib移植_freescale imx6
本文来自网络:http://blog.csdn.net/xishuang_gongzi/article/details/49422879 环境:host:Ubuntu12.04target:frees ...
- [IMX6]Android6.0移植和分析
0. 知识点 中断(设备树) [IMX6]设备树分析--dts 1. 编译 Android6.0内核移植(1):分析编译日志 Android6.0内核移植(2):kernel编译内核 单独烧录kern ...
- tslib 移植问题与解决方法
问题一.执行脚本.提示出错,错误有"cann't exec aclocal" ,错误提示最多的是关于aclocal的问题,查资料显示这个文件是automake必备一个文件,好吧,那 ...
- 嵌入式Linux截图工具gsnap移植与分析【转】
转自:http://blog.csdn.net/lu_embedded/article/details/53934184 版权声明:开心源自分享,快乐源于生活 —— 分享技术,传递快乐.转载文章请注明 ...
- 移植tslib和Qt5.6到三星s5pv210开发板
tslib1.4移植 下载tslib1.4后 1.cp tslib-1.4.tar.bz2 /home/gec 2.tar jxvf tslib-1.4.tar.bz2 3.sudo -s 4.cd ...
随机推荐
- 利用VRID/VMAC实现更安全的netscaler HA故障切换
利用VRID/VMAC实现更安全的netscaler HA故障切换 virtual MAC在故障切换(failover)中的作用. 在一个HA模式中,首要节点(primary node)拥有所有 ...
- 解题:CF1009 Dominant Indices
题面 长链剖分模板题 只能按深度统计,同时比DSU on tree难理解一些,但是复杂度少个log 对每个点抓出向下延伸最长的儿子叫做长儿子.在合并时用指针继承信息,对于长儿子O(1)继承,其他儿子暴 ...
- 解题:SCOI 2005 骑士精神
题面 我把这个当做IDA*的模板题的说,说说我个人对IDA*的理解 IDA*是一个DFS,和A*一样,它也有一个乐观的估价函数.这里这个估价函数是用来限制状态的扩展的,如果当前代价加上乐观的估计都无法 ...
- ACF/PACF,残差白噪声的检验问题
关于自相关.偏自相关: 一.自协方差和自相关系数 p阶自回归AR(p) 自协方差 r(t,s)=E[X(t)-EX(t)][X(s)-EX(s)] 自相关系数ACF ...
- K8S调度之标签选择器
Kubernetes 调度简介 除了让 kubernetes 集群调度器自动为 pod 资源选择某个节点(默认调度考虑的是资源足够,并且 load 尽量平均),有些情况我们希望能更多地控制 pod 应 ...
- 使用tkinter做简单计算器
代码如下: from tkinter import * #导入tkinter库 root =Tk() #给窗体 root.title('calculator') #设置窗体名字 frm=Frame(r ...
- ElasticStack系列之十四 & ElasticSearch5.x bulk update 中重复 id 性能骤降
目前在绝对多数公司在使用 ElasticSearch 将其当做数据库使用,将多个数据库中的数据同步到 ElasticSearch 索引是非常常见的应用场景.那么自然而然就会涉及到数据频繁的新增和更新, ...
- Consul 服务发现与配置
Consule 是什么 Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性: 服务发现 Consul 的客户端可用提供一个服务,比如 api 或 ...
- 并发库应用之四 & 线程锁Lock应用
Java5的线程并发库中,提供了相应的线程锁接口Lock来帮助我们同步处理.Lock比传统线程模型中的synchronized更加面向对象,锁本身也是一个对象,两个线程执行的代码要实现同步互斥效果,就 ...
- Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function)
Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.