交叉编译tslib1.4过程详述

http://hi.baidu.com/125580956/item/25612f9e6ccb85c2b6253119


交叉编译tslib1.4过程详述,配合QT4.5.3成功在Mini2440运行成功(续)

补充:tslib环境变量配置说明:

在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪声的缘故,触摸屏容易存在点击不准确、有抖动等问题。
Tslib 是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。在 Qtopia 4.*版本中,默认的Tslib版本为Tslib 1.4。在Qtopia 2.*版本中,默认的Tslib版本为Tslib 1.3。

在嵌入式中,由于触摸屏的种类多样、质量不一,采用Tslib 的参考配置往往无法获得较好的触摸屏触摸效果,同样需要经过大量的测试才能得到满意的配置参数,恶劣情况下,甚至需要对Tslib 的算法进行进一步的优化。下面就Tslib 的环境变量、配置文件等进行简要的介绍。

1)环境变量
为了实现Tslib 的正确运行,需要对如下的Tslib 的环境变量进行配置:

2)TSLIB_TSDEVICE //触摸屏设备文件名
Default (no inputapi): /dev/touchscreen/ucb1x00
Default (inputapi): /dev/input/event0
TSLIB_CALIBFILE //校准的数据文件,由ts_calibrate 校准程序生成
Default: ${sysconfdir}/pointercal
TSLIB_CONFFILE //配置文件名
Default: ${sysconfdir}/ts.conf
TSLIB_PLUGINDIR //插件目录
Default: ${datadir}/plugins
TSLIB_CONSOLEDEVICE //控制台设备文件名
Default: /dev/tty
TSLIB_FBDEVICE //FrameBuffer设备名
Default: /dev/fb0

3)       以上环境变量在实际开发中的实际配置可以根据实际情况决定。

4)       2)配置文件
除了环境变量以外,Tslib 的配置文件ts.conf 同样是个十分重要的部分,在ts.conf 中配置了需要加载的插件、插件加载顺序以及插件的一些约束参数,这些配置参数对触摸屏的触摸效果具有十分重要的影响。
下面是Tslib 1.4 中的ts.conf 的参考配置:

5)# 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 pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

6)       其中 pthres 为Tslib提供的触摸屏灵敏度门槛插件;variance 为Tslib提供的触摸屏滤波算法插件;dejitter 为Tslib提供的触摸屏去噪算法插件;linear 为Tslib 提供的触摸屏坐标变换插件。

7)       tslib 的实际配置:

8)       去掉module_raw input前面的#号,同时把其他#号注释项全部删除,以免给后来的操作带来麻烦。我的最终ts.conf 内容为:

module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

 

在执行校正程序时(如./ts_calibrate或./ts_test)可能出现的错误:

1:运行./ts_test

No raw modules loaded.

 ts_config: No such file or directory

出现这样的错误提示,可以很明确的告诉你,你的库缺少了一些*.so文件()

ts.conf文件中应该有一行(在配置文件上有很多的raw,但是全部是被注释掉的,但是至少需要打开一个。因为触摸屏是使用input子系统的,所以将module_raw input前面的#号去掉,并且前面不留空格,千万别留空格啊,有一个网友就是因为这个小小的空格搞到他郁闷了很久,幸好我比他醒目,绝不留空格,哈哈。。。。)

module_raw input

/nand1/tslib-1.4/lib/ts目录下应该有个文件叫
input.so(这个文件比较重要,我第二次移植过程中不小心把input裁剪掉了,当插件库$TSLIB_ROOT/lib/ts目录下没有这个文件时会提示如下错误)

No raw modules loaded.

 ts_config: No such file or directory

2:在做测试的时候,运行./ts_calibrate出现了tslib-1.4经典的错误:(出现这个错误你不要沮丧,反而应该高兴,说明你之前的步骤已经全部没错了,只要把这个经典的错误解决就万事大吉了。很庆幸,这个错误有很多网友都已经有办法解决了)

经典错误:

Couldnt load module input

No raw modules loaded

tsconfig: Success

错误分析:那么错误就定位在 ts_config 里。并且可以进一步确定是在加载插件模块时出的错。

阅读了tslib 的源代码,知道了cstdlib 库里的一个函数: getenv

是用来得到指定系统环境变量的值。是为了测试 tslib 是否得到正确的环境变量。

其环境变量默认的值在readme中有注明。

加载插件模块时出出错分析:

ts_calibrate会打开ts_config

ts_config函数里首先会读取 tslib 配置文件(ts.conf,由 TSLIB_CONFFILE环境变量指定,在tslib/etc下面),

然后根据这个文件逐个加载插件库,1.4版本的ts.conf内容为:

Module_raw input   (读readme文件可以找到这个字符串)

module pthres pmin=1

module variance delta=30

module dejtter delta=100

module linear

ts_config又会调用ts_load_module加载库。从这个函数里,程序先是得到配置文件中指定加载的模块名,

然后根据模块名构造了一个 so 文件文件名,然后调用了系统函数 dlopen 加载库!

Linux 下的加载dlopen 类似于 Windows 下动态链接库的函数:dlopen

错误就应该出在构造的库文件名是错误的---其指定的文件不存在

---从而导致 dlopen无法加载。所以才提示找不到文件或目录!

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

3: [~#]./ts_calibrate.sh

此时会加载tslib中的插件模块input.so,且会抛出Segement fault的错误。在友善之臂的论论上看到使用交叉编译arm-linux-gcc经常会遇到这个问题,不过论坛上也给出了解决办法。仔细分析tslib的源码之后,得知在加载

input.so时,ts_attach.c中__ts_attach_raw()函数中使用NULL指针,导致Segement fault产生。经过修改过,重新

编译tslib,再运行ts_calibrate.sh,一切正常。ts_attach.c中__ts_attach_raw()中的修改如下:
#if 0
 for(next = ts->list, prev=next; next != NULL && next != prev_list; next = prev->next, prev =

next)
 {
  DEBUG("LIUHAO:: %s %s:count=%d prev_list=%x prev=%x next=%x prev->next=%x\n",

__FILE__, __FUNCTION__, count++, prev_list, prev, next, prev->next);
  ;
 }
#else
 for(next = ts->list, prev=next; next != NULL && next != prev_list;)
 {
  DEBUG("LIUHAO:: %s %s:count=%d prev_list=%x prev=%x next=%x prev->next=%x\n",

__FILE__, __FUNCTION__, count++, prev_list, prev, next, prev->next);
  next = prev->next;
  if(next == NULL)
   break;
  else
   prev = next;
 }
#endif
至此,tslib所有工作已经完成,ts_calibrate会在~/ts-release/etc/目录下生成pointercal文件。pointercal为触摸屏校准后生成的文件,确保QT运行时,触摸屏工作正常。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zengxiaosa/archive/2011/05/17/6428068.aspx


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值