出现这个问题花了我两个小时的时间才去解决掉,原因修改版本后忘了重新编译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
include lib etc bin
生成的库位于lib中,该目录下还有一个子目录ts,它包含了许多校准用到的库(如input.so等)。
etc下的ts.conf为配置文件,bin目录下为校准、测试工具(如校准的ts_calibrate,测试用的ts_test)。
然后把这个四个文件复制到根文件系统的根目录下。
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