提示:这里不谈概念,作为Linux 驱动 Input子系统,先了解输入设备和节点。
文章目录
前言-目的
作为Linux驱动Input子系统开篇,这里主要为了引入,有个初步认识。 对于输入设备 各种概念暂不说明,这个大家对于输入了解很多的,至少天天办公和日常生活中实际操作过,还是从节点、输入事件角度 初步理解下。
一、 查看输入设备列表
方法一:查看 /dev/input 目录
[root@RK356X:/]# ls -la /dev/input/
total 0
drwxr-xr-x 4 root root 180 Nov 20 03:07 .
drwxr-xr-x 15 root root 3740 Nov 20 03:07 ..
drwxr-xr-x 2 root root 60 Nov 20 03:07 by-id
drwxr-xr-x 2 root root 140 Nov 20 03:07 by-path
crw-rw---- 1 root input 13, 64 Nov 20 03:05 event0
crw-rw---- 1 root input 13, 65 Nov 20 03:05 event1
crw-rw---- 1 root input 13, 66 Nov 20 03:05 event2
crw-rw---- 1 root input 13, 67 Nov 20 03:05 event3
crw-rw---- 1 root input 13, 68 Nov 20 03:07 event4
[root@RK356X:/]#
常见节点:
- eventX - 事件设备(最常用)
- mouseX - 鼠标设备(旧接口)
- jsX - 游戏手柄
- mice - 所有鼠标的合并流
注意:
mouseX - 鼠标设备(旧接口) 所以不是所有的Linux 节点都有 mouseX,如上我们rk3568 就没有。
试探性方法:cat /dev/input/节点
上面 ls 已经查看了当前输入设备/dev/input/ 节点下信息,现在就是要知道鼠标 是哪一个节点 :
那就用命令尝试去读取,然后输入设备进行输入:比如鼠标晃动看是否有输入信息打印。 当然,如果有键盘,测试键盘输入一样的。

方法二:查看 /proc/bus/input/devices
cat /proc/bus/input/devices
这会显示所有输入设备的详细信息,包括:
- 设备名称(Name)
- 物理地址(Phys)
- 系统唯一标识(Uniq)
- 支持的事件类型(Handlers)
关键字段:
- H: Handlers - 包含设备节点名称(如 event2)
- S: Sysfs - sysfs 路径
- N: Name - 设备名称
我们直接获取开发板上面信息,如下:
[root@RK356X:/]# cat /proc/bus/input/devices
I: Bus=0019 Vendor=524b Product=0006 Version=0100
N: Name="fdd70030.pwm"
P: Phys=gpio-keys/remotectl
S: Sysfs=/devices/platform/fdd70030.pwm/input/input0
U: Uniq=
H: Handlers=kbd event0 cpufreq dmcfreq
B: PROP=0
B: EV=3
B: KEY=40008800 c168000000000 10000ffc
I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="rk805 pwrkey"
P: Phys=rk805_pwrkey/input0
S: Sysfs=/devices/platform/fdd40000.i2c/i2c-0/0-0020/rk805-pwrkey/input/input1
U: Uniq=
H: Handlers=kbd event1 cpufreq dmcfreq
B: PROP=0
B: EV=3
B: KEY=10000000000000 0
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="adc-keys"
P: Phys=adc-keys/input0
S: Sysfs=/devices/platform/adc-keys/input/input2
U: Uniq=
H: Handlers=kbd event2 cpufreq dmcfreq
B: PROP=0
B: EV=3
B: KEY=40000800 c000000000000 0
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="rockchip,rk809-codec Headphones"
P: Phys=ALSA
S: Sysfs=/devices/platform/rk809-sound/sound/card0/input3
U: Uniq=
H: Handlers=event3
B: PROP=0
B: EV=21
B: SW=4
I: Bus=0003 Vendor=10c4 Product=0005 Version=0111
N: Name="YSPRINGTECH USB OPTICAL MOUSE"
P: Phys=usb-fd8c0000.usb-1/input0
S: Sysfs=/devices/platform/fd8c0000.usb/usb4/4-1/4-1:1.0/0003:10C4:0005.0001/input/input4
U: Uniq=
H: Handlers=event4 cpufreq dmcfreq
B: PROP=0
B: EV=17
B: KEY=1f0000 0 0 0 0
B: REL=103
B: MSC=10
[root@RK356X:/]#

