内核:一个中断怎么对应多个句柄
内核:一个中断如何对应多个句柄
创建一个class,proc目录下节点,和注册input的方法集
分如下步骤:
这里要高度重视这些方法集,因为方法集才是创建这些节点的目的,内核很多的调用都是通过方法集调用,所以即使用sourceinsight也很难直接找到注册位置和调用位置
open方法就完成一件事:open这个节点的文件,这个节点又对应着一系列的调用,分别有start next stop show;看方法的名字也能知道,这些方法的调用是先start,再next,最后stop,可以通过show,用cat查看一些信息。明白这些,就可以理解,这些方法里面,是一些句柄的链表,每次调用device的open,都会把devices的所有句柄,按照start-next-next-...-stop的方式,这就实现了一个open,能够有多个功能。
我们实际用下这些节点
cpufreq_interactive就是interactive策略,增加对input及时响应的一个句柄。
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及时响应的一个句柄。