简单注册示例如下: #include #include #include
#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 device\n"); 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: %d\n", err); input_free_device(input_device); return err; }
pr_info("Input device registered\n");
return 0; }
static void __exit my_input_driver_exit(void) { // 注销输入设备 input_unregister_device(input_device); input_free_device(input_device);
pr_info("Input device unregistered\n"); }
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释放分配的输入设备结构体。
|