2025-12-12
Linux 输入子系统(驱动层)
| 驱动 | 适用场景 | 关键特性 |
| evdev | 传统 X.Org 环境、低层直接访问 `/dev/input/event` | 通用、支持轴校准、按钮映射,适用于大多数工业触摸屏 |
| libinput | Wayland 与现代 X.Org(xf86‑input‑libinput) | 统一 API,支持多点触控、手势、自动坐标变换;在 RHEL 8、Ubuntu 22.04 等发行版默认使用 |
| tslib(老旧方案) | 仅在需要兼容旧版 X11 系统时使用 | 需要手动校准文件 `ts.conf`,已逐步被 libinput 替代 |
> 配置要点
> 1. 确认触摸屏在 `/proc/bus/input/devices` 中出现,记录对应的 `eventX`。
> 2. 对于 evdev,可通过 `xinput` 或 `evtest` 调整 `Option "Calibration"`、`Option "SwapAxes"` 等参数。
> 3. 对于 libinput,使用 `libinput debug-events` 观察原始坐标,必要时在 `/etc/libinput/local-overrides.quirks` 中添加 `LIBINPUT_ATTR_TOUCH_MATRIX` 进行矩阵校准[[8]]。
图形栈与 UI 框架
- Wayland + Weston / Mutter:推荐在资源充足的工业 PC 上使用,能够直接利用 libinput 的多点触控与手势。
- X.Org + xf86‑input‑libinput:在老旧硬件或需要兼容传统 X 应用时仍是主流。
- 嵌入式 GUI 库(适合无桌面环境的嵌入式板)
- LVGL (LittlevGL):轻量、可裁剪,支持 framebuffer、DRM、SDL2 等后端;已有完整的 Linux‑evdev 与 libinput 移植示例,适合 16 bit‑RGB、64 KB Flash 以上的 MCU/MPU。
- Qt (5/6):提供完整的桌面/嵌入式 UI 框架,支持 OpenGL、Vulkan,适合需要复杂图形或跨平台的工业 HMI。
- Flutter:通过 Flutter‑Embedded 可在 Linux‑framebuffer 上运行,优势是热重载与丰富的组件库,适合快速迭代的 UI。
- Electron / Tauri:若项目已基于 Web 前端,可直接在 Chromium 或 WebView 中运行,需注意内存占用。
> 选型建议
> - 资源受限(≤64 MB RAM) → LVGL + evdev/libinput。
> - 需要丰富控件、动画或 3D → Qt + Wayland。
> - 已有 Web 前端 → Electron/Tauri + Wayland。
系统镜像与构建工具
- Yocto Project:可定制内核、驱动、根文件系统,常用于长期交付的工业产品。官方 meta‑qt5、meta‑lvgl 层提供现成的配方。
- Buildroot:更轻量,适合单板机快速生成最小化镜像。
- Debian/Ubuntu LTS:如果硬件资源充足,直接使用官方仓库的 `xserver-xorg-input-libinput` 与 `libinput-tools`,省去自行编译的工作。
结论
Linux 工业触摸屏的实现核心在于 驱动层(evdev/libinput) 与 UI 框架的匹配。在资源充足的工业 PC 上推荐 Wayland + libinput + Qt,而在资源受限的嵌入式板上则以 LVGL + evdev/libinput + framebuffer 为最佳组合。通过 Yocto 或 Buildroot 定制镜像,可确保驱动、校准、UI 完全符合工业可靠性要求。若有具体硬件型号或系统需求,进一步的配置细节可以基于上述流程进行微调。