tslib-1.4在I.MX6ULL开发板上电容屏不能触摸问题

2023-05-16

一、前言

在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪声的缘故,触摸屏容易存在点击不准确、有抖动等问题。Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。也就是Tslib 为触摸屏驱动和应用层之间的适配层,其从驱动处获得原始的设备坐标数据,通过一系列的去噪、去抖、坐标变换等操作,来去除噪声并将原始的设备坐标转换为相应的屏幕坐标。

本次移植tslib的软硬件环境环境如下:

主机环境:Ubuntu 16.04 LTS

编译环境:arm-linux-gcc-4.2.3

目标机:正点原子I.MX6ULL开发板

目标机内核:linux 4.0.8

QT版本:5.12.10

二、问题及排查过程

问题:

为了移植带3D功能的QT5.12.10到ARM板上,在编译QT源码的时候,选用了tslib-1.4版本,但没想到在移植到板子上后,板子上的电容触摸屏不能触摸,点击无反应。

排查过程:

首先就是分析了硬件驱动,查看 /dev/input下也有event节点,proc/bus/input/devices 下也有输入设备,所以驱动应该是成功了的,但是触摸就是不行,运行 ts_test 测试也不行

然后开始怀疑是tslib配置的问题,因为开发板是电容触摸屏,所有一直觉得是 pointercal 的问题,觉得是电容屏校准了,但是如果把 export TSLIB_CALIBFILE=/etc/pointercal 去掉、/etc/pointercal删掉后,ts_test 都运行不起来!

最后都快放弃了,突然想起来,会不会是tslib的问题,正点原子出厂镜像里tslib是1.21版本的,然后用 gcc4.2.3 重新交叉编译了 tslib-1.21 ,结果还真是,将板卡中的tslib替换后触摸好了!! 后面在网上看见有说 tslib1.4不支持多点触摸。所以要注意根据自己的需求选择一个合适的版本。 

三、tslib-1.21交叉编译

1、下载tslib

在github下载tslib-1.21 (tslib-1.21下载地址)获取到tslib-1.21.tar.gz安装源文件。

2、编译和安装

编写编译脚本:新建自动编译脚本automake_tslib.sh,内容如下

#!/bin/sh
tar -zxvf tslib-1.21.tar.gz
cd tslib-1.21
./autogen.sh 
mkdir _install
echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/_install
make
make install

3、编译时遇到的问题

问题1:linux/hidraw.h: No such file or directory

waveshare-raw.c:26:26: error: linux/hidraw.h: No such file or directory
waveshare-raw.c: In function 'waveshare_read':
waveshare-raw.c:44: error: storage size of 'info' isn't known
waveshare-raw.c:62: error: 'HIDRAW_MAX_DEVICES' undeclared (first use in this function)
waveshare-raw.c:62: error: (Each undeclared identifier is reported only once
waveshare-raw.c:62: error: for each function it appears in.)
waveshare-raw.c:80: error: 'HIDIOCGRAWINFO' undeclared (first use in this function)
waveshare-raw.c:44: warning: unused variable 'info'
waveshare-raw.c: In function 'waveshare_read_mt':
waveshare-raw.c:158: error: storage size of 'info' isn't known
waveshare-raw.c:182: error: 'HIDRAW_MAX_DEVICES' undeclared (first use in this function)
waveshare-raw.c:200: error: 'HIDIOCGRAWINFO' undeclared (first use in this function)
waveshare-raw.c:158: warning: unused variable 'info'
Makefile:988: recipe for target 'waveshare-raw.lo' failed
make[2]: *** [waveshare-raw.lo] Error 1
make[2]: Leaving directory '/home/wwyc/srv/winShared/qt5/tslib-1.21/plugins'
Makefile:488: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/wwyc/srv/winShared/qt5/tslib-1.21'
Makefile:397: recipe for target 'all' failed
make: *** [all] Error 2

解决方法:搜索 hidraw.h 头文件

在其他版本的tslib中找到了该头文件,将其拷贝到 同目录下

问题2:undefined reference to `EVIOCGPROP'

../src/.libs/libts.so: undefined reference to `EVIOCGPROP'
collect2: ld returned 1 exit status
Makefile:614: recipe for target 'ts_test' failed
make[2]: *** [ts_test] Error 1
make[2]: Leaving directory '/home/wwyc/srv/winShared/qt5/tslib-1.21/tests'
Makefile:488: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/wwyc/srv/winShared/qt5/tslib-1.21'
Makefile:397: recipe for target 'all' failed
make: *** [all] Error 2

解决方法:打开 src/tslib.h,在文件中加入这个

