linux 输入子系统(4)---- input子系统的初始化
Input子系统的初始化函数为input_init(),如下:
static int __init input_init(void) {int err;input_init_abs_bypass();err = class_register(&input_class);if (err) {printk(KERN_ERR "input: unable to register input_dev class\n");return err;}err = input_proc_init();if (err)goto fail1;err = register_chrdev(INPUT_MAJOR, "input", &input_fops);if (err) {printk(KERN_ERR "input: unable to register char major %d", INPUT_MAJOR);goto fail2;}return 0;fail2: input_proc_exit();fail1: class_unregister(&input_class);return err; }
在这个初始化函数里,先注册了一个名为”input”的类.所有input device都属于这个类.在sysfs中表现就是.所有input device所代表的目录都位于/dev/class/input下面.
然后调用input_proc_init()在/proc下面建立相关的交互文件.
static const struct file_operations input_fops = {.owner = THIS_MODULE,.open = input_open_file, };
打开文件所对应的操作函数为input_open_file.代码如下示:
static int input_open_file(struct inode *inode, struct file *file) {struct input_handler *handler;const struct file_operations *old_fops, *new_fops = NULL;int err;err = mutex_lock_interruptible(&input_mutex);if (err)return err;/* No load-on-demand here? */handler = input_table[iminor(inode) >> 5];if (handler)new_fops = fops_get(handler->fops);mutex_unlock(&input_mutex);/** That's _really_ odd. Usually NULL ->open means "nothing special",* not "no device". Oh, well...*/if (!new_fops || !new_fops->open) {fops_put(new_fops);err = -ENODEV;goto out;}old_fops = file->f_op;file->f_op = new_fops;err = new_fops->open(inode, file);if (err) {fops_put(file->f_op);file->f_op = fops_get(old_fops);}fops_put(old_fops); out:return err; }
iminor(inode)为打开文件所对应的次设备号.input_table是一个struct input_handler全局数组.在这里.它先设备结点的次设备号右移5位做为索引值到input_table中取对应项.从这里我们也可以看到.一 个handle代表1<<5个设备节点(因为在input_table中取值是以次备号右移5位为索引的.即低5位相同的次备号对应的是同一 个索引).在这里,终于看到了input_talbe大显身手的地方了.input_talbe[ ]中取值和input_talbe[ ]的赋值,这两个过程是相对应的.
转载于:https://www.cnblogs.com/hello2mhb/p/3366751.html
linux 输入子系统(4)---- input子系统的初始化相关推荐
- linux 设备驱动 百度,Linux设备驱动之input子系统
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 作者:武汉华嵌嵌入式培训中心 讲师 李家凯 对于输入类设备如键盘.鼠标.触摸屏之类的Linux驱动,内核提供input子系统,使得这类设备的处理变得非常便 ...
- linux驱动系列学习之input子系统(二)
一.input子系统简介 linux系统支持的输入设备众多,例如键盘.鼠标.按键.触摸屏等,linux系统通过抽象出一个input子系统去支持众多的输入设备.input子系统分为三层:上层:输入事件处 ...
- driver: Linux设备模型之input子系统详解
本节从整体上讲解了输入子系统的框架结构.有助于读者从整体上认识linux的输入子系统.在陷入代码分析的过程中,通过本节的知识能够找准方向,明白原理. 本节重点: 输入子系统的框架结构 各层对应内核中的 ...
- linux编译input驱动,Linux驱动开发之input子系统
本文对mousedev.Amimouse和input子系统进行分析,旨在提纲挈领,给出它们之间的调用关系(或者说关联).阅读本文,需要与阅读Linux 2.6内核源码交叉进行,除非你是超人. 背景: ...
- 三个子系统_「正点原子Linux连载」第五十八章Linux INPUT子系统实验(一)
1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 第五十八章Linux INPUT子系统实 ...
- Linux按键输入实验(体验一下输入驱动,实际开发使用input子系统处理)
目录 Linux下按键驱动原理(使用原子操作) 硬件原理图分析 实验程序编写 修改设备树文件 按键驱动程序编写 编写测试APP(循环读取按键值) 运行测试 编译驱动程序和测试APP 运行测试(whil ...
- linux input输入子系统分析《四》:input子系统整体流程全面分析
1 input输入子系统整体流程 本节分析input子系统在内核中的实现,包括输入子系统(Input Core),事件处理层(Event Handler)和设备驱动层.由于上节代码讲解了设备 ...
- linux输入子系统概述,Linux输入子系统(Input Subsystem)
Linux 的输入子系统不仅支持鼠标.键盘等常规输入设备,而且还支持蜂鸣器.触摸屏等设备.本章将对 Linux 输 入子系统进行详细的分析. 一 前言 输入子系统又叫 input 子系统.其构建非常灵 ...
- Linux输入事件类型EV_SW,Linux的input输入子系统:总体框架
一.input输入子系统总体框架 Linux输入子系统将输入驱动抽象为三层:设备驱动层.核心层.事件处理层. 设备驱动层:将底层的硬件输入事件转化为统一事件形式,向输入核心(Input Core)汇报 ...
最新文章
- JAVA - package与import解析(一)
- 有名信号量sem_open和内存信号量sem_init创建信号量的区别
- 常见的集成逻辑门(CMOS\TTL\ECL)
- ubuntu/wireshark --Lua: Error during loading: [string /usr/share/wireshark/init.lua]:45问题解决
- 文件系统性能测试工具 IOZONE工具
- 小米10 twrp刷入开发版
- Unity跳一跳小游戏简单代码
- 史蒂夫·乔布斯的故事:启示录还是警世钟?
- python打印日历_python 打印日历
- JavaScript妙用
- 混合云,让你看的清清楚楚明明白白真真切切
- containerd环境下build镜像
- 好用的ROS开发软件(持续更新~)
- JVM#Java高墙之GC与内存分配策略
- Thiago2(TPO AI.ROSTO):集成式AI换脸软件(Autodesk Flame)
- 2021-11-01第一节课总结
- 1083: 阶乘尾数零的个数
- Altium Designer使用技巧之相同模块复用
- Golang标准库CHM格式文档
- uno牌的玩法图解_UNO一起优诺出牌套路及玩法规则介绍:经典场规则及小技巧