输入子系统是所有I/O设备驱动的中间层
Linux内核为了能够处理各种不同类型的输入设备,比如 触摸屏,鼠标 , 键盘 , 操纵杆 ,设计并实现了为驱动层程序的实现提供统一接口函数;为上层应用提供试图统一的抽象层 , 即是Linux 输入子系统 。
软件实现
步骤一、创建输入设备结构体
static struct input_dev *_dev = NULL;
_dev = input_allocate_device();
步骤二、设置该设备将支持哪些事件、哪些按键
//表示能产出按键事件
set_bit(EV_KEY, _dev->evbit);
//表示按键事件中的哪些事件:L、S、ENTER、LEFTSHIFT
set_bit(KEY_L, _dev->keybit);
set_bit(KEY_S, _dev->keybit);
set_bit(KEY_ENTER, _dev->keybit);
set_bit(KEY_LEFTSHIFT, _dev->keybit);
步骤三、将输入设备注册到内核
input_register_device(_dev);
步骤四、当发生事件时上报并同步事件
input_event(_dev, EV_KEY, _curr_btn->key_val, 1);
input_sync(_dev);
步骤五、取消注册输入设备,删除设备
input_unregister_device(_dev);
input_free_device(_dev);
实践验证
在虚拟机上编译生成ko文件,并在开发板上进行安装验证。
步骤一、安装
insmod drv_button.ko
步骤二、按键验证
方法一
hexdump /dev/event1
如果按下按键则会打印
方法二
1)系统没有启动QT
cat /dev/tty1
2)系统启动了QT
1、打开开发板屏幕的Terminal;
2、按下 S0、S2,然后按下S1,即键入了ls指令