输入子系统是由输入子系统核心层( 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就会将缓冲区中的数据读取出去。
时间: 2024-11-03 11:57:04