Tslib的编译和触摸屏测试

转载 2013年12月05日 15:13:15
1.编译
前段时间非常的郁闷…因为在运行生成校准程序ts_calibrate时总是出现一个错误:ts_open:Inappropriate ioctol for device
后来无数折腾后经过nanfansky指点才知道是自己板子的触摸屏驱动不支持ioctl操作,狂汗…

重新编译tslib

cd tslib-1.3

export CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc   //指定交叉编译器

./autogen.sh   //生成config文件

export PATH=/usr/local/arm/3.4.1/bin:$PATH

echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache 
      
./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no 

vi src/ts_read_raw.c  //修改内容如下

make


****************************************************
在make之前,为了支持触摸屏,打开src/ts_read_raw.c文件,查看触摸屏驱动程序数据结构,看与ts_read_raw.c结构中的哪个一样,就将代码中的  char *defaulttseventtype="UCB1x00"; 修改为 自己板子上对应的驱动结构。
因为我的驱动对应的是h3600_ts_event结构
typedef struct {
  unsigned short pressure;
  unsigned short x;
  unsigned short y;
  unsigned short pad;
} TS_RET; 
所以修改为:
   char *defaulttseventtype="H3600";  

************************************
如果不修改源代码,也可以在后面的测试中重新指定环境变量
export TSLIB_TSEVENTTYPE=H3600 //通过这个对tslib中的设备结构体定义 
*****************************************************

如果你触摸屏驱动程序支持ioctl操作,上面的configure操作中的--enable-inputapi=no]你可以删除。
然后就可以make了

*************************************************


2.测试:
2.1  我在/root/share下新建了一个tslib目录,只copy了一些需要的文件 

mkdir /root/share/tslib

mkdir /root/share/tslib/tests

mkdir /root/share/tslib/plugins

mkdir /root/share/tslib/lib

mkdir /root/share/tslib/etc


cp /root/2410s/tslib-1.3/tests/.libs/ts_* /root/share/tslib/tests/           //几个所需的测试文件,比如生成的校准文件,测试文件等等
   
cp /root/2410s/tslib-1.3/src/.libs/libts-0.0.so.0* /root/share/tslib/lib/    //几个所需的库文件
  
cp /root/2410s/tslib-1.3/src/.libs/libts.so /root/share/tslib/lib/          //几个所需的库文件           
  
