del_timer(&buttons_timer);
input_unregister_device(buttons_dev);
input_free_device(buttons_dev);
}
module_init(buttons_init);
module_exit(buttons_exit);
MODULE_LICENSE("GPL");
输入子系统关键代码:
//1. 分配一个 input_dev 结构体
buttons_dev = input_allocate_device();;
//2. 设置
//2.1 能产生哪类事件 */
set_bit(EV_KEY, buttons_dev->evbit);
set_bit(EV_REP, buttons_dev->evbit);
//2.2 能产生这类操作里的哪些事件: L,S,ENTER,LEFTSHIT
set_bit(KEY_L, buttons_dev->keybit);
set_bit(KEY_S, buttons_dev->keybit);
set_bit(KEY_ENTER, buttons_dev->keybit);
set_bit(KEY_LEFTSHIFT, buttons_dev->keybit);
//3. 注册
input_register_device(buttons_dev);
注册按键设备到输入子系统中,并告知输入子系统该按键设备能产生 KEY 和 REP 事
件,键值为 KEY_L, KEY_S, KEY_ENTER, KEY_LEFTSHIFT。
当有实际的按键动作时,将键值上报给输入子系统。
input_event(buttons_dev, EV_KEY, pindesc->key_val, 0);
input_sync(buttons_dev);
2.3 测试方法
下面来看下如何测试该驱动:
加载该驱动后,在/dev/input 目录下会多出一个 event1 的文件。
# ls -l /dev/input/
crw-rw---- 1 0 0 13, 64 Jan 1 00:00 event0
crw-rw---- 1 0 0 13, 65 Jan 1 00:00 event1
crw-rw---- 1 0 0 13, 63 Jan 1 00:00 mice
crw-rw---- 1 0 0 13, 32 Jan 1 00:00 mouse0