原理阐述:主要有驱动层,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设备的注册