iMX51的键盘布局文件可能在device/fsl/imx51_bbg目录下mxckpd.kl。
在文件frameworks/base/libs/ui/EventHub.cpp的int EventHub::openDevice(const char *deviceName)函数中导入这个文件。
status_t status = device->layoutMap->load(keylayoutFilename);
openDevice(const char *deviceName)函数传入的参数deviceName为“/dev/input/event0”,通过ioctl(fd, EVIOCGNAME(sizeof(name) - 1), &name)获取的name为"mxckpd",经搜索,这个名字大致来源于kernel_imx/drivers/input/keyboard/mxc_keyb.c文件
#define MOD_NAME "mxckpd"
.....
static int mxc_kpp_probe(struct platform_device *pdev)
{
....
mxckbd_dev->keycode = (void *)mxckpd_keycodes;
mxckbd_dev->keycodesize = sizeof(mxckpd_keycodes[0]);
mxckbd_dev->keycodemax = mxckpd_keycodes_size;
mxckbd_dev->name = "mxckpd";
mxckbd_dev->id.bustype = BUS_HOST;
mxckbd_dev->open = mxc_kpp_open;
mxckbd_dev->close = mxc_kpp_close;
retval = input_register_device(mxckbd_dev);
....
}
另外,更改源码系统device/fsl/imx51_bbg目录下mxckpd.kl文件,重新编译Android,不用编译kernel有效。
在iMX51设备上,发现有\system\usr\keylayout\mxckpd.kl文件和\system\usr\keychars\mxckpd.kcm.bin文件。