#define EVIOCGPROP(len)  _IOC(_IOC_READ, 'E', 0x09, len)         /* get device properties */

问题3:'SYN_MT_REPORT' undeclared (first use in this function)

ts_uinput.c: In function 'send_touch_events':
ts_uinput.c:299: error: 'SYN_MT_REPORT' undeclared (first use in this function)
ts_uinput.c:299: error: (Each undeclared identifier is reported only once
ts_uinput.c:299: error: for each function it appears in.)
Makefile:436: recipe for target 'ts_uinput.o' failed
make[2]: *** [ts_uinput.o] Error 1
make[2]: Leaving directory '/home/wwyc/srv/winShared/qt5/tslib-1.21/tools'
Makefile:488: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/wwyc/srv/winShared/qt5/tslib-1.21'
Makefile:397: recipe for target 'all' failed
make: *** [all] Error 2

解决方法:

打开内核源码/include/linux/input.h,复制SYN_MT_REPORT相关代码添加到tslib-1.21/src/tslib.h中,代码如下:

/*
* Synchronization events.
*/
#define SYN_MT_REPORT           2

4、测试验证

将交叉编译的tslib移植到板卡上后,运行程序时又遇到了如下问题:

然后参考了如下博客,最终发现是缺少了 libts-1.4.so.0 动态库。原因是在交叉编译qt5源码的时候,使用的是tslib1.4 版本,也就是qt的库是依赖的tslib1.4,但是我这里给升级了,所有找不着了

Ubuntu18.04下,QT5移植到ARM板上运行程序发生异常:could not find or load the Qt platform plugin "linuxfb"原因_chaoshuaihaohao的博客-CSDN博客

解决方式就是 ln -s libts.so.0.10.3 libts-1.4.so.0 创建一个动态库的软链接

其中学会了一个很重要的调试技巧,就是在配置文件/etc/profile后面添加如下调试环境变量,就可以打印出具体的错误信息了

export QT_DEBUG_LUGINS=1

