1. 在linux内核中实现基于input子系统的按键驱动
2. Android通过EventHub不断读取内核报告的EV_KEY*事件,然后根据key layout文件将其转换成KEYCODE_* 事件
linux内核中关于按键事件的定义在kernel/include/linux/input.h文件里,例如:
#define KEY_UP 103
android源码关于KEYCODE的定义在frameworks/base/core/java/android/view/KeyEvent.java文件里,例如:
public static final int KEYCODE_VOLUME_UP = 24;
注意,在Android平台上编写按键处理程序时,一般使用的是KEYCODE_*码
keylayout文件后缀为*.kl,这些文件在android源码device/$(company)/$(board)/目录下
当然,也可以在线直接把*.kl文件从机器上pull下来,修改之后再push上去。路径是system/usr/keylayout/目录
例如,将内核的KEY_UP事件转换成KEYCODE_VOLNUME_UP事件,可以编写keylayout文件,内容如下:
key 103 VOLUME_UP WAKE
关于keylayout文件的介绍,可以看官方介绍 ---> 点击打开链接