Linux按键驱动测试可采用以下分层方法:
- 基础事件检测
使用输入子系统调试工具:
sudo apt install evtest # 安装事件测试工具
evtest # 选择对应设备编号
触发按键后观察终端输出,正常情况应显示:
Event: time 1625486723.123456, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 1
Event: time 1625486723.123567, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 0
- 原始数据观测
hexdump /dev/input/eventX # X替换为实际设备编号
正常输出格式示例:
0000000 0a5c 6475 0000 0000 0001 0072 0001 0000
0000010 0a5c 6475 0000 0000 0000 0000 0000 0000
- 系统信息验证
查看已注册输入设备:
cat /proc/bus/input/devices
确认设备条目包含类似:
H: Handlers=event0
B: EV=3
B: KEY=100000 0 0 0
- 内核信息诊断
实时查看驱动加载信息:
dmesg -wH
正常驱动加载应显示:
input: gpio-keys as /devices/platform/gpio-keys/input/input0
- 自动化测试脚本
Python示例实现按键事件捕获:
import struct
from pathlib import Path
device = Path('/dev/input/event0')
with device.open('rb') as f:
while True:
data = f.read(24)
tv_sec, tv_usec, type, code, value = struct.unpack('IIHHi', data)
if type == 1: # EV_KEY
print(f"Key {code} {'pressed' if value else 'released'}")
- 硬件层验证
使用gpio工具检测信号变化:
sudo apt install gpiod
gpioinfo # 查看GPIO状态
gpiomon 17 # 监控17号GPIO引脚变化
测试要点:
- 按键消抖时间检测(典型值5-20ms)
- 长按事件响应(通过
EV_REP
参数验证) - 多键同时触发测试
- 按键映射正确性验证(使用
showkey -k
)
异常诊断流程:
- 确认硬件电气特性(电压、上拉电阻)
- 检查设备树配置/dtsi文件
- 验证中断触发计数:
cat /proc/interrupts
- 确认驱动加载状态:
lsmod | grep gpio_key
注意:测试前需确保有对应权限,可通过sudo执行或添加用户到input组