当前位置: 首页 > 编程日记 > 正文

input core input.c (1)

drivers/input/input.c

就是所谓的input的核心程序。

分析这个文件,先从input_init开始。

   1:  static int __init input_init(void)
   2:  {
   3:  err = class_register(&input_class);
   4:  err = input_proc_init();
   5:  err = register_chrdev(INPUT_MAJOR, "input", &input_fops);
   6:  }

__init 把它放到了init.text段,初始化的时候会调用。函数去掉检查的情况,也就这么几行。class_register注册了一个device model里的class类型。具体会在__class_register里面调到

   1:  /*对class的私有数据进行了初始化工作*/
   2:  /*cp是一个class_private类型,class的私有类型*/    
   3:  cp = kzalloc(sizeof(*cp), GFP_KERNEL);
   4:  /*初始化了klist的get/put函数,实际调用了get_device和put_device*/
   5:  klist_init(&cp->class_devices, klist_class_dev_get, klist_class_dev_put);
   6:  INIT_LIST_HEAD(&cp->class_interfaces);
   7:  kset_init(&cp->class_dirs);
   8:  __mutex_init(&cp->class_mutex, "struct class mutex", key);
   9:  error = kobject_set_name(&cp->class_subsys.kobj, "%s", cls->name);
  10:      
  11:  /* set the default /sys/dev directory for devices of this class */
  12:  if (!cls->dev_kobj)
  13:      cls->dev_kobj = sysfs_dev_char_kobj;
  14:  /*注册kset,里面要先初始化kset,在这里获取kobject,就建立了目录了*/
  15:  error = kset_register(&cp->class_subsys);
  16:  /*这里建立attribute文件,遍历它的attribute,熟悉device model的话就知道attribute其实就对应着文件*/
  17:  error = add_class_attrs(class_get(cls));
  18:   
再回来到input_init中,下一个input_proc_init,这个函数主要建立input字系统在proc文件系统中的目录,文件,注册相应的fops.

这个很简单:

   1:  /*在proc下建立了input的目录*/    
   2:  proc_bus_input_dir = proc_mkdir("bus/input", NULL);
   3:  /*在bus/input下建立两个文件devices和handlers,并注册了它们的fops,这两个fops是在input.c中定义的,fops的函数也是在input.c中定义.*/
   4:  entry = proc_create("devices", 0, proc_bus_input_dir,
   5:              &input_devices_fileops);
   6:  entry = proc_create("handlers", 0, proc_bus_input_dir,
   7:              &input_handlers_fileops);
   8:      

下面一个register_chardev注册了一个主设备号为INPUT_MAJOR,次设备号从0-256,文件操作符为input_fops的字符设备.

看完了input_init,再看看input.c中,后半部分就是fops的函数,前面是一些接口函数,中间是

handle和handler函数.

待续

转载于:https://www.cnblogs.com/linuxkernel/archive/2011/04/07/2008810.html

相关文章:

Swift解读专题四——字符串与字符

2019独角兽企业重金招聘Python工程师标准>>> Swift解读专题四——字符串与字符 一、引言 Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架…

非模态对话框的销毁

前面写过一篇关于模态和非模态对话框的文章,关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值 。文章末尾我遗留了一个问题,即当销毁非模态对话框后,需要置创建该非模态对话框的指针为NULL,但是具体是怎么操作呢&a…

LAMP兄弟连PHP课程学习笔记 第二天 PHP中使用变量

2019独角兽企业重金招聘Python工程师标准>>> 一、变量的介绍 变量:是指临时储存值的容器,这个值可以是数字或者文本或者其他组合。可以在程序使用的过程中更改。 二、变量的声明 1、如果用到的数据需要多次被调用时就声明为变量,P…

清华孵化,打造智能驾驶感控平台,超星未来获千万A轮融资

2020年5月14日,智能驾驶初创企业北京超星未来科技有限公司今天宣布已完成数千万元A轮融资,由恒大高科技领投,中关村前沿基金、和米资本、宝钜投资及图灵创投进行跟投。本轮融资将帮助超星未来在人才端和研发端持续投入,通过软硬件…

71 mac boook pro 无 gpu 下caffe 安装

71 mac boook pro 无 gpu 下caffe 安装 1.首先安装homebrew工具,相当于Mac下的yum或apt ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2.安装Caffe依赖 $ brew install -vd snappy leveldb gflags glog s…

比较有趣的一个笔试题目

