美文网首页BB-black开发板[Linux arm-v8]
Linux input子系统框架--Apple的学习笔记

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

作者: applecai | 来源:发表于2020-06-21 15:29 被阅读0次

    按键中断解决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的学习笔记

        本文链接:https://www.haomeiwen.com/subject/ardgxktx.html