cp /root/2410s/tslib-1.3/plugins/*.so /root/share/tslib/plugins/            //触摸屏插件模块库

cp /root/2410s/tslib-1.3/etc/ts.conf /root/share/tslib/etc/                 //配置文件     


2.2 连接板子
执行minicom

mount –t nfs –o nolock 192.168.0.155:/root/share /mnt/nfs使板子mount上PC,共享路径/root/share

2.3 做链接
ln -s /dev/fb/0 /dev/fb0

//帧缓冲设备板子上为/dev/fb/0,但程序默认为/dev/fb0,所以做了一个链接/dev/fb0到/dev/fb/0

ln -sf /dev/touchscreen/0raw /dev/ts

//qtopia要打开/dev/ts,你没有这个文件, 所以 dev下边应该有触摸平的节点, 
相当于, qtopia启动要找 /dev/ts, 但是你只有/dev/touchscreen/0raw,
所以你把ts链接到你的触摸屏的文件就可以了!
我得触摸屏设备节点文件为/dev/touchscreen/0raw
所以,建立链接 /dev/ts 到/dev/touchscreen/0raw
(这里要自己针对自己板子具体的文件进行设置,要不然也会报错)


2.4 指定环境变量
export QWS_MOUSE_PROTO=TPanel:/dev/touchscreen/0raw

export T_ROOT=/mnt/nfs/tslib

export LD_LIBRARY_PATH=$T_ROOT/lib  //指定tslib库文件路径

export TSLIB_CONSOLEDEVICE=none  //tslib运行需要的控制台,这里就是LCD屏幕 ,设定控制台设备为none,否则默认为/dev/tty, 

export TSLIB_FBDEVICE=/dev/fb0    //指定帧缓冲设备

export TSLIB_TSDEVICE=/dev/touchscreen/0raw         //指定触摸屏设备节点文件

export TSLIB_CALIBFILE=$T_ROOT/etc/pointercal     //指定触摸屏校准文件pintercal的存放位置


********************************************************************
注:qte的/src/kernel/qwsmouse_qws.cpp里面校准文件默认打开是在/etc下面为/etc/pointercal,
可是我得板子的根文件系统为只读,所以我放在/mnt/nfs/tslib/etc下面了,
所以在交叉编译qte的时候需要修改qwsmouse_qws.cpp
**************************************************


export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf   //指定TSLIB配置文件的位置

export TSLIB_PLUGINDIR=$T_ROOT/plugins    //指定触摸屏插件所在路径

2.5 校准
运行校准程序校准屏幕(5点校准)
cd $T_ROOT/tests

./ts_calibrate   //板子上陆续出现5个光标,点击完毕后会生成校准文件pintercal存放在$T_ROOT/etc/下面

********************************************

ts_calibrate是一个应用程序,在屏幕上画几个按钮,将用户点击后从ts驱动获得的数据和
屏上的坐标位置通过一套算法来获得校准数据写到一个校准文件里。 
******************************************


3. 可能遇到的错误分析:
在测试的时候,运行./ts_calibrate又出现了令人十分之郁闷的错误:
ts_config: Success
追查后应该是在打开ts_config中出现了错误(居然报Success,无欲至极)
在网上发现多是这个错误(这是1.4版本的错):
Couldnt load module input 
No raw modules loaded
tsconfig: Success
我没有上面那两行的错误,不过应该是一样的错误原因


那么错误就定位在 ts_config 里。并且可以进一步确定是在加载插件模块时出的错
查询了ts_load_module.c这个文件发现网上和自己的不太一样(网上公布的源码是1.4或者是0.1.1的吧)我的是1.3的
我下载了tslib-0.1.1的后重新实验 就发现错误的是这样子的(第一个错误是由ts.conf所决定的)
Couldnt load module pthres 
No raw modules loaded
tsconfig: Success


阅读了tslib 的原代码,知道了cstdlib 库里的一个函数: getenv 
是用来得到指定系统环境变量的值。是为了测试 tslib 是否得到正确的环境变量。
其环境变量默认的值在readme中有注明。


加载插件模块时出出错分析:
ts_calibrate会打开ts_config
ts_config函数里首先会读取 tslib 配置文件(ts.conf,由 TSLIB_CONFFILE环境变量指定,在tslib/etc下面),
然后根据这个文件逐个加载插件库

1.3版本的ts.conf内容为
module mousebuts
moudle variance xlimit=50 ylimit=50 pthreshold=3
moudle dejitter xdelta=1 ydelta=1 pthreshold=3
moudle linear


ts_config又会调用ts_load_module加载库。从这个函数里,程序先是得到配置文件中指定加载的模块名,
然后根据模块名构造了一个 so 文件文件名,然后调用了系统函数 dlopen 加载库!

Linux 下的加载dlopen 类似于 Windows 下动态链接库的函数:dlopen
错误就应该出在构造的库文件名是错误的---其指定的文件不存在
---从而导致 dlopen无法加载。所以才提示找不到文件或目录!

那么这样就是应该把需要的mousebuts.so variance.so dejitter.so linear.so应该复制到/tslib/plugins中
(上面修正后作了这一步,就可以拉,就不会出现错误拉)



**************************************

这里来谈一谈tslib-1.4,和1.3有一点点不一样,主要是配置文件的差别
一般来说,tsllib-1.4种一个完整的ts.conf配置文件如下所示: 
module_raw input 
module pthres 
module variance delta=30 
module dejitter delta=100 
module linear 


出现这个错误
Couldnt load module input 
No raw modules loaded
tsconfig: Success

第一行告诉tslib从linux的输入设备读取数据,需要用到input这个模块,也就是plugin目录下的input.so文件,
所以你的TSLIB_PLUGINDIR一定要配置正确,让tslib能够找到模块文件。
其他参数分别控制触摸点的连续下压、变化宽度、轨迹变化和线性校准。 
也是要把其对应的需要的几个库文件复制到/tslib/plugins中

第二行导致"No raw modules loaded."的原因有两个:
注意:一是你的ts.conf中没有指定module_raw,自带的ts.conf的所有module_raw都被注释掉了,
# Uncomment if you wish to use the linux input layer event interface
# module_raw input

# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d
# module_raw collie

# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860
# module_raw corgi

# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface
# module_raw ucb1x00

# Uncomment if you're using an HP iPaq h3600 or similar
#module_raw h3600

# Uncomment if you're using a Hitachi Webpad
# module_raw mk712

# Uncomment if you're using an IBM Arctic II
# module_raw arctic2 

你应该打开至少一个module_raw选项,有人就选择了input,去掉了它的注释
得到module_raw input

另一个原因就是你没有正确配置TSLIB_PLUGINDIR,tslib从你指定的目录中没有找到plugin需要的模块文件,
请检查你的路径和文件。

tslib下载:
tslib-1.3 

文件:
tslib-1.3.tar.bz2
大小:
32KB
下载:
下载
tslib-0.1.1 

文件:
tslib-0.1.1.tar.bz2
大小:
46KB
下载:
下载

移植 tslib 到Android 的注意事项

转载:http://blog.csdn.net/xiaochangfu/article/details/5621306 工作笔记——Tslib的编译和触摸屏测试 1.编译 前段时间非常的郁闷...
  • evilcode
  • evilcode
  • 2012年04月24日 14:53
  • 948

Linux移植随笔:对tslib库的ts_test测试程序代码的一点分析

本文是作者对tslib库的ts_test.c文件进行分析的随笔,其实tslib的几个测试程序结构差不多,譬如ts_print.c和ts_print_raw.c等。 本文并没有涉及太多概念,也没有...
  • wujiangguizhen
  • wujiangguizhen
  • 2013年12月05日 15:08
  • 1029

tslib编译与安装

sudo apt-get install automake sudo apt-get install autogen sudo apt-get install autoconf sudo apt-g...
  • wangpengqi
  • wangpengqi
  • 2013年04月03日 20:20
  • 5317

Qt5.3.0的移植安装与测试(交叉编译,用于arm,支持tslib触摸屏)

本文系统介绍了如何安装Qt5.3.0,运行armQt程序。
  • woshidahuaidan2011
  • woshidahuaidan2011
  • 2015年02月07日 16:02
  • 16541

Qt tslib校准程序

在电阻式的触摸屏上开发嵌入式应用时,Qt+tslib的组合很常见,可谓经典组合。tslib库中提供了一些测试程序,比如ts_calibrate,ts_test,可以用来对触摸屏进行校准,测试。在Qt中...
  • westlor
  • westlor
  • 2017年03月29日 15:44
  • 1209

交叉编译Qt5.2.1让其支持触摸屏多点触摸

编译环境和上一篇一样.http://blog.csdn.net/mkndg/article/details/26359055 只是qt的configure不同,文件系统的profile不同....
  • MKNDG
  • MKNDG
  • 2014年05月23日 17:25
  • 4214

linux触摸屏测试程序 ker_tslib

  • 2012年07月26日 12:35
  • 73KB
  • 下载

QT5.8交叉编译-arm架构运行!包含触摸屏tslib配置。

本来没想弄那么高的版本,一般嵌入式设备都是追求稳定并不是高版本,一般情况都是QT都是4.8版本的。但是之前群里面有小伙伴竟然不会弄,我就开始了交叉编译之路。猛然发现还是蛮痛苦的,用时5天,版子成功运行...
  • Agou_66
  • Agou_66
  • 2017年05月23日 16:53
  • 2338

LINUX设备驱动之触摸屏tslib编译使用方法

触摸屏tslib编译使用方法
  • ljmiaw
  • ljmiaw
  • 2017年05月28日 21:26
  • 156

交叉编译tslib和qt4.7.3 并在real6410上测试通过。

交叉编译4.7.3的应该有很多,qt交叉编译的资料也很多。我对自己编译过程中的心得体会和一些看法。 整个过程,应该是tslib --配置--qt---配置---测试。 (1)下载qt q...
  • commshare
  • commshare
  • 2011年08月05日 00:51
  • 2176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tslib的编译和触摸屏测试
举报原因:
原因补充:

(最多只允许输入30个字)