Tslib使用

Tslib安装编译过程

1.下载TsLib 1.4

2.安装编译所需文件
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool

3.编译:
tar xzf 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 –cache-file=arm-linux.cache –prefix=$(pwd)/tmp
修改 tslib/etc/ts.conf第1行(去掉#号和第一个空格):
module_raw input
改为:
module_raw input

make
make install

4.安装:
①将编译生成的.so库文件复制到开发板/lib目录下
cd tmp
cp * -rf /nfsroof/lib
②为了方便以后使用“-lts”时,交叉编译工具arm-linux-gcc能够找到对应的.so文件,应该讲生成的库文件也复制一份到交叉编译工具安装目录下的/lib目录,同时将/include目录也复制一份到对应的工具链的/include下。
但是貌似一般网上编译好的工具链里面都自带tslib动态库,除非版本不一致,这时候这一步是可以省略的。

5.配置环境变量
在开发板终端中修改profile文件:
vim /etc/profile
添加:
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0

安装完毕重新启动开发板,使环境变量生效

使用过程

1.先安装lcd与touchscreen模块:
insmod cfbfillrect.ko
insmod cfbcopyarea.ko
insmod cfbimgblt.ko
insmod lcd.ko
insmod touchscreen.ko

2.运行ts_calibrate

常见问题

运行ts_calibrate很可能终端显示:
selected device is not a touchscreen I understand
此时点击屏幕没有反应

在tslib源码中搜索这个打印信息提示
在/plugins/input-raw.c文件中的check_fd(),找到判断条件:

if (! ((ioctl(ts->fd, EVIOCGVERSION, &version) >= 0) &&
   (version == EV_VERSION) &&
   (ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit)*8), &bit) >= 0) &&
   (bit & (1 << EV_ABS)) &&
   (ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit)*8), &absbit) >= 0) &&
   (absbit & (1 << ABS_X)) &&
   (absbit & (1 << ABS_Y)) && (absbit & (1 << ABS_PRESSURE)))) 
{
      fprintf(stderr, "selected device is not a touchscreen I understand\n");
      return -1;
}

在这里可以添加一些打印语句,找到具体是哪一个参数导致错误:

fprintf(stderr,"EV_VERSION=0x%x\r\n", EV_VERSION);
fprintf(stderr,"version=0x%x\r\n\n", version);
fprintf(stderr,"EV_ABS=%d\r\n",EV_ABS);
fprintf(stderr,"bit=0x%x\r\n",bit);
fprintf(stderr,"bit & (1 << EV_ABS)=0x%x\r\n\n", (bit & (1 << EV_ABS)));
fprintf(stderr,"absbit=0x%x\r\n",absbit);
fprintf(stderr,"ABS_X=%d\r\n", ABS_X);
fprintf(stderr,"ABS_Y=%d\r\n", ABS_Y);
fprintf(stderr,"ABS_PRESSURE=%d\r\n", ABS_PRESSURE);
fprintf(stderr,"absbit & (1 << ABS_X)=0x%x\r\n", (absbit & (1 << ABS_X)));
fprintf(stderr,"absbit & (1 << ABS_Y)=0x%x\r\n", (absbit & (1 << ABS_Y)));
fprintf(stderr,"absbit & (1 << ABS_PRESSURE)=0x%x\r\n\n",(absbit & (1 << ABS_PRESSURE)));

通常导致失败的原因都是版本号不对导致,可以在linux内核源码中搜索EV_VERSION,可以在include/linux/input.h中找到这个宏定义,与tslib保持一致即可!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值