所以:
- 这个方法可以看个大概,通过关键信息来确认设备到底是哪一个输入节点。
- Handlers 属性本身关联 方法一中的
/dev/input,那么两者实际是可以相互结合来确定的。
二、Linux Input 子系统中的 hexdump 使用 - 查看输入数据
如上是为了确认输入设备是哪一个节点。比如
ls -la /dev/input/查看有哪些输入设备,然后cat /dev/input/节点去判断这个event就是该设备- 通过 查看 /proc/bus/input/devices,看关键信息,并结合方法一来试探性看是不是这个节点对应的输入设备
但在实际开发中,我们需要的是找到设备查看设备输入数据,再解析,所以产看数据很重要。
一、常用命令格式
# 基本格式
sudo hexdump /dev/input/eventX # X为事件编号
# 常用组合
sudo hexdump -C /dev/input/event0
sudo hexdump -v -C /dev/input/event1
sudo hexdump -n 256 -C /dev/input/event2
二、核心选项解析
| 选项 | 作用 | 应用场景 |
|---|---|---|
| -C | 标准十六进制+ASCII显示 | 最常用,同时显示十六进制和字符 |
| -v | 显示所有数据(不省略重复行) | 确保看到所有原始数据 |
| -n <长度> | 限制输出字节数 | 查看特定长度的数据包 |
| -s <偏移> | 从指定偏移开始 | 跳过开头的配置数据 |
| -e <格式> | 自定义显示格式 | 高级解析,如解析input事件结构 |
三、Input事件解析(关键应用)
# 监控鼠标事件
sudo hexdump -C /dev/input/mice
# 监控键盘事件
sudo hexdump -C /dev/input/event1
四、典型输出示例及解析
键盘事件示例:
00000000 cc7b 6e65 0000 0000 0004 0004 000c 0074 |.{ne.........t|
00000010 cc7b 6e65 0000 0000 0001 001c 0000 0000 |.{ne............|
解析:
- 前8字节:时间戳
- 第9-10字节:0004 = EV_MSC(杂项事件)
- 第13-14字节:键码
- 最后4字节:值(1按下/0释放)
五、实际应用场景
1. 设备识别与调试
# 1. 查看所有input设备
ls -la /dev/input/
cat /proc/bus/input/devices
# 2. 测试特定设备
sudo hexdump -C /dev/input/event0 # 操作设备看输出变化
2. 事件流分析
# 查看触摸屏事件
sudo hexdump -v -C /dev/input/event2 | head -50
# 查看游戏手柄
sudo hexdump -C /dev/input/js0
3. 驱动开发调试
# 监控驱动发出的所有事件
sudo hexdump -v -e '16/1 "%02x " "\n"' /dev/input/eventX
# 结合evtest工具对比
sudo evtest /dev/input/event0
三、开发板直接调试
上面提供了基本的设备和节点对应方法,并提供了相关的查看命令。 这里以实际开发版为例

鼠标
上面已经有验证过,鼠标是event4 ,那么测试如下:

物理按键
上面其实也看到了adc 按键,如下:

当按下了物理按键:HOME、BACK、VOL+、VOL- 的时候,就是有响应,如下,

至于响应什么信息,那就是协议事情了,后续再研究。
总结
- 这里作为Linux 驱动中,Input 子系统,只是通过鼠标、键盘、按键等 来了解、搞清楚 输入设备和对应节点是怎么映射、监听的。
- 通过开发板调试,对输入设备有一个感官认识即可。 一切皆设备、文件、设备对应节点。
1520

被折叠的 条评论
为什么被折叠?



