输入输出子系统

标签(空格分隔): linux子系统 输入输出子系统


http://blog.csdn.net/smilefyx/article/details/40538339
http://blog.csdn.net/ielife/article/details/7798952 清晰
http://blog.csdn.net/wangpengqi/article/details/8471144
https://www.cnblogs.com/hackfun/p/5928428.html
http://blog.csdn.net/RadianceBlau/article/details/55046812
http://blog.csdn.net/ielife/article/details/7814108  input输入子系统整体流程(非常清晰)
驱动层的例程可以参考内核代码:linux-kernel-4.4\drivers\input\keyboard\

输入子系统事件处理层(EventHandler)、输入子系统核心层(InputCore)和输入子系统设备驱动层。
在Linux内核文档的documentation/input下,有一个input-programming.txt文件,讲解了编写输入设备驱动程序的核心步骤。

驱动层:具体的键值事件的产生
重点api:input_register_device

事件处理层:设备驱动最终的目的就是能够与事件处理层的事件驱动相互匹配,
但是在drivers/input目录下有evdev.c事件驱动、mousedev.c事件驱动、joydev.c事件驱动等等,这就是再从分类事件类别
重点api:input_register_handler()

核心层:input.c提供了面向应用的统一接口,注册一个字符设备,并且指定了主设备号是13,以及dev目录下的节点名为“input”
并且建立proc节点,但是这里并没有提供供应用层的fileoperations 接口,同时也没有生成”、input/event_xx”这样的节点,那他们在哪里生成?

上面说道设备驱动和事件处理层有个匹配的过程,当匹配成功后,假如是事件驱动,那么就匹配了evdev.c
此时在该文件的evdev_connect中有如下片段:
dev_set_name(&evdev->dev, "event%d", dev_no);//生成节点名
cdev_init(&evdev->cdev, &evdev_fops);//注册fops操作结构体

其中的%的为dev_no,如下是dev_no的来源,一般是次设备号
dev_no = minor;
/* Normalize device number if it falls into legacy range */
if (dev_no < EVDEV_MINOR_BASE + EVDEV_MINORS)
dev_no -= EVDEV_MINOR_BASE;

所以,真正面对上层的操作被封装才了各个事件处理层,当你去open /dev/input/event_xx的时候就会call到相应的回调函数中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值