移植触摸屏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=0101 N:Name="s3c TouchScreen" P:Phys=input(ts) S:Sysfs=/class/input/input0 H: Handlers=mouse0 vent0 ts0 B: EV=b B: KEY=400 0 0 00 0 0 0 0 0 0 B: ABS=1000003
3.cat /dev/event0 点击触摸屏,串口端出现乱码
4.具体的环境变量配置如下
exportQTDIR=$PWD exportLD_LIBRARY_PATH=$PWD/lib exportTSLIB_TSDEVICE=/dev/event0 exportTSLIB_PLUGINDIR=$PWD/lib/ts exportTSLIB_CONSOLEDEVICE=none exportTSLIB_CONFFILE=$PWD/etc/ts.conf exportPOINTERCAL_FILE=$PWD/etc/ts-calib.conf exportQWS_MOUSE_PROTO=tslib:=/dev/event0 exportTSLIB_CALIBFILE=$PWD/etc/ts-calib.conf exportQT_QWS_FONTDIR=$PWD/lib/fonts exportLANG=zh_CN
到此,运行QtE库下的bin目录下的ts_calibrate,就可进入5 点触摸屏校准程序并存储配置文件.
更多详情,请访问http://www.100ask.org/