目录
前言
一、下载tslib
二、编译和安装
1.编写编译脚本
2.编译时遇到的问题
三、移植到目标机
1.tslib文件移植
2.修改ts.conf内容
3.配置环境变量
4.测试
总结
前言
tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能。通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。由于使用QT作为上层应用的交互,所以需要移植tslib。
本次移植tslib的软硬件环境环境如下:
主机环境:Ubuntu 18.04.4 LTS
编译环境:arm-linux-gcc-4.3.2
目标机:飞凌-OK6410-A
目标机内核:linux 3.0.1
一、下载tslib
在github下载tslib-1.4 (tslib-1.4下载地址)获取到tslib-1.4.tar.gz安装源文件。
二、编译和安装
1.编写编译脚本
新建自动编译脚本mk_tslib.sh,内容如下:
#!/bin/sh
tar -zxvf tslib-1.4.tar.gz
cd tslib-1.4
./autogen.sh
mkdir _install
echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/_install
make
make install
2.编译时遇到的问题
问题一、"SYN_MT_REPORT"未声明
详细报错代码如下:
input-raw.c: In function 'check_fd':
input-raw.c:198: error: 'SYN_MT_REPORT' undeclared (first use in this function)
input-raw.c:198: error: (Each undeclared identifier is reported only once
input-raw.c:198: error: for each function it appears in.)
input-raw.c: In function 'ts_input_read_mt':
input-raw.c:484: error: 'SYN_MT_REPORT' undeclared (first use in this function)
Makefile:826: recipe for target 'input-raw.lo' failed
make[1]: *** [input-raw.lo] Error 1
make[1]: Leaving directory '/home/daniel/tool/tslib/tslib-1.4/plugins'
Makefile:481: recipe for target 'install-recursive' failed
make: *** [install-recursive] Error 1
解决方法:
打开内核源码/include/linux/input.h,复制SYN_MT_REPORT相关代码添加到tslib-1.4/src/tslib.h中,代码如下:
/*
* Synchronization events.
*/
#define SYN_MT_REPORT 2
问题二、"ABS_MT_SLOT"未声明
详细报错代码如下:
ts_test_mt.c: In function 'main':
ts_test_mt.c:138: error: 'ABS_MT_SLOT' undeclared (first use in this function)
ts_test_mt.c:138: error: (Each undeclared identifier is reported only once
ts_test_mt.c:138: error: for each function it appears in.)
Makefile:517: recipe for target 'ts_test_mt.o' failed
make[2]: *** [ts_test_mt.o] Error 1
make[2]: Leaving directory '/home/daniel/tool/tslib/tslib-1.4/tests'
Makefile:481: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/daniel/tool/tslib/tslib-1.4'
Makefile:390: recipe for target 'all' failed
make: *** [all] Error 2
解决方法:
打开内核源码/include/linux/input.h,复制ABS_MT_XXX相关代码添加到tslib-1.4/src/tslib.h中,代码如下:
/** Absolute axes*/
#define ABS_MT_SLOT 0x2f /* MT slot being modified */
#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
#define ABS_MT_DISTANCE 0x3b /* Contact hover distance */// adds by yourself
#define ABS_MT_TOOL_X 0x3c /* Center X tool position */
#define ABS_MT_TOOL_Y 0x3d /* Center Y tool position */
编辑mk_tslib.sh,注释“tar -zxvf tslib-1.4.tar.gz”来取消解压操作,代码如下:
#!/bin/sh
#tar -zxvf tslib-1.4.tar.gz
cd tslib-1.4
./autogen.sh
mkdir _install
echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/_install
make
make install
重新运行mk_tslib.sh,将在tslib-1.4/_install目录下生成bin、etc、include和lib文件夹,查询_install文件夹如下:
root@ubuntu:~/tool/tslib# ls tslib-1.4/_install/ -all
total 24
drwxr-xr-x 6 root root 4096 Jun 2 14:57 .
drwxrwxr-x 11 root root 4096 Jun 2 14:57 ..
drwxr-xr-x 2 root root 4096 Jun 2 14:57 bin
drwxr-xr-x 2 root root 4096 Jun 2 14:57 etc
drwxr-xr-x 2 root root 4096 Jun 2 14:57 include
drwxr-xr-x 3 root root 4096 Jun 2 14:57 lib
三、移植到目标机
1.tslib文件移植
将_install文件夹复制到目标机的/usr/local下,将_install重命名为tslib,tslib移植完成。
2.修改ts.conf内容
打开文件/etc/ts.conf,定位至#module_raw input,把行首的注释符去掉,且行首不要留有空格。
如下图:
# Uncomment if you wish to use the linux input layer event interface
module_raw input
3.配置环境变量
打开文件/etc/profile,添加tslib配置信息,如下图:
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib
4.测试
重启系统,进入/usr/local/tslib/bin目录,执行触摸屏校准程序ts_calibrate,生成/etc/pointercal。
./ts_calibrate
在/usr/local/tslib/bin目录,执行触摸屏测试程序ts_test,可在屏幕上拖动十字架或画画,如下图:
总结
移植tslib后需要配置环境变量使tslib生效,通过执行触摸屏校准和测试程序来检验移植成功与否。