Linux input子系统分析---3、输入子系统核心分析
2013-08-05 22:29
274 查看
一. 输入子系统核心分析。
1.输入子系统核心对应与/drivers/input/input.c文件,这个也是作为一个模块注册到内核的。所以首先分析模块初始化函数。
static int __init input_init(void)
{
int err;
input_init_abs_bypass();
//这个暂时没有发现是做什么的
err = class_register(&input_class);
//向内核注册一个类,用于linux设备模型。注册后会在/sys/class下面出现input目录
if (err) {
printk(KERN_ERR "input: unable to register input_dev class\n");
return err;
}
err = input_proc_init();
//和proc文件系统有关,暂时不管
if (err)
goto fail1;
err = register_chrdev(INPUT_MAJOR, "input", &input_fops);
//注册字符设备,接口是2.4内核的。以主设备号INPUT_MAJOR,次设备号0-255,注册266个设备,说明input设备最大只能有255个
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设备也是一类字符设备,只不过操作方法交给了输入子系统。从这里可以看出无论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结构
1.输入子系统核心对应与/drivers/input/input.c文件,这个也是作为一个模块注册到内核的。所以首先分析模块初始化函数。
static int __init input_init(void)
{
int err;
input_init_abs_bypass();
//这个暂时没有发现是做什么的
err = class_register(&input_class);
//向内核注册一个类,用于linux设备模型。注册后会在/sys/class下面出现input目录
if (err) {
printk(KERN_ERR "input: unable to register input_dev class\n");
return err;
}
err = input_proc_init();
//和proc文件系统有关,暂时不管
if (err)
goto fail1;
err = register_chrdev(INPUT_MAJOR, "input", &input_fops);
//注册字符设备,接口是2.4内核的。以主设备号INPUT_MAJOR,次设备号0-255,注册266个设备,说明input设备最大只能有255个
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设备也是一类字符设备,只不过操作方法交给了输入子系统。从这里可以看出无论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 输入(input)子系统架构分析
- linux input输入子系统分析《一》:初识input输入子系统
- linux input输入子系统分析《三》:S3C2440的触摸屏驱动实例
- linux input输入子系统分析《二》:s3c2440的ADC简单驱动实例分析
- linux驱动——input输入子系统(1)—输入子系统核心层(Input Core)
- linux input输入子系统分析《三》:S3C2440的触摸屏驱动实例
- Linux 输入(input)子系统架构分析
- linux input输入子系统分析《四》:input子系统整体流程全面分析
- linux input输入子系统分析《三》:S3C2440的触摸屏驱动实例
- linux input输入子系统分析《四》:input子系统整体流程全面分析
- linux设备驱动之输入(input)子系统——核心层实现
- linux 输入子系统(2)----简单实例分析系统结构(input_dev层)
- linux驱动—input输入子系统—The simplest example(一个最简单的实例)分析(1)
- linux input输入子系统分析《三》:S3C2440的触摸屏驱动实例
- linux input输入子系统分析《一》:初识input输入子系统
- linux input输入子系统分析《二》:s3c2440的ADC简单驱动实例分析
- linux input输入子系统分析《一》:初识input输入子系统
- linux3.10.x的input输入子系统流程分析<一>
- linux input输入子系统分析《四》:input子系统整体流程全面分析
- input子系统的输入核心层源码分析