tslib编译使用方法(selected device is not a touchscreen I understand)

出现这个问题花了我两个小时的时间才去解决掉,原因修改版本后忘了重新编译LCD。


下面是我一直tslib 的详细步骤:

tslib-1.4.tar.gz源码下载地址:tslib-1.4.tar.gz

# tar -xzvf tslib-1.4.tar.gz 

# cd tslib

# ./autogen.sh
mkdir tmp
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache    (必须加,具体原因看文章最后)
./configure --host=arm-linux --enable-inputapi=no --cache-file=arm-linux.cache --prefix=$(pwd)/tmp

make && make install


make install后,会在tmp目录生成4个子目录:
include  lib  etc  bin
生成的库位于lib中,该目录下还有一个子目录ts,它包含了许多校准用到的库(如input.so等)。

etc下的ts.conf为配置文件,bin目录下为校准、测试工具(如校准的ts_calibrate,测试用的ts_test)。

然后把这个四个文件复制到根文件系统的根目录下。


配置文件ts.conf内容如下:
module_raw input     (去掉前面的# 和空格,其他的保持不变)
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
module_raw有许多种,这里只使用input(即Linux的input子系统,设备文件名称为/dev/event1)/dev/event0为触模屏的设备节点

vi /etc/profile 中添加如下命令

export TSLIB_TSDEVICE=/dev/event0         指定触屏设备
export TSLIB_CALIBFILE=/etc/pointercal    指定触摸屏校准文件 pintercal 的存放位置 
export TSLIB_CONFFILE=/etc/ts.conf         指定 TSLIB 配置文件的位置
export TSLIB_PLUGINDIR=/lib/ts/               指定触摸屏插件所在路径
export TSLIB_CONSOLEDEVICE=/dev/tty1 设定控制台设备为 none ,否则默认为 /dev/tty ,这样可以避免出现open consoledevice: No such file or directory KDSETMODE: Bad file descriptor  的错误 
export TSLIB_FBDEVICE=/dev/fb0             指定帧缓冲设备 


当我执行 ts_calibrate 出现了如下错误:

selected device is not a touchscreen I understand

在网上找了找到文章后发现原因是内核用的EV_VERSION为0x0100001,交叉编译工具EV_VERSION为0x0100000

把这两个修改成一样就可以了。(其实正解也是这样

方法一:

我修改# vi include/linux/input.h  EV_VERSION为0x0100000,重新编译内核还是出现相同的错误,这儿花了我大把的时间,后来才发现我这个 EV_VERSION宏改变了,而我的LCD驱动程序却没有重新编译,我就在lcd驱动程序中随便移动一下,就是为了网编译器检测到我这个驱动是修改过的,然后lcd驱动也重新编译了,再次测试就OK了,心碎啊,花了两个小时时间才解决掉。

方法二:

交叉编译中修改/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/input.h中EV_VERSIN为0x0100001

提示下这个交叉编译下的input.h有可能你的路径跟我的不一样,你可以在你交叉编译路径下用如下命令搜索:

find -name "input.h"


在make时候可能出现如下错误:

ts_test.o(.text 0x218): 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" >arm-linux.cache


上一篇:SVN:服务器端设置提交时必须填写注释


下一篇:SpringBoot如何整合ElasticSearch? | 带你读《SpringBoot实战教程》之四十