TP----Android系统移植之按键驱动篇

Android系统移植之按键驱动篇

[日期:2011-09-25]来源:Linux社区  作者:armeasy[字体:  ]

Android按键的处理是Window Manager负责,主要的映射转换实现在android源代码frameworks/base/libs/ui/EventHub.cpp此文件处理来自底层的所有输入事件,并根据来源对事件进行分类处理,对于按键事件,它首先记录驱动名称,再获取环境变量ANDROID_ROOT为系统路径,默认是/system,定义在android源代码/system/core/rootdir/init.rc文件中。然后查找路径为"系统路径/usr/keylayout/驱动名称.kl"的按键映射文件,如果不存在则默认用路径为"系统路径/usr/keylayout/qwerty.kl"。这个默认的按键映射文件,映射完成后再把经映射得到的android按键码值发给上层应用程序。所以我们可以在内核中定义多个按键设备,然后为每个设备设定不同的按键映射文件,不定义则会默认用qwerty.kl。

有了上面的分析,我们不难发现,上述更改是不可能有效果的,只能越改越不能用。相反,如果仅仅只需要更改某个按键的功能,根本就不用改内核,只需重新定义android系统的gpio-keys.kl即可。

进android系统后找到该文件,


可以发现,在在gpio-keys.kl和qwerty.kl两个文件,因此a ndroid系统会从gpio-keys.kl中查找键值进行映射。里面内容如下:

key 102  HOME              WAKE

key 158   BACK              WAKE

这不正是开发板上android的两个功能键吗?对于第三个POWER键,是用于开关机的,不属android功能键范畴,因此无须映射。

修改按键功能有两种方法:

方法一:直接修改gpio-keys.kl文件的内容,比如我们想将BACK键改成右键,我们只需做如下修改:

key 102  HOME              WAKE

key 106  DPAD_RIGHT       WAKE

注意上面的106以及按键名称,都是从qwerty.kl里面找的,千万不要在linux内核的input.h中查找。DPAD_RIGHT不能更改为RIGHT,否则android无法识别。

方法二:修改内核中mx53_loco.c中的数组如下:

static struct gpio_keys_button loco_buttons[] = {

         GPIO_BUTTON(MX53_nONKEY,KEY_POWER, 1, "power", 0),

         //GPIO_BUTTON(USER_UI1,KEY_BACK, 1, "back", 0),

         GPIO_BUTTON(USER_UI2,KEY_HOME, 1, "home", 0),

         GPIO_BUTTON(USER_UI1,KEY_RIGHT, 1, "right", 0),//test by lqm.

};

再修改上面的gpio-keys.kl文件,内容如下:

key 102  HOME              WAKE

key 106  DPAD_RIGHT       WAKE

方法二相比方法一,多了一个步骤,但是推荐采用方法二,这样更容易理解,也不易混淆。

linux
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值