内核:一个中断怎么对应多个句柄

内核:一个中断如何对应多个句柄

input子系统


input子系统代码位置:kernel/drivers/input/input.c

这个文件完成input系统最原始的初始化,subsys_initcall开始子系统的初始化,并封装EXPORT_SYMBOL给其他驱动调用的接口


在input_init中,三件事:


创建一个class,proc目录下节点,和注册input的方法集

对开发很有用的是proc的节点,我们看下代码,才能更好地利用它


分如下步骤:

1. "bus/input"目录创建

2. 在"bus/input"目录下创建proc目录devices,它的方法集有


这里要高度重视这些方法集,因为方法集才是创建这些节点的目的,内核很多的调用都是通过方法集调用,所以即使用sourceinsight也很难直接找到注册位置和调用位置


open方法就完成一件事:open这个节点的文件,这个节点又对应着一系列的调用,分别有start next stop show;看方法的名字也能知道,这些方法的调用是先start,再next,最后stop,可以通过show,用cat查看一些信息。明白这些,就可以理解,这些方法里面,是一些句柄的链表,每次调用device的open,都会把devices的所有句柄,按照start-next-next-...-stop的方式,这就实现了一个open,能够有多个功能。

“handlers”节点和“devieces”节点注册方式类似,里面关联的是很多的中断句柄


我们实际用下这些节点




cpufreq_interactive就是interactive策略,增加对input及时响应的一个句柄。