移植tslib库
tslib 为触摸屏驱动和应用层之间的适配层,它把应用程序中读取触摸屏 struct input_event 类型数据(这是输入设备上报给应用层的原始数据)并进行解析的操作过程进行了封装,向使用者提供了封装好的 API 接口。tslib 从触摸屏中获得原始的坐标数据,并通过一系列的去噪、去抖、坐标变换等操作,来去除噪声并将原始的触摸屏坐标转换为相应的屏幕坐标。
下载源代码,在虚拟机上交叉编译tslib库
tslib 安装目录下的文件夹介绍
bin 目录下有一些 tslib 提供的小工具,可以用于测试触摸屏。
etc 目录下有一个配置文件 ts.conf,前面给大家提到过
include 目录下只有一个头文件 tslib.h,该头文件中包含了一些结构体数据结构以及 API 接口的申明,使用 tslib 提供的 API 就需要包含该头文件。
lib 目录下包含了编译 tslib 源码所得到的库文件,默认这些都是动态库文件,也可以通过配置 tslib 工程使其生成静态库文件;
在开发板上测试 tslib
移植的最后一步就是把 tslib 安装目录下的库文件、etc 下的配置文件以及编译得到的测试工具拷贝到开发板 Linux 系统目录下.
⚫将安装目录 bin/目录下的所有可执行文件拷贝到开发板/usr/bin 目录下;
⚫将安装目录 etc/目录下的配置文件 ts.conf 拷贝到开发板/etc 目录下;
⚫ 将安装目录 lib/目录下的所有库文件拷贝到开发板/usr/lib 目录下。
接着需要配置一些环境变量,因为 tslib 工作的时候它需要依赖于一些环境变量,譬如它会通过读取环境变量来得知 ts.conf 配置文件、库文件的路径以及我们要测试的触摸屏对应的设备节点等信息。
在开发板上执行下面命令:
export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_TSDEVICE=/dev/input/event5 export TSLIB_CONFFILE=/etc/ts.conf export TSLIB_PLUGINDIR=/usr/lib/ts
TSLIB_CONSOLEDEVICE:用于配置控制台设备文件名,直接配置为 none 即可!
TSLIB_FBDEVICE:用于配置显示设备的名称,tslib 提供了手指触摸画线的测试工具,需要在 LCD 上显示,所以这里需要指定一个显示设备的设备节点。
TSLIB_TSDEVICE:用于配置触摸屏对应的设备节点,根据实际情况配置。
TSLIB_CONFFILE:用于配置 ts.conf 文件的所在路径。
TSLIB_PLUGINDIR:用于配置插件所在路径。
基于 tslib 编写触摸屏应用程序
参考ts_read.c
交叉编译ts_read.c,虚拟机下执行命令:
arm-none-linux-gnueabi-gcc -I /home/work/tools/tslib/include -L /home/work/tools/tslib/lib/ -lts -o ts_read ts_read.c
-I 选项指定头文件的路径,也就是指定 tslib 安装目录下的 include 目录,如果不指定头文件路径,编译
时将会找不到 tslib.h 头文件;-L 选项用于指定库文件的路径,也就是指定 tslib 安装目录下的 lib 目录;我
们将 tslib 编译成了动态库文件,以库文件的形式提供,编译时需要链接到这些库文件;而-l 选项则用于指定链接库(也可写成-l ts,也就是 libts.so 库文件,Linux 中,动态库文件的命名方式为 lib+名字+.so)。
将编译得到的可执行文件拷贝到开发板 Linux 系统的用户家目录下,执行应用程序,进行测试: