input子系统三 核心层和处理器注册

来源:互联网 发布:靠谱欧洲代购淘宝店 编辑:程序博客网 时间:2024/05/29 14:09

一 input字符设备注册

static int __init input_init(void){int err;err = class_register(&input_class);if (err) {pr_err("unable to register input_dev class\n");return err;}err = input_proc_init();if (err)goto fail1;err = register_chrdev_region(MKDEV(INPUT_MAJOR, 0),     INPUT_MAX_CHAR_DEVICES, "input");if (err) {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;}
注册了sysfs接口和proc接口,注册了一个主设备号为13的char设备input。

二 handler处理器注册

static int __init evdev_init(void){return input_register_handler(&evdev_handler);}
int input_register_handler(struct input_handler *handler){struct input_dev *dev;int error;error = mutex_lock_interruptible(&input_mutex);if (error)return error;INIT_LIST_HEAD(&handler->h_list);list_add_tail(&handler->node, &input_handler_list);list_for_each_entry(dev, &input_dev_list, node)input_attach_handler(dev, handler);input_wakeup_procfs_readers();mutex_unlock(&input_mutex);return 0;}

list_add_tail(&handler->node, &input_handler_list);把自己挂在全局的list上,input device register的时候,会遍历这个list,做handler匹配,当然这个匹配时双向的,

所以此时会遍历input_dev_list,为hander找到匹配的dev。没错,匹配时调用的仍然是input_attach_handler(dev, handler)。

原创粉丝点击