Linux input子系统分析---3、输入子系统核心分析

一.  输入子系统核心分析。

    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结构
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值