tslib库移植错误解决

来源:互联网 发布:嘉艺发型设计软件 编辑:程序博客网 时间:2024/05/29 11:10

移植触摸屏tslib库遇到的问题,一般存在三种情况:

1.环境变量配置的问题

2.QtE库环境或者交叉编译器配置的问题

3.是否加载触摸屏驱动、event事件以及触摸屏大小配置是否匹配的问题

一、没有module_raw

No raw modulesloaded.ts_config:Success

修改QtE库环境下的etc/ts.conf,将以下第二行的注释去掉

即:

# module_rawinput

改成:

module_raw input

 

二、Segmentation fault错误

1、etc/ts.conf文件中的各个设置选项之前不能有空格 
2、在pointercal对应的目录下,不要建立一个空的pointercal文件

 

三、运行ts_calibrate出现:ts_open: No such file or directory

1. 先用ls命令试下有多少个event(ls /dev/input/event*  或者 ls/dev/event*)

2. 用cat命令哪个event是触摸屏的 (cat dev/input/evnet0、1、2……  或者 cat /dev/event0、1、2…… )

3. 将TSLIB_TSDEVICE配置成相应的event事件

     例:我的是/dev/event1  就设置成 exportTSLIB_TSDEVICE=/dev/event1

 

四、selected device is not a touchscreen I understand

1、cat /proc/bus/input/devices查看是否有触摸屏驱动

2、若没有就要添加驱动

         2.1添加input.c组件

Device Drivers -- - >       Inputdevice support   -- - >         Generic input layer (needed for keyboard,mouse, ...)

        2.2添加evdev.c组件

Device Drivers -- - >Inputdevice support   -- - >< * >    Event interface

       2.3添加s3c2410_ts.c触摸屏驱动(看有没有现成的驱动)

3.若有驱动,则查看内核配置的屏幕大小是否匹配、是否有event

4.上述操作都不能解决你的问题就可能是因为交叉编译器和内核中的一个宏的定义不同,Tslib有如此一段代码:

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;}

此处规定交叉编译器和内核配置的EV_VERSION一致,Kernel源代码位于driver/input/evdev.c中,交叉编译器安装目录下中使用grep (grep "EV_VERSION" -nR) 在交叉编译安装,可以快速找到EV_VERSION的位置。将两个EV_VERSION比较,若不同,就修改内核中,重新编译内核即可。

交叉编译工具linux/input.h中

#define EV_VERSION  0x010001

内核:/include/linux/input.h

#define EV_VERSION  0x010000

改为:

#define EV_VERSION  0x010001


五、进入不了qt菜单画面(点击menu无反应)

1、首先测试触摸屏

      1.1 cat/proc/bus/input/devices 会出现触摸屏设备情况,

      1.2 cat /dev/event0然后点击触摸屏,如果dnw画面出现乱码说明触摸屏工作正常。

2、那么就是系统或者环境变量没有设置好。

 

最后我在这里给出所有正确的操作结果:

1. 触摸屏注册的设备节点:/dev/event0

2.cat /proc/bus/input/device 的显示

I: Bus=0013Vendor=dead Product=beef Version=0101N:Name="s3c TouchScreen"P:Phys=input(ts)S:Sysfs=/class/input/input0H: Handlers=mouse0  vent0  ts0B: EV=bB: KEY=400 0 0 00 0 0 0 0 0 0B: ABS=1000003

3.cat /dev/event0 点击触摸屏,串口端出现乱码

4.具体的环境变量配置如下

exportQTDIR=$PWDexportLD_LIBRARY_PATH=$PWD/libexportTSLIB_TSDEVICE=/dev/event0exportTSLIB_PLUGINDIR=$PWD/lib/tsexportTSLIB_CONSOLEDEVICE=noneexportTSLIB_CONFFILE=$PWD/etc/ts.confexportPOINTERCAL_FILE=$PWD/etc/ts-calib.confexportQWS_MOUSE_PROTO=tslib:=/dev/event0exportTSLIB_CALIBFILE=$PWD/etc/ts-calib.confexportQT_QWS_FONTDIR=$PWD/lib/fontsexportLANG=zh_CN

到此,运行QtE库下的bin目录下的ts_calibrate,就可进入5 点触摸屏校准程序并存储配置文件.

更多详情,请访问http://www.100ask.org/

0 1
原创粉丝点击