首发平台:微信公众号baiwenkeji

很多人在做触摸屏驱动实验,移植tslib库时,可能会出现错误提示“selected device is not a touchscreen I understand"

为什么会这样?原因非常简单:tslib中的输入系统和内核input系统版本不匹配,当然也有其他原因,不过这是最常见的情况,先分析一下tslib代码,观察这句话在什么情况下被打印就知道了。

将tslib库中c和H文件加入Source
Insight,跟踪源码发现,在 input-raw.c文件中有这么一段代码:

static int check_fd(struct
tslib_input *i)

{

struct tsdev *ts =
i->module.dev;

int version;

u_int32_t bit;

u_int64_t absbit;

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;

}

if (bit & (1
<< EV_SYN))

i->using_syn =
1;

return 0;

}

其中关键的是version == EV_VERSION这个判断语句,如果这俩不等,那么就会打印出selected device is not a touchscreen I understand。

tslib中的input版本号是在交叉编译的时候指定的,赋值给version,而EV_VERSION是在内核中定义,笔者做tslib时,用的2.6.39内核,这个EV_VERSION定义在linux源码的include/linux/input.h中,值是0x010001,而tslib中的version是和交叉编译器相同,查看编译器,在
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/input.h中,值是0x010000,这俩明显不相等,当然不会满足version ==
EV_VERSION,所以导致错误。

所以,以下提供两种解决方法

1.将内核源代码里的include/linux/input.h中的

#define EV_VERSION
0x010001

改为:

#define EV_VERSION
0x010000

2.将arm交叉编译工具中的头文件库中的

linux/input.h中的

#define EV_VERSION
0x010000

改为

#define EV_VERSION
0x010001

然后再编译tslib库

一般第一种就可以解决问题,因此,出现上面情况时,先不要急于换版本,如果二者版本不等,那么改一个就可以, 前提是二者版本相同

移植tslib库出现selected device is not a touchscreen I understand的解决方法的更多相关文章

  1. tslib: Selected device is not a touchscreen (must support ABS_X and ABS_Y events)

    /************************************************************************************ * tslib: Selec ...

  2. [Microsoft Dynamics CRM 2016]Invalid Action – The selected action was not valid 错误的诱因及解决方法

    详细问题描述: 由于解决windows server 评估版过期\SQL server 评估版过期的问题后而导致的Invalid Action – The selected action was no ...

  3. (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法

    网络原因无法下载virtual device,status 为0表示服务器没有响应.FQ下载吧,有VPN的小伙伴推荐这种. 或者直接手动下载ova虚拟机文件,然后将虚拟机文件导入到virtualbox ...

  4. Java调用Fortran生成so库报“libifport.so.5: 无法打开共享对象文件”错误解决方法

    source /opt/intel/bin/compilervars.sh intel64

  5. 移植tslib和Qt5.6到三星s5pv210开发板

    tslib1.4移植 下载tslib1.4后 1.cp tslib-1.4.tar.bz2 /home/gec 2.tar jxvf tslib-1.4.tar.bz2 3.sudo -s 4.cd ...

  6. Linux移植随笔:对tslib库的ts_test测试程序代码的一点分析【转】

    转自:http://www.latelee.org/embedded-linux/porting-linux-tstest-code.html 本文是作者对tslib库的ts_test.c文件进行分析 ...

  7. iOS 真机测试时报错:Provisioning profile "iOS Team Provisioning Profile: XXX” doesn't include the currently selected device “XXX”.

    这几天因工作需要,去给客户演示iOS项目打包的过程.之前演示都是顺利的,但后来客户自己操作时打电话说遇到了问题,出现报错. 就过去看了一下,发现一个很陌生的错误提示: The operation co ...

  8. zedboard上移植OPENCV库

    zedboard上移植OPENCV库 之前做了很多移植OPENCV库的工作,但是需要包含的各种库,需要交叉编译,X264 ,JPGE ,FFMPGE等等 注意:在<嵌入式系统软硬件协同设计实战指 ...

  9. 【MCU】移植AT32库&FreeRTOS教程

    目录 前言 1. 移植AT库 1.1 移植内核相关文件 1.2 移植芯片型号相关文件 1.3 移植芯片外设驱动库 1.4 移植配置文件及中断回调函数文件 2. 移植FreeRTOS源码 2.1 获取 ...

随机推荐

  1. AppCompatActivity

    刚开始看HelloWorld的目录结构然后就发现Android Studio中的是 import android support.v7.app.AppcompatActivity; public cl ...

  2. graphviz的使用

    安装:brew install graphviz 使用:dot -Tpng *.dot -o *.png 把dot文件转换为图片,* 换成具体的文件名, 这样你就成功的用脚本渲染出你要绘制的图片啦 参 ...

  3. IntelliJ IDEA 默认需要进行maven的设置

    IntelliJ IDEA 默认需要进行maven的设置 需要指定maven的地址,指定settings.xml的地址: 可以默认的在user/.m2/下面放一个settings.xml文件: 学习: ...

  4. 转:CEO, CFO, CIO, CTO, CSO是什么

    转自:https://club.1688.com/threadview/26957122.html CEO, CFO, CIO, CTO, CSO是什么?(现在O太多了) 帖子创建时间:  2009年 ...

  5. C#语法复习1

    一.C#与.net框架 .net是语言无关的. 程序的执行流程: .net兼容语言的源代码文件 .net兼容编译器 程序集(公共中间语言(CIL)common intermediate languag ...

  6. 【分享】利用Apache的Htaccess Files命令限制訪问文件类型,Files正则

    假设你在你的模板目录中有非常多PSD HTML模板,那么用接下来这个htaccess文件能够保护限制訪问: 文件D:\WebSite\ZBPHP.COM\www\Tpl\.htaccess 所有源代码 ...

  7. java 短信猫发送短信的方法

    用java实现短信收发的功能,目前一般项目中短信群发功能的实现方法大致有下面三种: ·                 1. 向运行商申请短信网关,不需要额外的设备,利用运行商提供的API调用程序发送 ...

  8. ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目

    ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)   我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...

  9. python的pexpect模块

    Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块. P ...

  10. IBM中国研究院、SAP、网易游戏、IBM2015应届生招聘笔试面试问题分享

    IBM中国研究院实习生 早在今年4月份.我面试的是IBM中国研究院的实习生岗位.主要是自然语言处理和语义网方向.那时我还在香港上学,两个考官对我进行的是电话面试,大概持续半个多小时,首先是我的自我介绍 ...