对应input core,前面我一直在夸她的好,对于一个大家都不认识的家伙,我这样说她,是不是显的特虚,好了,为了证明她并不是那么的虚,我不得不拿出前面第二节中出现过的两行代码来看看:

akm->input_dev = input_allocate_device();

err = input_register_device(akm->input_dev);

没有错,这正是我们要把akm实现为一个input 设备的仅有的几行代码中的两行。

第一行,申请一个input设备:在内核中分配相应的内存空间,并初始化它。

第二行,把这个input设备注册到linux内核中,从此这个设备在内核中生根发芽,快乐幸福的和他的handler过着属于自己的小日子(虽然handler不一定属于她一个人,不过她不在乎)。

作为一个男人,我还是得负责任为我们的input core说明一下,input_allocate_device()和input_register_device();都来自我们的 input core。现在知道她的伟大了吧。你看看,我们写一个input设备驱动本来就那么几行代码,而这仅有的几行代码中还调用了来自内核的函数。我不得不说,input core ,你真给力。

好了,我们先来研究一下第一个函数 input_allocate_device()。(linux内核源码目录linux-2.6.29/drivers/input/input.c文件中)

struct input_dev *input_allocate_device(void)

{

1 struct input_dev *dev;

2 dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL);

3 if (dev) {

4     dev->dev.type = &input_dev_type;

5     dev->dev.class = &input_class;

6     device_initialize(&dev->dev);

7     mutex_init(&dev->mutex);

8     spin_lock_init(&dev->event_lock);

9     INIT_LIST_HEAD(&dev->h_list);

10    INIT_LIST_HEAD(&dev->node);

12    __module_get(THIS_MODULE);

}

15 return dev;

}

第1行,申明一个input_dev结构体变量;

第2行,kzalloc()一个陌生的家伙,它其实等于kmalloc+memset。看到kmalloc相信大家觉得眼熟,没错,他的弟弟就是malloc,而kmalloc对应于内核空间的内存分配函数。好了,第二行代码的意思相信大家也明白了:在内核空间开辟一段大小为sizeof(struct input_dev)大小的内存区,并把它初始化为0。后面的GFP_KERNEL为分配的标志,即为一个常规的内存分配,类似的还有GFP_DMA,表示分配的内存能供dma使用,GFP_ATOMIC分配内存时,不允许睡眠,一般用在中断中,大家想想,如果在一个中断处理程序中,使用GFP_KERNEL标志分配内存,发现内存不足,就一直睡在那儿等待,你受得了吗(敲了一下键盘,发现过了2分钟系统才反应过来,相信这严重影响到了你和漂亮mm网聊的兴趣了)所以在中断处理函数中我们不能使用GFP_KERNEL标志分配内存。

分配到内存后,用dev指向这段内存。

第3行,判断内存分配是否成功,若成功,则进入到4—12行的对dev的初始化工作。否则,咱们啥也别说了,说了也白说,退出,走人。

第4到6行,对input设备的内嵌dev设备进行初始化。

第7到8行,初始化该dev的互斥量和锁,为防止对dev的并发访问。

第9、10两行,对input设备中的两个链表结构头进行初始化。

好了,此函数分析到此,一旦顺利进行,则该input设备已经出落成来一个亭亭玉立的美少女了,注意了,哥们,她现在还是单身的。接下来要做的事,嘿嘿,想必大家会比我更清楚了。网名为“洞房不败”的兄弟开口了:“难道是要把她卖出去”,兄弟高雅点行不,不叫卖,那叫嫁,预知她是下嫁何家,请听下回分解。

