Input 调试、性能、安全与部署建议

Input 调试、性能、安全与部署建议

1. 识别设备

1
2
3
4
cat /proc/bus/input/devices
ls -l /dev/input/by-{id,path}/
udevadm info --query=all --name=/dev/input/event0
cat /sys/class/input/event0/device/{name,phys,uniq}

优先使用 by-path/by-id或 udev属性,不写死 eventN。

2. 事件

1
2
3
evtest /dev/input/eventN
libinput list-devices
libinput debug-events

确认 capability、press/release、SYN边界、MT slots、timestamp、repeat。

3. 分层排查

1
2
3
4
5
无设备 -> config/module -> DTS/MFD/bus -> probe error
有设备无事件 -> IRQ/poll -> pinctrl/polarity -> hardware protocol
有事件映射错 -> scancode/keymap -> capability -> userspace map
触摸错位 -> abs range -> DT transform -> display transform
唤醒失败 -> wakeup-source -> irq wake -> power domain -> firmware

4. IRQ

1
2
cat /proc/interrupts
watch -n1 cat /proc/interrupts

按键/触摸时 IRQ应增长。持续高速增长提示极性、清中断或硬件噪声问题。

5. Dynamic debug

1
2
3
mount -t debugfs none /sys/kernel/debug
echo 'file drivers/input/keyboard/adc-keys.c +p' \
> /sys/kernel/debug/dynamic_debug/control

敏感键值日志只在受控环境启用。

6. 性能

  • ADC key降低 poll interval会增加 IIO访问和功耗;
  • touch IRQ thread的 I2C transfer应批量且有上限;
  • 每帧只发变化和一个 SYN_REPORT;
  • 估算合理 events_per_packet;
  • 避免 ESD work与 IRQ同时重置;
  • 检查 evdev SYN_DROPPED

7. 安全

/dev/input/event* 可记录密码,/dev/uinput 可注入控制。建议:

  • seat ACL;
  • 最小 group权限;
  • 容器不透传整目录;
  • 禁用 INPUT_EVBUG
  • 调试日志脱敏;
  • 校验触摸 firmware/update输入;
  • 厂商 ioctl严格检查 length和 copy_from_user。

8. 稳定性测试

  • 快速按键和长按;
  • 多指全屏、边缘、slot churn;
  • suspend/resume循环;
  • 热插拔/拔线;
  • display rotation;
  • 高 CPU/I2C负载;
  • IR repeat/wakeup;
  • ADC电压边界和温漂;
  • 异常退出后 grab释放。

9. 常见误判

  • eventX变化不是驱动丢失;
  • evtest正常但 GUI无反应常是 capability/seat/映射;
  • USB键鼠源码主要在 HID;
  • RK806 power key driver名仍为 rk805;
  • DTS中候选触摸节点不代表全部硬件同时存在;
  • input sensor与 IIO sensor不可按目录名混为一谈。

10. 生产建议

保存 device identity、能力 bitmap和内核日志基线;升级 kernel/DT后自动比较 event设备、keycodes、ABS范围、wakeup和 latency,避免用户空间依赖隐式 probe顺序。

文章互动

阅读 --

留言

0 条留言

正在加载留言…