linux input子系统学习(一)之 input-core

本文介绍了Linux中的input子系统,主要用于处理各种输入设备如keypad和touchpanel的驱动。input子系统实质上是一种字符设备,通过input.c进行封装。关键接口包括input_register_handler(用于注册驱动)和input_register_device(用于注册设备)。每个驱动最多可管理32个设备。
摘要由CSDN通过智能技术生成

      linux中有众多的子系统,input子系统是其中的一种,用来处理一类型的输入设备,例如keypad,touchpanel,mice等等,我目前接触到就只有前2种也只写过前2种的驱动,所以后面的就只介绍到key的驱动以及TP的驱动了。

     input的核心是一个文件,即input.c,(drivers\input),说实在的其实input子系统也是一种字符设备,只不过进行了一下封装。整个input子系统用一个系统框图就可以很好的概括了,当然这个都是大牛的书上写的,抄来的。

                                                                               


static const struct file_operations input_fops = {
	.owner = THIS_MODULE,
	.open = input_open_file,
	.llseek = noop_llseek,
};

static int __init input_init(void)
{
	int err;

	err = class_register(&input_class);                           //会在sys/class/下产生input的目录
	if (err) {
		pr_err("unable to register input_dev class\n");
		return err;
	}

	err = input_proc_init();                                    //会在proc/bus/产生input的目录,以及生成devices以及handlers的文件
	if (err)
		goto fail1;

	err = register_chrdev(INPUT_MAJOR, "input", &input_fops);      //注册一个字符设备,主设备号INPUT_MAJOR = 13,名字是input,相关的操作函数初始化为
	if (err) {                                                     //input_fops
		pr_err("unable to register char major %d", INPUT_MAJOR);
		goto fail2;
	}

	return 0;

 fail2:	input_proc_exit();
 fail1:	class_unregister(&input_class);
	return err;
}

static void __exit input_exit(void)
{
	input_proc_exit();
	unregister_chrdev(INPUT_MAJOR, "input");
	class_unregister(&input_class);
}

subsys_initcall(input_init);                     //subsys_initcall 保证较高优先级初始化
module_exit(input_exit);
由此说明,input子系统也是字符设备。我们知道,当上层应用需要访问input的设备时,必然要调用input的open
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值