最后终于大功告成!
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tslib-1.4在I.MX6ULL开发板上电容屏不能触摸问题 的相关文章

  • LWIP网络-基于STM32平台

    LWIP P1无操作系统移植RAW UDP实验RAW TCP实验Webserver实验 P1无操作系统移植 MAC 43 PHY 通过符合 IEEE802 3的MII和RMII接口与外接快速以太网PHY进行通信 MII和RMII实现数据交换
  • 树莓派学习

    树莓派学习教程 系统安装数据源的更新与配置命令设定固定IP网络地址 xff1a 法一法二 给树莓派安装中文环境和中文输入法远程控制树莓派SSH方式 xff1a 通过putty软件实现 xff08 不需要屏幕 xff09 VNC方式 xff0
  • C++学习教程

    C 43 43 学习教程 C 43 43 内存分区模型数据类型循环语句for循环语句 跳转语句指针指针 数组 函数 结构体指针 内存分区模型 工具vs codeDEV C 43 43 C 43 43 内存分区模型 程序运行前 全局区和代码区
  • core dumped ?完了?

    微信公众号 xff1a linux码头 core dumped xff1a 当程序在运行过程中发生异常 xff0c 这时linux系统可以把程序出错的内存 内容存储在一个core文件中 xff0c 又叫核心转存 应用程序在运行过程汇总经常会
  • Ubuntu18.04安装网络调试助手 NetAssist

    下载地址 链接 xff1a https pan baidu com s 1DUqZBtxFh pGTsRR2kXaPA 提取码 xff1a fp32 安装步骤 1 xff09 建立依赖关系 sudo apt get install f 2
  • C语言中左移(<<)和右移(>>)的理解

    lt lt 左移 xff1a 相当于乘法 a lt lt b 61 a 2 b 举例 xff1a 1 lt lt 5 xff0c 相当于1 2 5 61 32 1 lt lt 0 xff0c 相当于1 2 0 61 1 gt gt 右移 x
  • 《Linux运维总结:firewalld防火墙使用教程》

    文章目录 一 firewalld基础知识1 1 firewalld基本介绍1 2 firewalld与iptables关系与区别1 3 firewalld默认策略1 4 firewalld配置模式1 5 firewalld配置方法1 6 f
  • ROS常用的功能包

    坐标系 坐标变换 xff08 tf xff09 tf功能包提供了一个基于ROS的分布式框架 xff0c 可以随着时间的推移计算多个坐标系的位置 3D可视化工具 xff08 rviz xff09 机器人模型的可视化 图像数据的可视化 地图数据
  • 树莓派4B+Ubuntu 18.04 LTS + 桌面desktop + ros安装@树莓派4B、Ubuntu、desktop、ros

    树莓派4B 43 Ubuntu 18 04 LTS 43 桌面desktop 43 ros安装 64 树莓派4B Ubuntu desktop ros 久违的一篇博客 xff0c 说实话CSDN的编辑器还是用不太习惯 xff0c 记录一下树
  • 云台控制协议总结(VISCA/PELCOD/PELCOP)

  • error: #20: identifier "TIM_TimeBaseInitTypeDef" is undefined

    如果出现多句错误 xff1a identifier 34 34 is undefined 解决问题方法一 xff1a C C 43 43 include paths 把文件路径添加进去 解决问题方法二 xff1a 在stm32f10x co
  • 使用pyqt5实现键盘(含组合键)鼠标事件响应

    使用pyqt5实现键盘 xff08 含组合键 xff09 鼠标事件响应 使用python3 6 xff0c pyqt5 xff0c 在macOS上测试有效 span class hljs keyword import span sys sp
  • 递归思想刷题总结

    核心思想 我们在调用递归函数的时候 xff0c 把递归函数当做普通函数 xff08 黑箱 xff09 来调用 xff0c 即明白该函数的输入输出是什么 xff0c 而不用管此函数内部在做什么 xff08 千万不要跳进去了 xff0c 你脑袋
  • anonymous unions are only supported in --gnu mode, or when enabled with #pragma anon_unions

    在keil工程下移植代码 xff0c 编译出现了这个问题 xff0c 字面上解决办法有 xff1a 1 打开GNU模式 option gt GNU extensions 2 在代码前加上 pragma anon union 就是代表支持匿名
  • 串口的深入理解

    1 串口是如何发送数据的 xff1f 一般说来 xff0c 串口发送数据是往数据寄存器sbuf填写数据 xff0c 一个字节一个字节的写入 xff0c 如果有串口中断 xff0c 那么发送完一个字节的数据 xff0c 就会进入串口中断一次
  • CMakeLists.txt的简单使用

    Makefile和CMakeLists的关系 环境准备 xff1a 需要安装gcc xff0c g 43 43 xff0c make sudo apt get install gcc g 43 43 sudo apt get isntall
  • .so文件的基本理解,使用。

    一 基本概念 Linux下的 so是基于Linux下的动态链接 其功能和作用类似与windows下 dll文件 代码编译 xff0c 链接 xff0c 最后生成可执行文件 xff1b 这个可执行文件就可看作是一个静态链接 xff0c 因为代
  • jz2440:QT控制LED灯点亮熄灭(11)

    1 LED灯的驱动 xff1a 首先要准备好在驱动文件 xff0c 通过insmod led ko来加载模块 xff0c 然后在QT的代码里面配合调用open xff0c write read函数来点亮 xff0c 关闭LED灯 这一步 x
  • win10下安装ubuntu双系统

    本文章记录自己在Win10系统下安装ubuntu双系统的过程 xff0c 以及注意事项 另一个不错的安装教程 1 下载系统镜像 在官网或清华镜像 xff0c 根据需要的ubuntu版本下载需要的ubuntu镜像文件 这里要注意 xff0c
  • C++ shared_ptr的reset 用法

    include lt iostream gt include lt memory gt class Tmp public Tmp int a Tmp void print a std cout lt lt 34 value 61 34 lt

