1.概述
linux的input子系统用来管理所有的输入类设备,对所有的输入类设备进行抽象,以便更简单的编写输入类设备的驱动程序。
2.应用
/*向内核注册一个只有4键的小键盘*/
static int keyboard_init()
{
/* 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 该设备能够产生哪些按键*/
set_bit(KEY_L, buttons_dev->keybit);//L键
set_bit(KEY_S, buttons_dev->keybit);//S键
set_bit(KEY_ENTER, buttons_dev->keybit);//enter键
set_bit(KEY_LEFTSHIFT, buttons_dev->keybit);//SHIFT键
/* 3. 注册 ,告知内核有了一个新的输入设备*/
input_register_device(buttons_dev);
............
}
/*按下键,进入中断处理程序*/
static irqreturn_t keyboard_int()
{
/*1.向内核报告该设备产生了按键类事件,并告知按下了哪个键*/
input_event(buttons_dev, EV_KEY, pindesc->key_val, 0);
/*2.同步,事件报告完毕*/
input_sync(buttons_dev);
}
3.总结
在编写输入类设备(如键盘、鼠标、触摸屏)的驱动程序时,借助input子系统,将各种输入设备抽象,看成是能够产生事件(如:EV_SYN,EV_KEY,EV_ABS)的事物,然后提供统一的接口来管理设备。linux的这种方式,体现了一种化万物为一物的思想,然后只需要管理这一物。