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

-----------------------------------------------------------------------
本文系本站原创,欢迎转载!
转载请注明出处:http://blog.csdn.net/android_huber
交流邮箱:dp.shao@gmail.com

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


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到应用层。


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


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

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

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

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

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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值