闲聊linux中的input设备(4) 她一直默默地在背后支持着你相关推荐

  1. 闲聊linux中的input设备(1)Linux中的设备大家族

    用过linux的哥们都知道,linux所有的设备都是以文件的形式实现的,要访问一个设备,我们只需要以open.read.write的形式对设备的进行操作就可以了.在linux系统的/dev目录下,罗列 ...

  2. 闲聊linux中的input设备(转)

    转自:http://blog.csdn.net/lmm670/article/details/6080998 用过linux的哥们都知道,linux所有的设备都是以文件的形式实现的,要访问一个设备,我 ...

  3. 闲聊linux中的input设备

    用过linux的哥们都知道,linux所有的设备都是以文件的形式实现的,要访问一个设备,我们只需要以open.read.write的形式对设备的进行操作就可以了.在linux系统的/dev目录下,罗列 ...

  4. linux 内核 input,初识linux中的input设备

    原标题:初识linux中的input设备 究竟何谓input设备,相信市场上卖宠物小狗的大妈都能一口答出来,你能不知道么?对,就是我们传说中的输入设备.说到输入设备,相信用过电脑的兄弟都不会陌生了,即 ...

  5. linux中I/O设备分为两类:字符设备和块设备。

    Linux中I/O设备分为两类:字符设备和块设备.两种设备本身没有严格限制,但是,基于不同的功能进行了分类. (1)字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取.相反,此类设备 ...

  6. 语音控制面板 通过linux_在Linux中,通常把设备作为( )来处理.

    [单选题] [填空题] [单选题]文件并不是真正包含声音信息,只包含声音索引信息 [简答题]What are the 4 components of this country? [简答题]似曾相识 [ ...

  7. linux读写红外线设备,Linux中的红外线设备(转)

    Linux中的红外线设备(转)[@more@]本文主要绍介有关Infrared与Linux之间的关系,对Infrared的种类.Linux Infrared支持的协议.架构等说明.Linux IrDA ...

  8. linux中怎么查看设备,linux怎么查看硬件设备信息

    你们知道怎么直接查看Linux中的硬件信息吗?下面是学习啦小编带来的关于linux怎么查看硬件设备信息的内容,欢迎阅读! linux怎么查看硬件设备信息? 建议直接进主板的bios查看硬件信息, li ...

  9. Linux 中识别 USB 设备名字的 4 种方法

    对于初学者来说,在 Linux 系统里你必须掌握的技术之一就是识别出插入系统里的各种设备.这也许是你的系统硬盘.外部的存储设备或者是可移动设备,比如 USB 设备或 SD 闪存卡等. 现如今,使用 U ...

  10. linux中usb设备名,Linux 中识别 USB 设备名字的 4 种方法

    摘要: 对于初学者来说,在 Linux 系统里你必须掌握的技术之一就是识别出插入系统里的各种设备.这也许是你的系统硬盘.外部的存储设备或者是可移动设备,比如 USB 设备或 SD 闪存卡等. 现如今, ...

最新文章

  1. 云安全趋势:IaaS?谢了,我要 PaaS
  2. 【电商日志项目之七】项目调优
  3. MySQL范围查找时,索引失效问题探究
  4. Qt Creator将UI项目转换为应用程序
  5. JavaScript入门(part6)--运算符
  6. linux消息类型,heartbeat消息类型
  7. Android之TabLayout+ViewPager2+FragmentStateAdapter实现带数字变化的TAB选项
  8. 线性代数一之矩阵转向量随机化求解——神奇的矩阵(BZOJ)+向量内积
  9. 深入浅出 Java CMS 学习笔记
  10. leetcode867. 转置矩阵
  11. Python操作Word文档的节属性和页眉/页脚
  12. azure上传excel_使用MS Excel访问Azure中的关系SQL数据库
  13. 一题多解(四)—— 数组中唯一出现 2 次的数
  14. Sqlist 插入、删除元素
  15. C# chart控件使用方法
  16. 联想笔记本windows10,点击蓝牙显示无法连接
  17. python抢淘宝的东西-Python 实现毫秒级淘宝抢购脚本的示例代码
  18. MVC jQuery表单验证
  19. 华东理工大学的计算机系,华东理工大学计算机系介绍
  20. Win10显卡跑不满?是时候给系统洗洗澡了,换系统提高GPU利用率

热门文章

  1. Windows超级管理器
  2. 台式计算机刚换的显示屏怎么设置,如何设置双屏显示(笔记本电脑双屏切换的快捷键)...
  3. 农商银行计算机岗笔试题,广东农商银行金融科技岗笔试考什么?
  4. odoo14 Botton按钮标签属性详解及按钮图标使用
  5. 计算机中英字幕精品教程合集
  6. nexus9刷机全记录
  7. 【RL】同策略(on-policy)与异策略(off-policy)
  8. 如何用计算机做大爆炸模拟,法国完成首个宇宙结构计算机模型 模拟大爆炸至今...
  9. matlab微积分如何计算器,如何用matlab对这个函数进行积分。 请问这个公式是如何算出来的?使用微积分吗?...
  10. (11)企业合并长期股权投资