news 2026/4/23 11:32:56

20251202 - Linux输入系统的基础知识 - tslib

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
20251202 - Linux输入系统的基础知识 - tslib

1. 什么是 tslib?

tslib (Touch Screen Library)是一个运行在用户空间(User Space)的开源中间件库

它的核心作用:

在嵌入式 Linux 中,触摸屏驱动(Kernel Driver)直接报上来的数据往往是“不完美”的,特别是对于电阻屏(虽然电容屏好很多,但有时也需要):

  1. 坐标不准:驱动报上来的可能是电压值或原始ADC值(比如 0~4095),而不是屏幕分辨率(比如 800x480)。
  2. 抖动:手按着不动,数值却在乱跳。
  3. 误触:快速点击产生的毛刺信号。

tslib 就是一个“翻译官”和“过滤器”。它位于内核驱动应用程序(如 Qt)之间。

主要功能:
  • 校准 (Calibration):通过 5 点校准法,将原始坐标转换为屏幕像素坐标。
  • 去噪 (De-noise):滤除毛刺。
  • 去抖 (Debounce):防止一次点击被识别为多次。
  • 平滑 (Linear):让划线更平滑。
常用工具:
  • ts_calibrate:屏幕校准程序(第一次开机通常都要运行它)。
  • ts_test:测试屏幕画线、点击是否准确。
  • 配置文件:/etc/ts.conf(配置各种插件)。

2. 标准输入事件:struct input_event

这是 Linux 输入子系统的通用数据包。无论你是鼠标、键盘、游戏手柄还是触摸屏,内核发给应用程序的数据格式永远是这个结构体

它定义在头文件<linux/input.h>中:

