韦东山视频实验之Input子系统分析之一

本文深入探讨了Linux内核的Input子系统,包括驱动层、input核心层、handler处理层和应用层的工作原理。当有输入事件时,从驱动层一路传递到应用层。分析了设备模型、input子系统流程,如input_int()函数、设备注册、字符设备与事件处理。同时,讲解了如何处理Unspecified device错误和input设备注册过程。
摘要由CSDN通过智能技术生成

原理阐述:主要有驱动层,input核心层,handler处理层,应用层

                当有按键触发时, 从前往后一直传送到应用层

先看一张韦老师提供的一张图,下面会进行更详细的介绍

调试问题:

1. Unspecified device as /devices/virtual/input/input0

在里面初始化的时候,初始name即可

加入 button_dev->name = "keys";之类的即可

2. 为什么指向了/devices/virtual/input/input0这个文件 ??

设备模型里面进行了详尽的阐述

 

input子系统流程分析(以linux2.6.32内核阐述,其他版本的可能有区别)

看一下input_int()(drivers\input\input.c)

err = class_register(&input_class);

struct class input_class = {
 .name  = "input",
 .devnode = input_devnode,
};

这里面注册input_dev 类,指向底层的kobject,这里的作用需要看设备模型有关内容,主要是为用户空间操作驱动而用,

会在sysfs目录下创建class文件,包括设备和属性,以便热插拔设备的处理,这里面init加入kobject就是热插拔,

有兴趣的可以查看/sbin/hotplug有关内容,此处不在描述

 

err = input_proc_init();

这个函数会注册proc/input/,目录下有devices、handler两个文件,这里面主要是对老旧的proc的操作

具体proc与sys的区别,就是新旧的区别,但是内核还是会支持proc老式的用户与内核交流的接口

# cat devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="keys"
P: Phys=
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=kbd event0
B: EV=100003
B: KEY=440 90000000

# cat handlers
N: Number=0 Name=kbd
N: Number=1 Name=mousedev Minor=32
N: Number=2 Name=evdev Minor=64

下面会进行input设备的注册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值