[原创]Real210 交叉编译tslib,嵌入式系统触摸屏校准程序,移植tslib

环境:
编译链:arm-linux-gcc version 4.4.1
busybox版本:busybox-1.15.1
tslib版本:tslib-1.4
QTE版本:qt-everywhere-opensource-src-4.7.3
Linux发行版:Fedora Core release 6 (Zod)

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

1:下载tslib源码,下载的话直接谷歌百度,下载之后然后解压,本人在root目录下解压

[root@localhost ~]# tar zxf tslib-1.4.gz

2:执行配置

[root@localhost tslib]# ./autogen.sh

 

[root@localhost tslib]# echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache

上面这句echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache必须加,如果不加的话,会在后边make产生如下错误:
ts_test.o(.text 0x218): In function `main':
: undefined reference to `rpl_malloc'
在当前目录查找了rpl_malloc,发现configure里有#define malloc rpl_malloc一行.分析configure 脚本相关的代码,原来是ac_cv_func_malloc_0_nonnull引起的,OK我们不让它检查了,产生一个cache文件arm-linux.cache,欺骗configure:
echo "ac_cv_func_malloc_0_nonnull=yes" >$ARCH-linux.cache

上述执行之后,我们就配置安装的环境以及安装目录,这里为:/usr/local/tslib
[root@localhost tslib]# CC=arm-linux-gcc ./configure --host=arm-linux --cache-file=arm-linux.cache -prefix=/usr/local/tslib

3:编译安装

[root@localhost tslib]# make
[root@localhost tslib]# make install

那么便可以在/usr/local/tslib目录下产生/bin、/etc、/include、/lib 4个文件夹,如下:

[root@localhost tslib]# ls
bin etc include lib
[root@localhost tslib]# pwd
/usr/local/tslib

4:修改tslib目录下/etc/ts.conf文件,删除其中文件,改为:

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

第一行是tslib从linux的输入设备读取数据时需要用到的模块,这里指定的模块为input,具体需要用到哪个模块,需要参考其他数据。
第二行的pthres为Tslib提供的触摸屏灵敏度门槛插件。
第三行的variance为Tslib提供的触摸屏滤波算法插件。
第四行的dejitter为Tslib 提供的触摸屏去噪算法插件。
第五行linear为Tslib提供的触摸屏坐标变换插件。

5:把/usr/local目录下的tslib文件夹全部拷贝到开发板的根文件系统目录下,我放在/opt目录下
6:在根文件系统中对/etc/profile文件设置tslib环境变量:

[root@localhost fs_mini]# vi /etc/profile

添加内容如下:

# 指定tslib主目录位置
export TSLIB_ROOT=/opt/tslib
# 指定触摸屏设备
export TSLIB_TSDEVICE=/dev/event1
# 指定触摸屏校准文件pointercal存放位置
export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal
# 指定TSLIB配置文件的位置
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
# 指定触摸屏插件所在路径
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
# 指定帧缓冲设备
export TSLIB_FBDEVICE=/dev/fb0
# 设定控制台设备为none
# 否则默认为/dev/tty,
# 这样会出现”open consol device:No such file or directory KD…..”的错误
export TSLIB_CONSOLEDEVICE=none
# 指定TSLIB的库文件路径
export LD_LIBRARY_PATH=/opt/tslib/lib
# 指定触摸屏设备
export QWS_MOUSE_PROTO=Tslib:/dev/event0
export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"
export QWS_SIZE=320x240

注意
(1)/etc/profile文件是指开发板根文件系统上的/etc/profile,不是PC机;
(2)/opt/tslib是我自己存放tslib的文件路径,其他人可自定义;
(3)/etc/pointercal是tslib/bin/ts_calibrate程序生产的,

另外,TSLIB_TSDEVICE 和QWS_MOUSE_PROTO这两项需要查看自己的板子的触摸屏设备对应/dev/input/下那个文件

7:将tslib移植入开发板,在开发板终端上运行:

cd /opt/tslib/bin
./ts_calibrate

之后用手指点击液晶屏上的“+”,如此5次之后,便会自动在/opt/tslib/etc下生成pointercal文件

8:设置链接,在QTE开发中,Qt程序要去/etc目录下读取这个pointercal的文件,假如没有的话,那么未来可能报如下错:
[h@/opt/QtEmbedded-4.7.3-arm/demos/mainwindow]# ./mainwindow -qws
[ 52.824751] s3cfb s3cfb: [fb2] already in FB_BLANK_UNBLANK
Could not read calibration: "/etc/pointercal"

因此,必须进行一个软连接:

ln -s /opt/tslib/etc/pointercal /etc/pointercal

这样就不会出现上述问题了.

至此,tslib1.4移植完成.

参考1:http://www.cnblogs.com/xueyang/archive/2012/04/25/2470015.html
参考2:http://blog.csdn.net/yf210yf/article/details/6701359
参考3:http://johnylai.i.sohu.com/blog/view/98048548.htm
参考4:http://blog.csdn.net/sunhy1021/article/details/5106635
参考5:http://blog.163.com/zhuandi_h/blog/static/180270288201222310291262/
参考6:

http://read.pudn.com/downloads78/sourcecode/embed/296243/%E7%94%A8tslib%E6%A0%A1%E5%87%86%E8%A7%A6%E6%91%B8%E5%B1%8F%EF%BC%88%E6%88%90%E5%8A%9F%EF%BC%89.rtf__.htm
参考7(建立触摸屏):http://www.cnblogs.com/hicjiajia/archive/2012/07/10/2582642.html

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: