安卓系统移植之按键移植.docx

上传人:b****6 文档编号:7808402 上传时间:2023-01-26 格式:DOCX 页数:7 大小:16.61KB
下载 相关 举报
安卓系统移植之按键移植.docx_第1页
第1页 / 共7页
安卓系统移植之按键移植.docx_第2页
第2页 / 共7页
安卓系统移植之按键移植.docx_第3页
第3页 / 共7页
安卓系统移植之按键移植.docx_第4页
第4页 / 共7页
安卓系统移植之按键移植.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

安卓系统移植之按键移植.docx

《安卓系统移植之按键移植.docx》由会员分享,可在线阅读,更多相关《安卓系统移植之按键移植.docx(7页珍藏版)》请在冰豆网上搜索。

安卓系统移植之按键移植.docx

安卓系统移植之按键移植

这一部分主要是移植android的键盘和按键

(1)Android使用标准的linux输入事件设备(/dev/input目录下)和驱动,按键定义在内核include/linux/input.h文件中,

按键定义形式如下:

#defineKEY_ESC1

#defineKEY_12

#defineKEY_23

(2)内核中(我的平台是arch/arm/mach-mmp/merlin.c文件)中按键的定义如下形式:

staticstructgpio_keys_buttonbtn_button_table[]={

[0]={

.code=KEY_F1,

.gpio=MFP_PIN_GPIO2,

.active_low=1,/*0fordown0,up1;1fordown1,up0*/

.desc="H_BTNbutton",

.type=EV_KEY,

/*.wakeup=*/

.debounce_interval=10,/*10msecjitterelimination*/

},

[1]={

.code=KEY_F2,

.gpio=MFP_PIN_GPIO3,

.active_low=1,/*0fordown0,up1;1fordown1,up0*/

.desc="O_BTNbutton",

.type=EV_KEY,

/*.wakeup=*/

.debounce_interval=10,/*10msecjitterelimination*/

},

[2]={

.code=KEY_F4,

.gpio=MFP_PIN_GPIO1,

.active_low=1,/*0fordown0,up1;1fordown1,up0*/

.desc="S_BTNbutton",

.type=EV_KEY,

/*.wakeup=*/

.debounce_interval=10,/*10msecjitterelimination*/

},

};

staticstructgpio_keys_platform_datagpio_keys_data={

.buttons=btn_button_table,

.nbuttons=ARRAY_SIZE(btn_button_table),

};

staticstructplatform_devicegpio_keys={

.name="gpio-keys",

.dev={

.platform_data=&gpio_keys_data,

},

.id=-1,

};

上面定义是将MFP_PIN_GPIO2这个GPIO口的按键映射到Linux的KEY_F1按键,MPF_PIN_GPIO3映射到KEY_F2,MFP_PIN_GPIO1映射到KEY_F4

(3)上面

(2)步实现了从硬件GPIO口到内核标准按键的映射,但是android并没有直接使用映射后的键值,而且对其再进行了一次映射,从内核标准键值

到android所用键值的映射表定义在android文件系统的/system/usr/keylayout目录下。

标准的映射文件为qwerty.kl,定义如下:

key399GRAVE

key21

key32

key43

key54

key65

key76

key87

key98

key109

key110

key158BACKWAKE_DROPPED

key230SOFT_RIGHTWAKE

key60SOFT_RIGHTWAKE

key107ENDCALLWAKE_DROPPED

key62ENDCALLWAKE_DROPPED

key229MENUWAKE_DROPPED

key139MENUWAKE_DROPPED

key59MENUWAKE_DROPPED

key127SEARCHWAKE_DROPPED

key217SEARCHWAKE_DROPPED

key228POUND

key227STAR

key231CALLWAKE_DROPPED

key61CALLWAKE_DROPPED

key232DPAD_CENTERWAKE_DROPPED

key108DPAD_DOWNWAKE_DROPPED

key103DPAD_UPWAKE_DROPPED

key102HOMEWAKE

key105DPAD_LEFTWAKE_DROPPED

key106DPAD_RIGHTWAKE_DROPPED

key115VOLUME_UP

