输入系统应用编程:交叉编译、测试tslib

236 阅读3分钟

tslib 是一个开源的触摸屏支持库,主要用于嵌入式 Linux 系统,提供触摸事件采集、校准、过滤等功能。地址是 : www.tslib.org/。 编译 tslib 后,可以得到 libts 库,还可以得到各种工具:校准工具、测 试工具。

1. 核心框架

tslib 的设计基于模块化插件机制,通过组合不同的插件(modules)实现数据处理链。其架构分为三层:

  1. 硬件接口层:直接与触摸设备(如 /dev/input/event0)交互,读取原始数据。
  2. 插件处理层:通过配置的插件链对原始数据进行处理(如校准、去噪)。
  3. 应用接口层:向应用程序提供标准化的触摸事件(如 ts_read() API)。

1747051659846.png

1747051767113.png

2. 主要模块与功能

2.1 输入模块(Input Modules)

  • 作用:读取原始触摸事件。

  • 常用模块

    • input: 通用输入设备接口(默认使用 /dev/input/eventX)。
    • ucb1x00: 针对早期 UCB1x00 触摸控制器的驱动。
    • linux-input: 通过 Linux 输入子系统读取事件。

2.2 过滤模块(Filter Modules)

  • 作用:对原始数据进行处理和修正。

  • 常用插件

    • linear: 线性校准(基于 pointercal 文件)。
    • dejitter: 去除信号抖动。
    • variance: 过滤噪声点。
    • pthres: 设置触摸压力阈值。
    • median: 中值滤波,消除突发干扰。
    • iir: 低通滤波,平滑数据。

2.3 校准模块

  • 工具ts_calibrate 生成校准文件(pointercal)。
  • 原理:五点校准法,计算仿射变换矩阵,修正坐标偏移和缩放。

要分析tslib的框架,先看看示例程序怎么使用,我们参考ts_test.c和ts_test_mt.c,前者用于一般触摸屏(比如电阻屏、单点电容屏),后者用于多点触摸屏。

3. 交叉编译、测试 tslib

在这之前一定要执行:

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

3.1 交叉编译

1747057307383.png

./configure --host=arm-buildroot-linux-gnueabihf --prefix=/

1747068252701.png

1747056410918.png

1747056773015.png

1747057584951.jpg

1747068122345.jpg

查看工具链的头文件库文件目录:echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v - 1747068645664.png

拷贝: 1747068965210.png

bin目录里面有很多测试程序,需要放到开发板上运行 1747069101651.png

1.~(波浪号)

  • 用户主目录(Home Directory)
    ~ 是当前登录用户的 主目录 的快捷符号。
    例如:
  • 用户名为 book,则 ~ 对应 /home/book
  • 用户名为 root,则 ~ 对应 /root
  • 用户对自己的主目录(~)拥有完全控制权(读/写/执行),无需 sudo

1747070191366.png

2. /(根目录)

  • 根目录
    / 是 Linux 文件系统的 起点,所有其他目录和文件都挂载在其下。
    例如:
  • /bin:系统二进制文件
  • /etc:配置文件
  • /home:普通用户的主目录集合
  • /root:root 用户的主目录
  • 根目录(/)及其子目录(如 /bin/etc)通常需要 root 权限才能修改。
  • ~ :面向用户个人数据,操作安全且无需特殊权限。
  • / :面向系统全局数据,操作需谨慎并依赖 root 权限。

3.2 测试tslib:

以上编译得到的所有文件都是在mnt目录下的,需要拷贝到开发板的bin、lib等目录下。

cp /mnt/tslib-1.21/tmp/lib/ts -rfd /lib
cp /mnt/tslib-1.21/tmp/lib/*so* -d /lib
cp /mnt/tslib-1.21/tmp/bin/* /bin
cp /mnt/tslib-1.21/tmp/etc/ts.conf -d /etc

1747061219280.png

1747062198255.png

1747062255451.png

1747062388662.png

**运行时出错:没有配置交叉编译环境,make distclean后重新编译**

1747071103889.png

image.png

3.3 测试结果:

1747072624762.png

1747072683820.png

1747073290223.png