Linux input子系统框架--Apple的学习笔记

按键中断解决irq_of_parse_and_map返回0的问题--Apple的学习笔记我为了复习相关函数和io模型,所以自己写按键中断,其实linux中有input子系统就像pinctrl子系统一样,已经抽象的写好了按键驱动。因为一般的驱动就是要实现open,read,write的io模型。所以linux内核都帮我们写好了。我们可以复用。到document的input文件夹中看相关帮助资料。网上资料也一大堆。

A.今天的学习目标:

  1. 看内核代码,熟悉input子系统框。
  2. 会参考已经有的input子系统driver,自己使用input子系统框架来实现按键中断driver。
  3. 直接使用gpio-key的driver来实现按键中。

B.input子系统框学习

image.png

linux内核空间主要分三层
a,驱动层:输入设备的具体驱动程序
b, 核心层:承上启下,为驱动层提供输入设备注册的操作接口,通知事件层对输入事件进行处理
c,事件层:和用户空间交互。

C.input子系统关键数据结构

input_dev 输入设备
input_handler 事件处理器
input_handle 连接结构体
我本来在想为什么要加一个input_handle,直接连接dev和handler不就可以了。后来网上查了,因为不是一对一而是可以1对多的关系。一个设备可以对应多个事件,一个事件也可以对应多个设备。

D.内核代码分析

input_register_handler开始到最后connect,可以参考
12.Linux之输入子系统分析(详解),此文描述的比较好。

image.png

E.实践

实验1,使用input子系统,自己写驱动。--已完成
实验2,直接使用gpio-key,通过修改设备树完成驱动。--已完成

F.小结

一,关于中断中的锁使用

  1. spin_lock--不会关中断,某进程锁住了,然后中断处理程序中也使用了此时由于某进程被挂起,导致中断程序获取不了资源而产生死锁。
  2. spin_lock_irq--进入中断会关闭中断,退出的时候是开启的。
  3. spin_lock_irqsave--进入的时候会关闭中断,退出的时候会恢复之前的中断状态。

G.参考网址

4. Linux - 输入子系统框架详解
Linux 输入子系统

你可能感兴趣的:(Linux input子系统框架--Apple的学习笔记)