随机推荐

  • C++ 模板类的继承

    模板类 xff1a template lt typename T gt 说白了就是向之后的内容传递参数类型 xff0c 把T当作一个数据类型传递 xff0c 而在声明一个变量的时候 xff0c 通过base lt xxxx gt pp xx
  • linuxptp源码研究

    目录 1 检查网卡是否支持相应的时间戳 2 linuxptp的目录架构 3 ptp4l的大致流程分析 4 gptp协议对应的sync follow up delay request delay response消息在代码的位置 5 slav
  • xv6---Lab3: page tables

    目录 参考资料 RISC V页表的简化图如下所示 编辑 多级页表 xv6内核页表 3 6 Process Address Space 3 7 Code Sbrk 3 8 Code Exec Print a page table A kern
  • 内存管理---分页机制

    目录 物理内存管理带来的问题 直接映射 一级页表 二级页表 参考 xff1a xff08 C语言内存七 xff09 分页机制究竟是如何实现的 xff1f Smah 博客园 物理内存管理带来的问题 比如4GB的flash 如果应用程序可直接访
  • xv6---Lab4 traps

    参考 xff1a Lab Traps 关于寄存器s0和堆栈 https pdos csail mit edu 6 828 2020 lec l riscv slides pdf RISC V assembly Q 哪些寄存器包含函数的参数
  • stm32F4 hal库之CAN通信的实现

    本文的目的是为了能够实现功能 xff0c 故写的时候比较简略 参考资料 xff1a https blog csdn net u012308586 article details 81001102 正点原子开发手册 目标 xff1a 通过ca
  • 调试sim800L模块

  • 51单片机 串口中断

    1 什么是中断 广义上的中断是指一个过程 xff0c 举个简单的例子 xff0c 打开了电脑 xff0c 你正在放音乐 xff0c 点击了暂停按钮 xff0c 于是歌停了 这就是一个很明显的中断的例子 CPU正在做自己的事情 xff08 放
  • STM32CubeMX应用 -- 定时器输入脉冲计数

    目录 参考链接 一 实现过程 二 STM32CubeMX配置示例 三 C语言示例程序 参考链接 https blog csdn net m0 37845735 article details 105395643 一 实现过程 当选择外部的同
  • 机器人导航dwa(局部避障)分析

    前面部分引用http blog csdn net lqygame article details 72861439 xff08 1 xff09 初始化 xff1a 在move base节点中 xff0c 通过类加载模块载入了BaseLoca
  • 2019年最新VSLAM比较汇总

    2019年最新VSLAM比较汇总 闭源SOFTSOFT2ESOsGAN VOLG SLAMRotRocc 43 GDVOElbrusROCCMonoROCCcv4xv1 sc 开源 xff1a VINS FusionORB SLAM2Ste
  • CMSIS到底是个什么东西

    目录 一 前言 二 CMSIS标准 三 CMSIS文件 1 Include文件 2 Source文件 四 总结 一 前言 使用过ARM单片机的朋友肯定听说过CMSIS xff0c 可以说CMSIS是开启ARM单片机的金钥匙 xff0c 是不
  • TouchGFX介绍

    目录 一 关于TouchGFX 1 TouchGFX是一个图形框架 2 TouchGFX可以减轻CPU负载 3 TouchGFX充分利用了STM32的硬件图形外设 4 TouchGFX创建最佳性能的用户界面 5 TouchGFX可工作于ST
  • rt-thread应用篇(03)---基于STM32F429实现web服务器功能

    目录 参考示例 前言 一 需使用的组件与软件包及其ENV配置 1 文件系统相关组件与软件包 1 1 DFS 框架 1 2 fal 软件包 1 3 SFUD 组件 2 网络通信相关组件和软件包 2 1 SAL组件 2 2 netdev组件 2
  • rt-thread的at组件在freeRTOS上的移植与应用

    目录 一 AT命令 二 rtthread at组件简介 三 移植到freeRTOS 3 1 数据结构 3 2 API 3 3 at client 流程 3 4 串口数据接收处理 3 5 数据缓存 顺序队列 四 使用示例 4 1 串口配置信息
  • rt-thread驱动篇(04)---STM32F429单片机模拟SPI FLASH驱动添加

    目录 一 添加驱动 1 新增模拟SPI驱动文件 drv soft spi c h 2 新增模拟SPI配置文件 soft spi config h 二 向工程添加文件 1 修改 board Kconfig 2 修改 rt thread com
  • RT-Thread实时操作系统简介

    目录 一 概述 二 架构 三 版本选择 四 内核启动流程 五 自动初始化机制 六 内核对象模型 七 I O设备模型 1 框架 2 设备驱动使用序列图 3 设备类型 八 FinSH控制台 九 ENV工具 1 menuconfig 2 Scon
  • Altium Allegro PADS到底该选哪个EDA设计软件

    废话少说 xff0c 就像之前 学好数理化 xff0c 走遍天下都不怕 一样 xff0c 在如今快速发展的电子时代 xff0c 掌握一门电子设计EDA软件工具 xff0c 在职场上真的走遍天下都不怕 哪哪都有可能跟电沾边 xff0c 跟控制
  • QML学习笔记【07】:QML访问复杂组件的子项

    1 访问复杂组件的子项 gt Row Column Grid Flow布局子项或Repeater子项 访问复杂组件的子项 gt Row Column Grid Flow布局子项或Repeater子项 Window width 640 hei
  • tslib-1.4在I.MX6ULL开发板上电容屏不能触摸问题

    一 前言 在采用触摸屏的移动终端中 xff0c 触摸屏性能的调试是个重要问题之一 xff0c 因为电磁噪声的缘故 xff0c 触摸屏容易存在点击不准确 有抖动等问题 Tslib是一个开源的程序 xff0c 能够为触摸屏驱动获得的采样提供诸如