一 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;
- }
二 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)。
本文介绍了Linux内核中输入字符设备的注册过程,包括sysfs和proc接口的注册,以及主设备号为13的char设备input的注册。此外,还详细解释了处理器handler的注册流程,包括使用双向匹配方式来寻找匹配的设备。
2630

被折叠的 条评论
为什么被折叠?



