LDD之input子系统 总结与流程图

-----------------------------------------------------------------------
本文系本站原创,欢迎转载!
转载请注明出处:http://blog.csdn.net/android_huber
交流邮箱:[email protected]

-----------------------------------------------------------------------


1.input.cinput_init

注册input,初始化proc,注册设备register_chrdev(INPUT_MAJOR,"input", &input_fops)

2.evdev.c evdev_init

input_register_handler(&evdev_handler)注册handler:将evdev_handler加入到input_handler_list链表中,然后遍历每一个挂在Input_dev_list上的设备调用input_attach_handler

3.inp[ut.c input_register_device

device_Add(&dev->dev)→

Kobject_get_path创建sys接口→

list_add_tail(&dev->node.&input_dev_list)将设备加入全局链表中→

然后遍历input_handler_list中的每一个handler,调用input_attach_handler进行attach

4.input.c input_attach_handler

调用input_match_device检测id匹配情况,然后调用handler中的connect函数:

connect中封装了handleevdev->dev结构体

input_register_handle注册handle,handle可看作handlerdevice的结合

最终调用device_Add(&evdev->dev)

5.input_event

Input_event-->input_handler_event:对type进行switch查找,对不同事件执行不同处理。对于按键和触摸屏,交由handler->event处理。-->

Input_pass_event→

handler->event-->evdev_event函数

evdev_event中封装了input_event,并将该结构体保存在client->buffer[client->head++]数组中。client中的buffer会处理成环形缓冲区,

处理方式:client->head &= EVDEV_BUFFER_SIZE-1

6.evdev.c evdev_read

client中的input_event结构体提取出来,然后将该结构体copy_to_user到应用层。


下面是我刚画好的一个流程图

LDD之input子系统 总结与流程图_第1张图片

大家可以参照 下面这篇分析代码的文章一起看

http://blog.csdn.net/android_huber/article/details/7407103

图看不全的话,大家可以保存到本地,然后方便放大了看。

需要清晰大图的请到下面网址去下载

http://download.csdn.net/detail/android_huber/8537241


你可能感兴趣的:(list,user,buffer,input,Path)