static int button_init(void)
{
……
input_dev = input_allocate_device();//分配input设备
input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP);
// EV_KEY为要支持的键盘事件
for (i = 0; i < 255; i++)
set_bit(usb_kbd_keycode[i], input_dev->keybit);
//设置支持的键盘码,可根据实际情况注册
input_register_device(input_dev);//注册input设备
}
/*注销*/
static void __exit button_cleanup(void)
{
……
input_unregister_device(input_dev);//注销input设备
}
● 中断处理过程中完成键盘值的获取及input事件的递交
static irqreturn_t button_irq(int irq, void *dev_id, struct pt_regs *regs)
{
……
input_report_key(input_dev, 59, 1); //模拟键盘码F1按下过程
input_report_key(input_dev, 59, 0);
input_sync(input_dev);
}
/*在内核include/linux/input.h中
#define KEY_F1 59
*/
上面给出了简要的过程,大家在具体实现过程中多参考/driver/usb/input/usbkbd.c文件,及注意按键去抖等问题。