输入子系统分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入子系统分析 相关的知识,希望对你有一定的参考价值。

输入子系统是由输入子系统核心层( Input Core ),驱动层和事件处理层(Event Handler)三部份组成。一个输入事件,如鼠标移动,键盘按键按下,joystick的移动等等通过 input driver -> Input core -> Event handler -> userspace 到达用户空间传给应用程序。
技术分享

input子系统的3个基本的数据结构
struct input_dev

{

 struct list_head    h_list;    //h_list是一个链表头,用来把handle挂载在这个上 

struct list_head    node;      //这个node是用来连到input_dev_list上的 

 

}
struct input_handler

{

struct list_head    h_list;    //h_list是一个链表头,用来把handle挂载在这个上 
struct list_head    node;      //这个node是用来连到input_handler_list上的 

}
struct input_handle

struct input_handle {  
  
    void *private;  
  
    int open;  
    const char *name;  
  
    struct input_dev *dev;              //指向input_dev  
    struct input_handler *handler;      //指向input_handler  
  
    struct list_head    d_node;     //连到input_dev的h_list上  
    struct list_head    h_node;     //连到input_handler的h_list上  
};  

技术分享

技术分享

 

 input输入子系统如何工作?

当我们按下鼠标左键的时候就会触发中断(中断是早就注册好的),就会去执行中断所绑定的处理函数,在函数中就会去读取硬件寄存器来判断按下的是哪个按键和状态 ---->

将按键信息上报给input core层  ---> input core层处理好了之后就会上报给input event层,在这里会将我们的输入事件封装成一个input_event结构体放入一个缓冲区中 --->  应用层read就会将缓冲区中的数据读取出去。

 

 










以上是关于输入子系统分析 的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

webstorm代码片段的创建

片段(Java) | 机试题+算法思路+考点+代码解析 2023

如何使用sublime代码片段快速输入PHP头部版本声明

Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段

Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段