-----------------------------------------------------------------------
1.input.c中input_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中封装了handle和evdev->dev结构体
input_register_handle注册handle,handle可看作handler和device的结合
最终调用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到应用层。
下面是我刚画好的一个流程图
大家可以参照 下面这篇分析代码的文章一起看
图看不全的话,大家可以保存到本地,然后方便放大了看。
需要清晰大图的请到下面网址去下载
http://download.csdn.net/detail/android_huber/8537241