您的位置:首页 > 运维架构 > Linux

Linux input子系统分析 输入子系统核心分析

2013-11-28 20:15 197 查看
一. 输入子系统核心分析。

1.输入子系统核心对应与/drivers/input/input.c文件,这个也是作为一个模块注册到内核的。所以首先分析模块初始化函数。

1.static int __init input_init(void)

2.{

3. int err;

4.

5. input_init_abs_bypass();

6. //这个暂时没有发现是做什么的

7. err = class_register(&input_class);

8. //向内核注册一个类,用于linux设备模型。注册后会在/sys/class下面出现input目录

9. if (err) {

10. printk(KERN_ERR "input: unable to register input_dev class\n");

11. return err;

12. }

13.

14. err = input_proc_init();

15. //和proc文件系统有关,暂时不管

16. if (err)

17. goto fail1;

18.

19.

20. err = register_chrdev(INPUT_MAJOR, "input", &input_fops);

21. //注册字符设备,接口是2.4内核的。以主设备号INPUT_MAJOR,次设备号0-255,注册266个设备,说明input设备最大只能有255个

22. if (err) {

23. printk(KERN_ERR "input: unable to register char major %d", INPUT_MAJOR);

24. goto fail2;

25. }

26.

27. return 0;

28.

29. fail2: input_proc_exit();

30. fail1: class_unregister(&input_class);

31. return err;

32.}

这个函数主要是注册了字符设备,这里和杂项设备的原理是一样,所以input设备也是一类字符设备,只不过操作方法交给了输入子系统。从这里可以看出无论linux设备驱动这块有多复杂,他们都是由一些基本的组件构成的,都是ldd3所讲的基本驱动程序模型。

2. 输入子系统的核心其他部分都是提供的接口,向上连接事件处理层,向下连接驱动层。

向下对驱动层的接口主要有:

input_allocate_device 这个函数主要是分配一个input_dev接口,并初始化一些基本的成员,这就是我们不能简单用kmalloc分配input_dev结构的原因,因为缺少了一些初始化。

input_unregister_device 注册一个input设备

input_event 这个函数很重要,是驱动层向input子系统核心报告事件的函数,在事件传递过程中再分析。

input_allocate_device 分配并初始化一个input_dev结构

向上对事件处理层接口主要有:

input_register_handler 注册一个事件处理器

input_register_handle 注册一个input_handle结构

本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-09/43187p3.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: