环境:
- 编译链: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是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波,去抖,校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口.
下载tslib源码,下载的话直接谷歌百度,下载之后然后解压,本人在root目录下解压
[root@localhost ~]# tar zxf tslib-1.4.gz
执行配置
[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 0×218): 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
编译安装
[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
修改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提供的触摸屏坐标变换插件。
把/usr/local目录下的tslib文件夹全部拷贝到开发板的根文件系统目录下,我放在/opt目录下
在根文件系统中对/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=320×240
注意:
- /etc/profile文件是指开发板根文件系统上的/etc/profile,不是PC机
- /opt/tslib是我自己存放tslib的文件路径,其他人可自定义
- /etc/pointercal是tslib/bin/ts_calibrate程序生产的
另外,TSLIB_TSDEVICE 和QWS_MOUSE_PROTO这两项需要查看自己的板子的触摸屏设备对应/dev/input/下那个文件
将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移植完成.
暂无评论
写评论