key114VOLUME_DOWN

key116POWERWAKE

key212CAMERA

key16Q

key17W

key18E

key19R

key20T

key21Y

key22U

key23I

key24O

key25P

key26LEFT_BRACKET

key27RIGHT_BRACKET

key43BACKSLASH

key30A

key31S

key32D

key33F

key34G

key35H

key36J

key37K

key38L

key39SEMICOLON

key40APOSTROPHE

key14DEL

key44Z

key45X

key46C

key47V

key48B

key49N

key50M

key51COMMA

key52PERIOD

key53SLASH

key28ENTER

key56ALT_LEFT

key100ALT_RIGHT

key42SHIFT_LEFT

key54SHIFT_RIGHT

key15TAB

key57SPACE

key150EXPLORER

key155ENVELOPE

key12MINUS

key13EQUALS

key215AT

(4)android对底层按键的处理方法

android按键的处理是WindowManager负责,主要的映射转换实现在android源代码frameworks/base/libs/ui/EventHub.cpp

此文件处理来自底层的所有输入事件,并根据来源对事件进行分类处理,对于按键事件,处理过程如下:

(a)记录驱动名称为

(b)获取环境变量ANDROID_ROOT为系统路径(默认是/system,定义在android源代码/system/core/rootdir/init.rc文件中)

(c)查找路径为"系统路径/usr/keylayout/驱动名称.kl"的按键映射文件,如果不存在则默认用路径为"系统路径/usr/keylayout/qwerty.kl"

这个默认的按键映射文件,映射完成后再把经映射得到的android按键码值发给上层应用程序。

所以我们可以在内核中定义多个按键设备,然后为每个设备设定不同的按键映射文件,不定义则会默认用qwerty.kl

(5)举例

上面

(2)步我们在内核中声明了一个名为"gpio-keys"的按键设备,此设备定义在内核drivers/input/keyboard/gpio_keys.c文件中

然后我们在内核启动过程中注册此设备:

platform_device_register(&gpio_keys);然后我们可以自己定义一个名为gpio-keys.kl的android按键映射文件,此文件的定义可以参考querty.kl的内容,比如说我们想将MPF_PIN_GPIO3

对应的按键作android中的MENU键用,首先我们在内核中将MPF_PIN_GPIO3映射到KEY_F2,在内核include/linux/input.h中查找KEY_F2发现

#defineKEY_F260

参照KEY_F2的值我们在gpio-keys.kl中加入如下映射即可

key60MENUWAKE

其它按键也照此添加,完成后将按键表放置到/system/usr/keylayout目录下即可。

补充:

(1)android按键设备的映射关系可以在logcat开机日志中找的到(查找EventHub即可)

(2)android按键设备由WindowManager负责,WindowManager从按键驱动读取内核按键码,然后将内核按键码转换成android按键码,转换完成

后WindowManager会将内核按键码和android按键码一起发给应用程序来使用,这一点一定要注意。

Android系统开发小知识-在android产品开发中添加新的编译模块

Android开发中用户内容定义在vendor目录下,而用户产品的内容都定义在

如果需要添加新的内容,可以在该目录下新建子目录,同时修改AndroidBoard.mk文件即可。

比如说要添加一个按键映射文件:

(2)将我们需要的按键映射文件gpio-keys.kl和power-button.kl复制到keymaps目录下

(3)在keymaps目录下新建一个Android.mk文件,内容如下:

LOCAL_PATH:

=$(callmy-dir)

include$(CLEAR_VARS)

file:

=$(TARGET_OUT_KEYLAYOUT)/gpio-keys.kl

ALL_PREBUILT+=$(file)

$(file):

$(LOCAL_PATH)/gpio-keys.kl|$(ACP)

$(transform-prebuilt-to-target)

file:

=$(TARGET_OUT_KEYLAYOUT)/power-button.kl

ALL_PREBUILT+=$(file)

$(file):

$(LOCAL_PATH)/power-button.kl|$(ACP)

$(transform-prebuilt-to-target)

include$(LOCAL_PATH)/keymaps/Mdroid.mk

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1