tslib移植-selected device is not a touchscreen I understand 错误解决
来源:互联网 发布:vb调用matlab工具箱 编辑:程序博客网 时间:2024/06/05 17:08
这篇文章必须要写,因为昨天移植了触摸屏的驱动后又移植了tslib,拷到开发板上运行后出现了这个错误,更恐怖的是花了一个晚上的时间,早上来实验室才弄好,网上找了好多这个错误的解决方法,很多都不是蛮详细的,都比较不适合我们新手去看。
不过千辛万苦的是找到了这个博客,最后帮助我解决了,大家可以参考一下
http://blog.csdn.net/zhaocj/article/details/37522115
我写这个博客是为了让更多的跟我一样的新手来解决这个问题,有载图的话估计比较清晰一点。
首先我们的思路应该是先判断是内核错误还是tslib移植的错误。
首先进入内核触摸屏驱动的源代码
vim drivers/input/touchscreen/s3c2410_ts.c
当我们每按一下屏幕 用printk将坐标信息打印出来
出现了坐标信息,说明我们内核里面移植的触摸屏驱动没有问题
这样我们就可以确定应该是我们的tslib的问题
首先是环境变量和配置的问题,这些问题在我这篇文章中写道了,这里的这个问题显现不是环境和配置的问题 (http://blog.csdn.net/liuzijiang1123/article/details/45670049)
看到这个错误的提示,我们应该想到tslib源码里面肯定有这个错误提示的条件,这样就让我们有了思路,我们可以去找到这个文件看看他错误判断的条件是啥?
[lzj@localhost plugins]$ pwd
/home/lzj/fl2440/3rdparty/tslib/plugins
[lzj@localhost plugins]$ vim input-raw.c
首先tslib通过EVIOCGVERSION来获取驱动的版本号,然后再通过EVIOCGBIT来判断设备是否为触摸屏,最后获取触摸屏的X轴(ABS_X),Y轴(ABS_Y),以及压力(ABS_PRESSURE)。其中只要有一项内容不正确,tslib都会认为该设备不是触摸屏,而打印出“selecteddevice is not a touchscreen I understand”错误。
****************************************************************************************************************************************************************************************
使用
EVIOCGBIT ioctl处理
这里用bit和EV_ABS相与来判断是不是EV_ABS事件,判断是这个事件后再判断这个事件是否又X,Y轴和压力值。
*****************************************************************************************************************************************************************************************
首先检查一下自己编译器的版本号
vim /opt/buildroot-2012.08/arm920t/usr/arm-unknown-linux-uclibcgnueabi/sysroot/usr/include/linux/input.h
然后检查一下内核中的版本号
[lzj@localhost linux]$ pwd
/home/lzj/linux-3.0.1/include/linux
[lzj@localhost linux]$ vim input.h
版本号都没问题都没错误
再来看触摸屏的绝对值事件,这个在驱动移植的时候肯定是正确,不然测试程序肯定是不正确。
最后看触摸屏的X轴(ABS_X),Y轴(ABS_Y),以及压力(ABS_PRESSURE)。通过查看linux-3.0中的触摸屏驱动文件s3c2410_ts.c,发现系统没有给出ABS_PRESSURE,因此为了与tslib一致,linux-3.0要加上ABS_PRESSURE内容。
在touch_timer_fire函数中的第一input_sync(ts.input);前添加下面函数:
input_report_abs(ts.input, ABS_PRESSURE, 1);(内核将压力值上报给tslib)
在该函数中的第二input_sync(ts.input);前添加:
input_report_abs(ts.input, ABS_PRESSURE, 0);
在s3c2410ts_probe函数内的ts.input->name = "S3C24XX TouchScreen";语句前添加:
input_set_abs_params(ts.input, ABS_PRESSURE, 0, 1, 0, 0);
通过上面的修改,就可以使tslib能够正确识别出开发板的触摸屏,执行ts_calibrate和ts_test命令毫无问题。
测试成功了!
如果你改了上面的还没成功的话,这个问题我也遇到过
是因为内核里面有2个event事件,一个是按键的一个是触摸屏的,结果我用了event0的按键事件,所以肯定找不到触摸屏设备!真是悲催,花了好久的时间原来是因为这个原因。
你只需要改一下配置文件
vim /etc/profile
希望对遇到我一样问题的人有帮助,少走弯路。
- tslib移植-selected device is not a touchscreen I understand 错误解决
- 移植tslib库出现selected device is not a touchscreen I understand
- tslib库移植selected device is not a touchscreen I understand
- selected device is not a touchscreen I understand 以及tslib: Selected device uses a different version
- tslib编译使用方法(selected device is not a touchscreen I understand)
- selected device is not a touchscreen I understand
- 6410 selected device is not a touchscreen I understand
- selected device is not a touchscreen I understand(./ts_calibrate)
- selected device is not a touchscreen I understand
- linux 3.15.2 触摸屏移植之selected device is not a touchscreen I understand
- linux内核usb触摸屏驱动bug调试- selected device is not a touchscreen I understand
- linux内核usb触摸屏驱动bug调试- selected device is not a touchscreen I understand
- OK6410出现selected device is not a touchscreen I understand解决办法
- 出现device is not a touchscreen I understand
- tslib: Selected device is not a touchscreen (must support ABS and KEY event types)解决方法
- 在tslib移植中,出现tslib: Selected device is not a Linux input event device
- tslib库移植错误解决
- 错误:the input device is not a TTY
- java OO 抽象类和接口
- 机器学习基础 I
- Android OS体系结构介绍及需要撑握开发库
- Java环境变量设置
- null is not a java.class file
- tslib移植-selected device is not a touchscreen I understand 错误解决
- Try...Catch...基础用法
- ABS(Android Build System)中在编译时生成源代码文件
- bean:write 中filter的作用
- Python进阶
- 链式栈的基本操作与实现
- html的字体名字(英文)
- sys系统的kset和kobject代码示例
- js运动-任意值添加运动