嵌入式开发之tslib-1.4移植

目录

前言

一、下载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生效,通过执行触摸屏校准和测试程序来检验移植成功与否。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值