首页 > 代码库 > 嵌入式(触摸板库tslib的编译和配置)

嵌入式(触摸板库tslib的编译和配置)

                                               2016-10-25                                                林世霖                                                秘籍酷                                                                    

技术分享                                            

作为基本输入设备,触摸板几乎是交互式嵌入式系统的标配。当我们知道了可以通过设备节点读取触摸板数据后,我们需要进一步优化这些直接获取的原生数据,比如去抖、消噪、校准等。

技术分享
优化触摸板的 raw (原生)数据是一项十分复杂的算法任务,涉及诸如矩阵运算、行列式等高等数学,一般需要有比较扎实的数学背景的算法工程师来做,他们的其中一项杰出成果,便是今天要介绍的 tslib 库了。


没有 使用 tslib 库之前,操作触摸板设备的代码样子是这样的:(丑翻天!!

技术分享


经过 tslib 库整容之后,操作触摸板的代码是这样子的:(美轩完!!

技术分享

可以看到,使用了 tslib 库之后不仅得到了各种牛逼算法的保驾护航,而且代码更加简练,逻辑更加清晰,整个人瞬间变美变帅有没有!


因此,投资点时间来搞 tslib 库是值得的,下面以粤嵌的嵌入式课程环境为例(含粤嵌的GEC210开发板),具体操作步骤如下:

1,上网搞个源码库,如果你可爱到不会用百度,没关系,戳我下载(http://download.csdn.net/detail/vincent040/9662825)。

2,将源代码丢到Ubuntu,并通过以下命令解压到Ubuntu的家目录下:

tar  xjvf  tslib-1.4.tar.bz2  -C  ~

3,进入源码顶层目录,依次执行如下命令:

mkdir  ~/tslib

./configure  --prefix=/home/xxx/tslib  --host=arm-none-linux-gnueabi

make

make install


当然,我以我多年栽坑经验告诉你,以上指令哪些地方需要注意,以便节约你宝贵的生命,没错请叫我雷锋,林雷锋。

A) --prefix= 后面的路径就是你要安装 tslib 库的路径,墙裂建议设置为家目录下的空目录(比如~/tslib),因为如果设置系统其它目录的话,后期 make install 的时候会让你解决权限的问题,当你自作聪明地使用sudo的时候,系统却又可能会抱怨找不到工具链,因此除非你是 Ubuntu科学家,对系统环境变量了如指掌,否则不要用小白的身份去作死,乖乖将 --prefix 指定为 ~/tslib 即可。

B) --host= 后面就是你工具链的前缀,注意别眼花写错了。

C) make的时候,一般会出现如下错误:

技术分享
这个问题怎么解决呢?莫方,我看你有缘,今日将祖传秘方传授与你(默默承认我这年龄不应有的智慧和大度):那就是,将源码顶层目录下的 config.h文件的第181行,删除!然后重新 make ,问题解决。


最后,你将会在 /home/xxx/tslib 下发现如下目录:

技术分享


接下来,你需要想办法,将这一堆文件搞到开发板里面去,一般先将它们打包压缩,然后通过串口或者网络协议传输到开发板,然后在开发板中解压即可。


库都拷贝到了开发板,是不是就万事大吉了呢?非也,你辛辛苦苦干的这些活儿,开发板系统是无知无觉的,你还必须这么做:


1,将 tslib/etc/ts.config 中的第2行,由原来这个样子:

技术分享
改成这个样子

技术分享
没错,就是把第 2 行前面的井号 # 和空格删除,注意,我说井号和空格,我没说井号,好之为之。


2,在开发板系统的 /etc/profile 文件中,增加如下内容(假设你把 tslib 库放到了开发板的根目录下,如果不是,以下路径请进行相应的修改):

export TSLIB_ROOT=/tslib/lib

export TSLIB_TSDEVICE=/dev/event0

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_CONFFILE=/tslib/etc/ts.conf

export TSLIB_PLUGINDIR=/tslib/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CALIBFILE=/tslib/calibration

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tslib/lib

 

解释一下上面的环境变量:

TSLIB_ROOT 指明TSLIB库在开发板中的具体位置,要以实际情况为准。

TSLIB_TSDEVICE 指明开发板触摸屏的设备节点文件名称。

TSLIB_FBDEVICE 指明开发板LCD的设备节点文件名称。

TSLIB_CONFFILE 指明TSLIB库的配置文件的具体位置,要以实际情况为准。

TSLIB_PLUGINDIR 指明TSLIB库的插件模块的具体位置,要以实际情况为准。

TSLIB_CONSOLEDEVICE 指明终端名称,none意为让系统自动匹配。

TSLIB_CALIBFILE 指明校正文件的位置,该文件在执行ts_calibrate之后自动生成。

LD_LIBRARY_PATH 是开发板系统的动态库链接路径

 

3,最后的最后,重启开发板,让系统重新读取 /etc/profile 文件的内容,有必要的话执行以下 /tslib/bin/ts_calibrate 校准屏幕,大功告成(再再一次默默承认这个年纪不该有的智慧)!



嵌入式(触摸板库tslib的编译和配置)