structinput_event{structtimevaltime;// 事件发生的时间戳__u16 type;// 事件的类型 (你是哪一类事件?)__u16 code;// 事件的代码 (具体是哪个键/轴?)__s32 value;// 事件的值 (按下了还是松开了?坐标是多少?)};
详细字段解析:
字段含义常见取值示例
time时间戳包含tv_sec(秒) 和tv_usec(微秒)。用来判断连击或滑动速度。
type大分类EV_KEY(0x01): 按键事件(键盘/鼠标键/触摸点击)
EV_REL(0x02): 相对位移(鼠标移动)
EV_ABS(0x03): 绝对位移(触摸屏/摇杆)
EV_SYN(0x00): 同步信号(用来分割每一组完整的事件)
code具体对象如果是EV_KEY:KEY_A(键盘A),BTN_TOUCH(触摸屏按下)
如果是EV_ABS:ABS_X(X轴坐标),ABS_Y(Y轴坐标),ABS_PRESSURE(压力)
value具体数值如果是KEY:1(按下),0(松开),2(长按重复)
如果是ABS: 具体的坐标数值(如 512)
举个例子:点击触摸屏一次会发生什么?

这通常是一组连续的事件包

  1. EV_ABS,ABS_X,100(X轴在100)

  2. EV_ABS,ABS_Y,200(Y轴在200)

  3. EV_KEY,BTN_TOUCH,1(手指按下了)

  4. EV_SYN,SYN_REPORT,0(同步,以上是一组,即手指在屏幕坐标(100,200)按下了,处理吧!)

    … (手指抬起) …

  5. EV_KEY,BTN_TOUCH,0(手指松开了)

  6. EV_SYN,SYN_REPORT,0(同步)


3. 多种 Handler (事件处理器)

Input Handler 是内核中负责将驱动层的数据分发给用户空间的模块。不同的 Handler 会创建不同的设备节点,提供不同的数据格式。

以下是常见的 Handler:

1. evdev (Event Device Handler) ——最重要
  • 节点/dev/input/event0,/dev/input/event1, …
  • 全称:Generic Event Interface (通用事件接口)。
  • 特点这是现代 Linux 的标准接口。它原封不动地将struct input_event发送给用户。tslib、Qt5、Android 底层都读取这个接口。
  • 调试hexdump /dev/input/event0看到的就是它的数据。
2. mousedev (Mouse Device Handler)
  • 节点/dev/input/mouse0,/dev/input/mice
  • 全称:PS/2 Mouse Interface (PS/2 鼠标模拟接口)。
  • 特点:它把所有输入设备(包括触摸屏)模拟成一个古老的 PS/2 鼠标。
  • 用途:主要用于兼容旧的桌面系统(X11)。它输出的数据不是input_event,而是类似dx, dy的鼠标协议数据。嵌入式开发中通常不直接用它读取数据。
3. joydev (Joystick Device Handler)
  • 节点/dev/input/js0
  • 全称:Joystick Interface (游戏摇杆接口)。
  • 特点:专门用于处理游戏手柄、摇杆数据。不过现在的游戏手柄通常也推荐直接走evdev
4. keybdev / kbd (Keyboard Handler)
  • 节点:无直接对应的/dev文件(直接作用于 TTY)。
  • 全称:Console Keyboard Handler (控制台键盘处理器)。
  • 特点:它是内核内部使用的。它把键盘的扫描码(Scan Code)转换成 ASCII 码,发给当前的终端(TTY)。这就为什么你按键盘,屏幕上会出字。

总结图谱

  • 硬件:触摸屏
  • 驱动:I2C/SPI 驱动
  • Input Core:内核核心层
  • Handler (分流)
    • –>evdev(/dev/input/event0) -->tslib(校准/去噪) -->Qt/APP(最终使用)(这是现在的标准路径)
    • –>mousedev(/dev/input/mouse0) --> 旧式程序
    • –>kbd--> 终端控制台 (TTY)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:40:37

突破Google Drive限制:快速搞定PDF下载的有效方法

突破Google Drive限制&#xff1a;快速搞定PDF下载的有效方法 【免费下载链接】Google-Drive-PDF-Downloader 项目地址: https://gitcode.com/gh_mirrors/go/Google-Drive-PDF-Downloader 还在为Google Drive上的"仅查看"PDF文件发愁吗&#xff1f;每次看到心…

作者头像 李华
网站建设 2026/4/17 20:09:00

3分钟快速去除视频硬字幕!免费AI神器video-subtitle-remover终极教程

3分钟快速去除视频硬字幕&#xff01;免费AI神器video-subtitle-remover终极教程 【免费下载链接】video-subtitle-remover 基于AI的图片/视频硬字幕去除、文本水印去除&#xff0c;无损分辨率生成去字幕、去水印后的图片/视频文件。无需申请第三方API&#xff0c;本地实现。AI…

作者头像 李华
网站建设 2026/4/22 17:09:56

NoSleep防休眠神器:5分钟学会让电脑永不锁屏的完整指南

NoSleep防休眠神器&#xff1a;5分钟学会让电脑永不锁屏的完整指南 【免费下载链接】NoSleep Lightweight Windows utility to prevent screen locking 项目地址: https://gitcode.com/gh_mirrors/nos/NoSleep 你是否在重要演示时遭遇过屏幕突然变暗的尴尬&#xff1f;或…

作者头像 李华
网站建设 2026/4/18 6:47:04

云服务器 vs 传统服务器:企业 IT 架构升级的核心抉择

在数字化转型加速的今天&#xff0c;服务器作为企业数据存储、业务运行的核心硬件&#xff0c;其选型直接影响运营效率与成本控制。传统物理服务器曾是市场主流&#xff0c;但随着业务规模扩大、灵活需求提升&#xff0c;云服务器凭借革命性优势&#xff0c;成为越来越多企业的…

作者头像 李华
网站建设 2026/4/23 12:54:30

2025 云服务器技术趋势

随着 5G、物联网、人工智能等技术的深度融合&#xff0c;云服务器行业正迎来新一轮技术革新。2025 年&#xff0c;三大核心趋势将重塑云服务器的产品形态与应用场景&#xff0c;为企业数字化转型注入更强动力。 一、边缘计算与云边协同成为核心布局 传统云服务器集中部署在骨…

作者头像 李华
网站建设 2026/4/22 17:12:30

MsgViewer邮件查看器:跨平台MSG文件处理完整指南

MsgViewer邮件查看器&#xff1a;跨平台MSG文件处理完整指南 【免费下载链接】MsgViewer MsgViewer is email-viewer utility for .msg e-mail messages, implemented in pure Java. MsgViewer works on Windows/Linux/Mac Platforms. Also provides a java api to read mail m…

作者头像 李华