简单注册示例如下:
#include <linux/module.h>
#include <linux/init.h> #include <linux/input.h> #define DRIVER_NAME "my_input_driver" #define DEVICE_NAME "my_input_device" static struct input_dev *input_device; static int my_input_open(struct input_dev *dev) { // 处理设备打开操作 return 0; } static void my_input_close(struct input_dev *dev) { // 处理设备关闭操作 } static int __init my_input_driver_init(void) { int err; // 分配输入设备 input_device = input_allocate_device(); if (!input_device) { pr_err("Failed to allocate input devicen"); return -ENOMEM; } // 设置输入设备的属性 input_device->name = DEVICE_NAME; input_device->phys = "my_input_driver/0"; input_device->id.bustype = BUS_VIRTUAL; // 设置输入设备支持的事件类型和事件码 input_device->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); input_device->keybit[BIT_WORD(KEY_ENTER)] = BIT_MASK(KEY_ENTER); // 设置输入设备的打开和关闭回调函数 input_device->open = my_input_open; input_device->close = my_input_close; // 注册输入设备 err = input_register_device(input_device); if (err) { pr_err("Failed to register input device: %dn", err); input_free_device(input_device); return err; } pr_info("Input device registeredn"); return 0; } static void __exit my_input_driver_exit(void) { // 注销输入设备 input_unregister_device(input_device); input_free_device(input_device); pr_info("Input device unregisteredn"); } module_init(my_input_driver_init); module_exit(my_input_driver_exit); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("Sample Input Driver"); MODULE_LICENSE("GPL"); |
上述示例中,我们定义了一个名为my_input_driver的输入设备驱动程序,它使用Input子系统提供的API来创建和注册输入设备。
在驱动程序的初始化函数my_input_driver_init中,我们首先通过input_allocate_device分配一个输入设备结构体input_device。然后,我们设置输入设备的名称、物理地址和总线类型。接下来,我们指定输入设备支持的事件类型和事件码,这里我们选择了键盘事件,支持Enter键。最后,我们注册输入设备通过调用input_register_device函数进行注册。
在驱动程序的卸载函数my_input_driver_exit中,我们通过input_unregister_device注销输入设备,并通过input_free_device释放分配的输入设备结构体。