这2天忙于找工作,看.NET笔试题目的时,发现有些笔试题目还是比较有趣的,虽然考的都是基础,但是稍有不慎还是会进入圈套。以下面一个题目为例,听说是晕倒了一群人 - - classProgram { staticvoidMain(string[]…

82年 AI程序员征婚启示火了!年薪百万,女生神回复

最近在某社区,一则程序员征婚启示火了!很多女生在评论区表示“全中”,想交流看看。然后评论区就炸了,有人恶意说yp,有人说看中了楼主的钱。笔者一翻,发现楼主果然无意中透露了百万年薪收入,虽然…

MFC给按钮添加皮肤

其实这也很简单,但是毕竟是因为我现在已经做出来了,当时还是查了一些资料的。废话不多说,直接上代码: 首先在类中声明: HBITMAP pausehBitmap; //用于暂停按钮的皮肤 然后将资源图片添加至资源视图中&#xff0…

Python全栈开发day2

1、python种类和区别 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。 Jyhton Python的…

16分钟优化mRNA疫苗稳定性! 百度AI算法LinearDesign问世

新冠病毒全球累计确诊已超过400万人,疫苗是终结疫情的关键胜负手。在所有正在研发的疫苗路径中,研发速度更快、更具潜力的mRNA疫苗作为一种新兴技术受到了国内外的重点关注。但同时,mRNA疫苗由于稳定性不足容易在保存、运输中降解&#xff0c…

控制台打印汉字的方法

wstring gL"自动定理证明"; wstring sL"自动定理证明器"; EditDistance editdistance(g,s); //int distanceleneditdistance.CalEditDistance(); wcout.imbue(locale("chs")); set<string>words; editdistance.GetDictionary(words); O…

模态对话框的父窗口设置

我的毕业设计基本是搞完了&#xff0c;那么最近几天在做一些测试和修改。其中就有一个问题折腾了我好久&#xff0c;今天才发现&#xff0c;原来是这么回事。 我创建了一个非模态的子对话框&#xff0c;然后在这个子对话框中又创建了一个模态对话框&#xff0c;结果意外的是点…

XSD标准架构-----xsd:element 元素详解

声明一个元素。 <elementabstract Boolean : falseblock (#all | List of (extension | restriction | substitution))default stringfinal (#all | List of (extension | restriction))fixed stringform (qualified | unqualified)id IDmaxOccurs (nonNegativeInte…

VS2010使用Skin++

转载自http://blog.sina.com.cn/s/blog_5d23890b0100icjj.html。 Skin的使用 一.使用皮肤 将SkinPPWTL.lib 、skinppwtl.dll 、SkinPPWTL.h三个文件及相应皮肤&#xff08;**.ssk&#xff09;拷贝至工程文件夹下&#xff1b;一般还要将这些文件放在Debug文件夹下。 1.在(VC…

美翻朋友圈:用Python生成蒙太奇马赛克图片

题图 | 视觉中国来源 | ZackSock&#xff08;ID:ZackSock&#xff09;我们有时候会听到这么一个词--“蒙太奇”&#xff0c;但却不知道这个词是什么意思。蒙太奇原为建筑学术语&#xff0c;意为构成、装配。而后又延伸为一种剪辑理论&#xff1a;当不同镜头拼接在一起时&#x…

在SQL Server 2008中配置文件流(FILESTREAM)

SQL Server 2008推出了一个新的特性叫做文件流(FILESTREAM)&#xff0c;它使得基于SQL Server的应用程序可以在文件系统中存储非结构化的数据&#xff0c;例如文档、图片、音频、视频等等。文件流主要将SQL Server数据库引擎和新技术文件系统(NTFS)集成在一起;它主要以varbinar…

mysql limit offset

Java代码 SELECT keyword FROM keyword_rank WHERE advertiserid59 order by keyword LIMIT 2 OFFSET 1; 比如这个SQL &#xff0c;limit后面跟的是2条数据&#xff0c;offset后面是从第1条开始读取 Java代码 SELECT keyword FROM keyword_rank WHERE advertiserid59 order …

获取磁盘符信息

项目中有个子模块是ftp客户端&#xff0c;需要罗列本地各个磁盘符&#xff0c;比如C盘、D盘、E盘、F盘。然后进行一些相关的上传下载就比较方便&#xff0c;具体样子如下所示&#xff1a; 需要利用一个Combox控件实现。 废话不多说&#xff0c;先上代码&#xff1a; void …

成为计算机视觉工程师的第一个月,我都学会了什么?

作者 | Richmond Alake译者 | 弯月题图 | 自视觉中国出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;我写这篇文章的目的是为了向那些没有接触过机器学习行业的人们介绍一下我作为计算机视觉工程师第一个月以来的体验&#xff0c;希望这些内部信息能够让你…

天然良方对付小病

打嗝、口臭、消化不良……我们的身体时常会受到一些小毛病的困扰。20位来自美国各大医院的权威医生在美国《预防》杂志网站上发表文章&#xff0c;向读者介绍了一些纯天然的便捷方法&#xff0c;来快速应对这些小病。 生姜止吐。先用热水冲泡生姜片&#xff0c;过滤后把姜汤倒在…

Spring中使用Schedule调度

在spring中两种办法使用调度&#xff0c;以下使用是在spring4.0中。 一、基于application配置文件&#xff0c;配置入下&#xff1a; 1 <bean id"jobDetail" class"org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">…

DNS域名解析优化之tinydns/djbdns篇——测试篇

要开始还债了。 今天整理了一下一套bind9的配置&#xff0c;把记录都清理了一番。想了想&#xff0c;顺带安装了个geoipdns来做性能测试。整理记录的时候用bind-to-tinydns转换了一下记录格式。这些过程以后再说。 NS服务器是同一台Dell PowerEdge 2950。先启动的geoipdns&…

使用Combox控件的一个问题

Combox控件是MFC里边一个比较常用的控件&#xff0c;基本可以看成是一个文本框和一个下拉列表组合而成。但是我在用的时候碰到了一个问题&#xff0c;当我用AddString()函数加了4,5个字符串后&#xff0c;运行之后点击下拉箭头并没有下拉框的显示&#xff0c;或者说显示不出来。…

深度学习基础总结,无一句废话(附完整思维导图)

作者 | Python与算法社区责编 | Carol封图 | CSDN 付费下载于自视觉中国线型回归预测气温、预测销售额、预测商品价格等模型&#xff1a;权重&#xff0c;偏差模型训练&#xff1a;feed 数据学习模型参数值&#xff0c;使得误差尽可能小训练集、测试集、验证集、样本、标签、特…

unity, monoDevelop ide 代码提示不起作用的解决方法

monoDevelop ide 代码提示不起作用&#xff0c;可能是因为ide里索引了一些不存在的文件&#xff0c;检查一下solution窗口里是否有文件变红&#xff0c;如下图中springControlEx.cs。将变红的文件remove掉&#xff0c;然后去unity菜单中点File->Save Project。

DeeCamp 2020 赛题大公开!快来看你想选哪个

DeeCamp 2020 开放性竞赛赛题来啦&#xff0c;快来看看有没有你感兴趣的题目&#xff01;加入DeeCamp2020&#xff0c;你将和来自全球的优秀小伙伴组队挑战真实世界的难题&#xff0c;还能冲刺大奖。五大赛道&#xff0c;14个新颖赛题&#xff0c;总有一款适合你&#xff01;De…

Combox控件下拉选择不同值触发的动作响应

项目中需要根据combox控件下拉列表选择不同的值&#xff0c;然后能触发相应的动作。比如我的项目中&#xff0c;通过combox空间的下拉列表选择不同的C盘&#xff0c;D盘&#xff0c;E盘&#xff0c;F盘&#xff0c;然后能在list控件中把各个盘符的文件目录列出来。 那么触发…

不用se11创建表结构,作smartforms

Call form时不用传内表&#xff0c;切记。 1。在Global Definitions->types页面里输&#xff1a; types:begin of wa_test, matnr like mara-marnt, maktx like makt-maktx, end of wa_test. types:it_test type wa_test occurs 1. 2. 在Global Definitions->Global Data…

linux入门(三)常见Linux指令及其用法

一、上回说到说到Linux的shell指令运行的原理&#xff0c;这回我们来看看Linux中shell的权限管理&#xff0c;所谓的“权限”是指某一类人做某一件事的权利。在shell中这一类人被分为了三种&#xff1a;&#xff08;1&#xff09;文件拥有者user&#xff08;2&#xff09;文件拥…

设置Enter键为默认键

进行MFC编程中&#xff0c;很多时候需要设置快捷键&#xff0c;比如我的项目中&#xff0c;播放器的实现&#xff0c;需要快进、快退、播放、暂停等&#xff0c;除了具体的按钮操作外应该还能通过键盘的快捷键来进行操作。 关于如何设置一个菜单的快捷键或是一个按钮的快捷键&…