Linux驱动Input子系统开篇-输入设备和节点

提示:这里不谈概念,作为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 子系统,只是通过鼠标、键盘、按键等 来了解、搞清楚 输入设备和对应节点是怎么映射、监听的。
  • 通过开发板调试,对输入设备有一个感官认识即可。 一切皆设备、文件、设备对应节点。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野火少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值