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 ...
随机推荐
- Python学习---基础篇
###打开文件并打印: #!/usr/bin/python3 f = open('F://myproject/test.txt', encoding='utf-8',mode='r') content ...
- python使用selenium、PhantomJS获得网站cookie信息#windows
首先python安装selenium,命令行中输入 pip install selenium 在执行代码如下代码时出现错误 driver=webdriver.PhantomJS() 错误如下 sele ...
- 【刷题】BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- 题解【CF103D Time to Raid Cowavans】
Description 给一个序列 \(a\) ,\(m\) 次询问,每次询问给出 \(t, k\) .求 \(a_t + a_{t+k}+a_{t+2k}+\cdots+a_{t+pk}\) 其中 ...
- centos7 U盘安装卡在 starting dracut initqueue hook解决办法
U盘安装centos7启动过程中出现: [ok] Reached target Basic System 或者 [ok] starting dracut initqueue hook 到下一行就不 ...
- Python【操作EXCEL文件】
#Python中,对EXCEL文件的读写操作需要安装.导入几个第三方模块#xlrd模块:只能读取EXCEL文件,不能进行写操作#xlwt模块:只能进行写操作,但是不能是覆盖写操作(也就是修改Excel ...
- Git7:使用Gitlab管理远程仓库
目录 1.安装 2.gitlab基本配置 3.gitlab的邮件配置 3.1.使用本地的postfix发送邮件 3.2.使用邮件发送模板 3.3.使用腾讯企业邮箱配置发送邮件 3.4.使用163邮箱来 ...
- OpenStack 认证服务 KeyStone连接和用户管理(四)
连接keystone两种方式: 一种使用命令 一种使用环境变量 1.通过环境变量方式连接keystone(适合在初始化场景使用) 配置认证令牌环境变量 export OS_TOKEN=07081849 ...
- np.repeat函数
np.repeat用法 觉得有用的话,欢迎一起讨论相互学习~Follow Me np.repeat用于将numpy数组重复 一维数组重复三次 import numpy as np # 随机生成[0,5 ...
- Vue.js学习笔记(一)
其它前端主流框架可以做的事,Vue.js几乎都可以做, nuxt框架:可以实现vue的服务器端渲染, weex:使用vue语法编写原生app. 基础内容 基础语法 MVVM设计模式 前端组件化 vue ...