Android系统移植技术详解【稀缺资源,路过别错过】 .pdf

上传人:爱问知识人 文档编号:3732835 上传时间:2019-09-22 格式:PDF 页数:73 大小:408.47KB
返回 下载 相关 举报
Android系统移植技术详解【稀缺资源,路过别错过】 .pdf_第1页
第1页 / 共73页
Android系统移植技术详解【稀缺资源,路过别错过】 .pdf_第2页
第2页 / 共73页
Android系统移植技术详解【稀缺资源,路过别错过】 .pdf_第3页
第3页 / 共73页
Android系统移植技术详解【稀缺资源,路过别错过】 .pdf_第4页
第4页 / 共73页
Android系统移植技术详解【稀缺资源,路过别错过】 .pdf_第5页
第5页 / 共73页
亲,该文档总共73页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Android系统移植技术详解【稀缺资源,路过别错过】 .pdf》由会员分享,可在线阅读,更多相关《Android系统移植技术详解【稀缺资源,路过别错过】 .pdf(73页珍藏版)》请在三一文库上搜索。

1、AndroidAndroidAndroidAndroid 系统开发编译环境配置系统开发编译环境配置 主机系统:Ubuntu9.04 (1)安装如下软件包 sudo apt-get install git-core sudo apt-get install gnupg sudo apt-get install sun-java5-jdk sudo apt-get install flex sudo apt-get install bison sudo apt-get install gperf sudo apt-get install libsdl-dev sudo apt-get instal

2、l libesd0-dev sudo apt-get install build-essential sudo apt-get install zip sudo apt-get install curl sudo apt-get install libncurses5-dev sudo apt-get install zlib1g-dev android 编译对 java 的需求只支持 jdk5.0 低版本,jdk5.0 update 12 版本和 java 6 不支持。 (2)下载 repo 工具 curl http:/android.git.kernel.org/repo /bin/rep

3、o chmod a+x /bin/repo (3)创建源代码下载目录: mkdir /work/android-froyo-r2 (4)用 repo 工具初始化一个版本(以 android2.2r2 为例) cd /work/android-froyo-r2 repo init -u git:/android.git.kernel.org/platform/manifest.git -b froyo 初始化过程中会显示相关的版本的 TAG 信息,同时会提示你输入用户名和邮箱地址,以上面的方式初始 化的是 android2.2 froyo 的最新版本, android2.2 本身也会有很多个版本

4、,这可以从 TAG 信息中看出来,当前 froyo 的所有版本如下: * new tagandroid-2.2.1_r1 - android-2.2.1_r1 * new tagandroid-2.2_r1 - android-2.2_r1 * new tagandroid-2.2_r1.1 - android-2.2_r1.1 * new tagandroid-2.2_r1.2 - android-2.2_r1.2 * new tagandroid-2.2_r1.3 - android-2.2_r1.3 * new tagandroid-cts-2.2_r1 - android-cts-2.

5、2_r1 * new tagandroid-cts-2.2_r2 - android-cts-2.2_r2 * new tagandroid-cts-2.2_r3 - android-cts-2.2_r3 这样每次下载的都是最新的版本,当然我们也可以根据 TAG 信息下载某一特定的版本如下: repo init -u git:/android.git.kernel.org/platform/manifest.git -b android-cts-2.2_r3 (5)下载代码 repo sync froyo 版本的代码大小超过 2G,漫长的下载过程。 (6)编译代码 cd /work/andro

6、id-froyo-r2 make UbuntuUbuntuUbuntuUbuntu 下使用下使用 SimbaSimbaSimbaSimba 服务实现局域网内文件共享服务实现局域网内文件共享 Ubuntu 下安装 Simba 服务器将 linux 电脑上的内容共享,同一局域网内的另外一台 Windows PC 即可访问 其共享内容, 从而实现 Windows 电脑向访问本地文件一样访问 Linux 文件系统的内容。 (1)安装 Simaba 服务器 sudo apt-get install samba (2)安装 samba 图形化配置软件 sudo apt-get install system

7、-config-samba (3)创建一个 Simba 专用用户 从“系统”“系统管理”“用户和组” ,来创建。如图,先点击“解锁” ,然后“添加新用户” 然后输入新用户名字(如 Simba)和密码(如 111111),然后在“高级”里面,选择“主组”为 sambashare 后点 击“确定“即可 一句话来概括,就是创建一个主组为 sambashare 的用户 (4)配置 samba 共享 从“系统”“系统管理”samba“,运行配置界面 然后”首选项“”服务器设置“。点击:安全性,在最后的”来宾帐号“里面, 选择我们新建立的那个用户 simba 后点击确定 (5)修改 samba 配置文件

8、打开/etc/samba/smb.conf,修改 valid users = XXXX 为 valid users = simba (6)重启 samba 服务 sudo /etc/init.d/samba restart (7)添加共享文件 从“系统”“系统管理”samba“,运行配置界面 点击“添加“来添加共享文件夹,点击“浏览“来选择需要共享的文件夹,选择“可擦写“和“显示“,点击“访问“ 可以设置访问权限,最好设置成“允许所有用户访问“ 本文来自 CSDN 博客,转载请标明出处:http:/ UbuntuUbuntuUbuntuUbuntu 下下 tftptftptftptftp 服务

9、器的创建服务器的创建 实验平台:Ubuntu9.04 (1)安装 tftp 服务 sudo apt-get install tftp tftpd openbsd-inetd (2)在根目录下创建文件夹 tftpboot 文件夹并修改权限 cd / sudo mkdir tftpboot sudo chmod 777 tftpboot (3)修改/etc/inetd.conf 文件如下: tftpdgramudpwaitnobody/usr/sbin/tcpd/usr/sbin/in.tftpd/tftpboot (4)开启 tftp 服务 sudo /etc/init.d/openbsd-in

10、etd reload sudo in.tftpd -l /tftpboot (5)重启电脑,然后将测试文件放入/tftpboot 目录下即可开始测试,出现问题可能一般都是权限问题 /tftpboot 目录下的文件访问权限改成 0777 本文来自 CSDN 博客,转载请标明出处:http:/ 创建一个新的创建一个新的 AndroidAndroidAndroidAndroid 产品项目产品项目 从 google 网站上下载的 android 源代码编译时默认是编译 google 设定的产品,如果要开发自己的产品, 则需要重新定义一个产品项目,过程如下: 首先我们定义产品的规格,举例如下: 公司名称

11、 ardent 产品名称MTP 主板名称 merlin 然后安装下面的步骤新建产品项目: (1)在源代码目录下创建一个用户目录 mkdir vendor (2)在用户目录下创建一个公司目录 mkdir vendor/merlin (3)在公司目录下创建一个 products 目录 mkdir vendor/merlin/products (4)在上面创建的 products 下创建一个产品 makefile 文件 MTP.mk,内容如下: PRODUCT_PACKAGES := AlarmClock Email Fallback Launcher2 Music Camera Settings

12、LatinIME NotePad SoundRecorder Bluetooth CertInstaller DeskClock $(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk) # # Overrides PRODUCT_MANUFACTURER := ardent PRODUCT_BRAND := ardent PRODUCT_NAME := MTP PRODUCT_MODEL := MultiMedia Touch Phone PRODUCT_DEVICE := merlin PRODUCT_LOCALES := zh_

13、CN 产品 makefile 文件的编写有一套规则,详细情况见此文后面的补充内容。 (5)在 vendor/merlin/products 目录下创建一个 AndroidProducts.mk 文件, 定义 Android 产品配置文件的路径, 具体如下: PRODUCT_MAKEFILES := $(LOCAL_DIR)/MTP.mk (6)在公司目录下创建一个主板目录 mkdir vendor/ardent/merlin (7)在主板目录下新建一个主板配置文件 BoardConfig.mk,内容如下: TARGET_NO_BOOTLOADER := true TARGET_NO_KERNE

14、L := true TARGET_CPU_ABI := armeabi BOARD_USES_GENERIC_AUDIO := true USE_CAMERA_STUB := true (8)如果你希望修改系统属性,则可以在主板目录下新建一个 system.prop 文件,该文件中可以修改系统属 性,举例如下: # system.prop for # This overrides settings in the products/generic/system.prop file # # rild.libpath=/system/lib/libreference-ril.so # rild.li

15、bargs=-d /dev/ttyS0 (9)在主板目录下建议一个 Android 的主板配置文件 AndroidBoard.mk,此文件是编译系统接口文件,内容 如下: # make file for new hardwarefrom # LOCAL_PATH := $(call my-dir) # # this is here to use the pre-built kernel ifeq ($(TARGET_PREBUILT_KERNEL),) TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/kernel endif file := $(INSTALLE

16、D_KERNEL_TARGET) ALL_PREBUILT += $(file) $(file): $(TARGET_PREBUILT_KERNEL)|$(ACP) $(transform-prebuilt-to-target) # # no boot loader, so we dont need any of that stuff # LOCAL_PATH := vendor/ardent/merlin include $(CLEAR_VARS) # # include more board specific stuff here? Such asAudio parameters. # (

17、10)编译新的项目 . build/envsetup.sh make PRODUCT-MTP-user 补充内容: (1)上面的新建的几个文件的编写可以参考 build/target/board/generic 目录下的 AndroidBoard.mk, BoardConfig.mk 和 system.prop (2)产品 makefile 的编写规则,变量定义解释如下: PRODUCT_NAME终端用户可见的产品名称,对应到“Settings“中的“About the phone”信息 PRODUCT_MODELEnd-user-visible name for the end produc

18、t PRODUCT_LOCALES 1个以空格分隔开的两个字母的语言码加上2字节的国家码的列表, 影响到“Settings“ 中的语言,时间,日期和货币格式设置, 举例:en_GB de_DE es_ES fr_CA PRODUCT_PACKAGES 需要安装的 APK 应用程序列表 PRODUCT_DEVICE工作设计名称,即主板名称 PRODUCT_MANUFACTURER生产厂家 PRODUCT_BRAND软件设计针对的客户品牌 PRODUCT_PROPERTY_OVERRIDES以“key=value“为格式的属性列表 PRODUCT_COPY_FILES 文件复制列表,格式为“原文件

19、路径:目的文件路径” ,编译过程中会按照此规 则复制文件 PRODUCT_OTA_PUBLIC_KEYS 产品的 OTA 公共密匙列表 PRODUCT_POLICY声明此产品使用的政策 PRODUCT_PACKAGE_OVERLAYS 指示是否使用默认资源或添加任何产品特定的资源,例如: vendor/acme/overlay PRODUCT_CONTRIBUTORS_FILE HTML 文件中包含项目的贡献者 PRODUCT_TAGS 以空格分隔开的指定产品关键词列表 本文来自 CSDN 博客,转载请标明出处:ttp:/ 制作制作 ubifsubifsubifsubifs 文件系统文件系统

20、1,安装相关的软件包 apt-get install liblzo2-dev 2,获取相关的工具 mkfs.ubifs 和 ubinize 这两个工具是制作 ubifs 文件系统的时候用到,它们是 mtd-utils 工具包中的内容,mtd-utils 工具包你可以 从下面的网站下载和编译出来: 官方网站:http:/www.linux-mtd.infradead.org/index.html 资源下载网站:http:/git.infradead.org/ 3,创建一个 create-ubifs.sh 脚本,主要是调用 mkfs.ubifs 和 ubinize 工具和相关参数来制作 ubifs

21、 文件系统, 内容如下: #!/bin/bash # #Script to generate ubifs filesystem image.# # # ubinize configuration file config_file=rootfs_ubinize.cfg # Function to check result of the command check_result() if $? -ne 0 then echo “FAILED“ else echo “SUCCESSFUL“ fi #Function to check whether an application exists che

22、ck_program() for cmd in “$“ do which $cmd /dev/null 2 修改成 static char *console_name = “/dev/ttyS1“; (7)修改 android 源代码 system/core/rootdir 目录下的 init.rc 文件, 作如下修改(android 默认 yaffs2 文件系统): 首先将 android 文件系统修改成可读写,将 mount rootfs rootfs / ro remount 修改成 mount rootfs rootfs / rw remount 然后修改挂载 system 和 use

23、rdata 部分的代码,将 # Mount /system rw first to give the filesystem a chance to save a checkpoint mount yaffs2 mtdsystem /system mount yaffs2 mtdsystem /system ro remount # We chown/chmod /data again so because mount is run as root + defaults mount yaffs2 mtduserdata /data nosuid nodev chown system system

24、 /data chmod 0771 /data 改成 # Mount /system rw first to give the filesystem a chance to save a checkpoint mount ubifs ubi0_0 /system ro # We chown/chmod /data again so because mount is run as root + defaults mount ubifs ubi1_0 /data nosuid nodev chown system system /data chmod 0771 /data (8)完成后编译内核,可

25、以启动文件系统,控制台可用,但是没有显示启动 log,而且不停的重启。 (9)系统不停的重启,因此控制台已经可用了,自然而然的想到看到 logcat 日志,一看,发现 logcat 设 备居然没起来,配置文件里面都定义了 居然没起来,查看了下内核 drivers/staging/android 目录,没有.o 文件,证明是没编译到,在看内核 目录下的.config 文件,发现居然没有了 logcat 和 binder 的宏定义,配置文件里面有定义而.config 文件中无定义,肯定是相关 Kconfig 文件的 问题,通过分析 drivers/staging 目录下的 Kconfig 文件发现

26、是因为 STAGING_EXCLUDE_BUILD 宏默认是 y,在配置文件中否定此宏即可,在配 置文件中 CONFIG_STAGING 定义后加上即可,如下: CONFIG_STAGING=y # CONFIG_STAGING_EXCLUDE_BUILD is not set 修改后重新编译发现系统完成正常启动,启动过程中启动 log 也显示正常。 至此,android 初步移植工作已经完成,当然,系统还有很多问题,需要下一步继续修改。 总结:android 的移植按如下流程: (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来。 (2)正确挂载文件系统,确

27、保内核启动参数和 android 源代码 system/core/rootdir 目录下的 init.rc 中 的文件系统挂载正确。 (3)调试控制台,让内核启动参数中的 console 参数以及 android 源代码 system/core/init/init.c 中的 console_name 设置和硬件保持一致 (4)打开 android 相关的驱动(logger,binder 等),串口输入 logcat 看 logger 驱动起来,没有的话调试 logger 驱动。 说明:ARM 的内核配置文件定义在内核 arch/arm/configs 目录下 AndroidAndroidAnd

28、roidAndroid 系统移植系统移植( ( ( (二二)- )- )- )-按键移植按键移植 这一部分主要是移植 android 的键盘和按键 (1)Android 使 用 标 准 的 linux 输 入 事 件 设 备 (/dev/input 目 录 下 ) 和 驱 动 , 按 键 定 义 在 内 核 include/linux/input.h 文件中, 按键定义形式如下: #define KEY_ESC1 #define KEY_12 #define KEY_23 (2)内核中(我的平台是 arch/arm/mach-mmp/merlin.c 文件)中按键的定义如下形式: static

29、 struct gpio_keys_button btn_button_table = 0 = .code=KEY_F1, .gpio=MFP_PIN_GPIO2, .active_low=1,/* 0 for down 0, up 1; 1 for down 1, up 0 */ .desc=“H_BTN button“, .type=EV_KEY, /* .wakeup= */ .debounce_interval=10,/* 10 msec jitter elimination */ , 1 = .code=KEY_F2, .gpio=MFP_PIN_GPIO3, .active_low

30、=1,/* 0 for down 0, up 1; 1 for down 1, up 0 */ .desc=“O_BTN button“, .type=EV_KEY, /* .wakeup= */ .debounce_interval=10,/* 10 msec jitter elimination */ , 2 = .code=KEY_F4, .gpio=MFP_PIN_GPIO1, .active_low=1,/* 0 for down 0, up 1; 1 for down 1, up 0 */ .desc=“S_BTN button“, .type=EV_KEY, /* .wakeup

31、= */ .debounce_interval=10,/* 10 msec jitter elimination */ , ; static struct gpio_keys_platform_data gpio_keys_data = .buttons= btn_button_table, .nbuttons = ARRAY_SIZE(btn_button_table), ; static struct platform_device gpio_keys = .name = “gpio-keys“, .dev= .platform_data = 上面定义是将 MFP_PIN_GPIO2 这个

32、 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,定义如下: key 399GRAVE key 21 key 32 key 43 key 54 key 65 key 7

33、6 key 87 key 98 key 109 key 110 key 158BACKWAKE_DROPPED key 230SOFT_RIGHTWAKE key 60SOFT_RIGHTWAKE key 107ENDCALLWAKE_DROPPED key 62ENDCALLWAKE_DROPPED key 229MENUWAKE_DROPPED key 139MENUWAKE_DROPPED key 59MENUWAKE_DROPPED key 127SEARCHWAKE_DROPPED key 217SEARCHWAKE_DROPPED key 228POUND key 227STAR

34、key 231CALLWAKE_DROPPED key 61CALLWAKE_DROPPED key 232DPAD_CENTERWAKE_DROPPED key 108DPAD_DOWNWAKE_DROPPED key 103DPAD_UPWAKE_DROPPED key 102HOMEWAKE key 105DPAD_LEFTWAKE_DROPPED key 106DPAD_RIGHTWAKE_DROPPED key 115VOLUME_UP key 114VOLUME_DOWN key 116POWERWAKE key 212CAMERA key 16Q key 17W key 18E

35、key 19R key 20T key 21Y key 22U key 23I key 24O key 25P key 26LEFT_BRACKET key 27RIGHT_BRACKET key 43BACKSLASH key 30A key 31S key 32D key 33F key 34G key 35H key 36J key 37K key 38L key 39SEMICOLON key 40APOSTROPHE key 14DEL key 44Z key 45X key 46C key 47V key 48B key 49N key 50M key 51COMMA key 52

36、PERIOD key 53SLASH key 28ENTER key 56ALT_LEFT key 100ALT_RIGHT key 42SHIFT_LEFT key 54SHIFT_RIGHT key 15TAB key 57SPACE key 150EXPLORER key 155ENVELOPE key 12MINUS key 13EQUALS key 215AT (4)android 对底层按键的处理方法 android 按 键 的 处 理 是 Window Manager 负 责 , 主 要 的 映 射 转 换 实 现 在 android 源 代 码 frameworks/base/

37、libs/ui/EventHub.cpp 此文件处理来自底层的所有输入事件,并根据来源对事件进行分类处理,对于按键事件,处理过程如下: (a)记录驱动名称为 (b) 获 取 环 境 变 量 ANDROID_ROOT 为 系 统 路 径 ( 默 认 是 /system , 定 义 在 android 源 代 码 /system/core/rootdir/init.rc 文件中) (c)查找路径为“系统路径/usr/keylayout/驱动名称.kl“的按键映射文件,如果不存在则默认用路径为“系 统路径/usr/keylayout/qwerty.kl“ 这个默认的按键映射文件,映射完成后再把经映射

38、得到的 android 按键码值发给上层应用程序。 所以我们可以在内核中定义多个按键设备,然后为每个设备设定不同的按键映射文件,不定义则会默认用 qwerty.kl (5)举例 上 面 (2) 步 我 们 在 内 核 中 声 明 了 一 个 名 为 “gpio-keys“ 的 按 键 设 备 , 此 设 备 定 义 在 内 核 drivers/input/keyboard/gpio_keys.c 文件中 然后我们在内核启动过程中注册此设备:platform_device_register( 然后我们可以自己定义一个名为 gpio-keys.kl 的 android 按键映射文件,此文件的定义可

39、以参考 querty.kl 的内容,比如说我们想将 MPF_PIN_GPIO3 对应的按键作 android 中的 MENU 键用,首先我们在内核中将 MPF_PIN_GPIO3 映射到 KEY_F2,在 内核 include/linux/input.h 中查找 KEY_F2 发现 #define KEY_F260 参照 KEY_F2 的值我们在 gpio-keys.kl 中加入如下映射即可 key 60MENUWAKE 其它按键也照此添加,完成后将按键表放置到/system/usr/keylayout 目录下即可。 补充: (1)android 按键设备的映射关系可以在 logcat 开机日

40、志中找的到(查找 EventHub 即可) (2)android 按键设备由 Window Manager 负责,Window Manager 从按键驱动读取内核按键码,然 后将内核按键码转换成 android 按键码,转换完成 后 Window Manager 会将内核按键码和 android 按键码一起发给应用程序来使用,这一点一定要注意。 Android 系统开发小知识-在 android 产品开发中添加新的编译模块 Android 开 发 中 用 户 内 容 定 义 在 vendor 目 录 下 , 而 用 户 产 品 的 内 容 都 定 义 在 vendor/目录下 如果需要添加新的

41、内容,可以在该目录下新建子目录,同时修改 AndroidBoard.mk 文件即可。比如说要 添加一个按键映射文件: (1)在 vendor/目录下建立一个 keymaps 子目录 (2)将我们需要的按键映射文件 gpio-keys.kl 和 power-button.kl 复制到 keymaps 目录下 (3)在 keymaps 目录下新建一个 Mdroid.mk 文件,内容如下: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) file := $(TARGET_OUT_KEYLAYOUT)/gpio-keys.kl ALL_PREBUIL

42、T += $(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) (4)在 vendor/目录下的 AndroidBoard.mk 添加如下内容: include $(LOCAL_P

43、ATH)/keymaps/Mdroid.mk AndroidAndroidAndroidAndroid 系统移植系统移植( ( ( (三三)- )- )- )-按键字符表按键字符表 上节讲 android 的 Window Manager 将内核按键码通过按键映射表转换成 android 按键码, 这节讲的是 android 按键码向 android 字符的转换,转换也是通过 Window Manager 来完成的 (1)原始按键字符表,我们知道一个按键是可以显示多个字符的,决定显示字符的是 CAPS(大小 写),FN,NUNMBER 等按键 举例如下: type=QWERTY # keyco

44、dedisplay numberbasecapsfncaps_fn AA2aA#0x00 BB2bB0x0303 OO6oO(0x00 PP7pP)0x00 QQ7qQ*0x0300 RR7rR30x20AC SS7sS40x00DF TT8tT+0x00A3 UU8uU;| PERIOD.:0x2026 AT0000x2022 SLASH/? SPACE0x200x200x200x200xEF010xEF01 ENTER0xa0xa0xa0xa0xa0xa TAB0x90x90x90x90x90x9 0000) 1111! 2222 3333# 4444$ 5555% 6666 7777;:

45、;: APOSTROPHE“ STAR* POUND# PLUS+ (2)android 为了减少载入时间,并没有使用原始按键表文件,而是将其转换成二进制文件 转换的工具源代码在 android 源代码 build/tools/kcm 目录下,android 在编译过程中会 首先编译转换工具,然后利用转换工具将 android 源代码 sdk/emulator/keymaps 目录下 的 qwerty.kcm 和 qwerty2.kcm 文件分别转换成 qwerty.kcm.bin 和 qwerty2.kcm.bin 转换后的二进制文件复制到 out/target/product/system

46、/usr/keychars 目录下,也就是目标平台的/system/usr/keychars 目录中。 (3)Window Manager 对按键的处理在 android 源代码 frameworks/base/libs/ui/EventHub.cpp 文 件中 Window Manager 从内核接收到一个按键输入事件后会首先调用按键映射表将内核按键码映射成 android 按键码(这部分上节已讲),然后会 将 android 按键码转换成字符,具体过程如下: (a)设置系统系统属性 hw.keyboards.设备号.devname 的值为设备名 以上节的 gpio-keys 设备为例,会设

47、置系统属性 hw.keyboards.65539.devname 的值为 gpio-keys (b)载入按键字符表,首先载入/system/usr/keychars 目录下的设备名.kcm.bin 文件(此例即 gpio-keys.kcm.bin 文件),如果载入失败 则载入该目录下的 querty.kcm.bin. (c)利用载入的按键字符表将 android 按键转换成按键字符发给上层应用程序。 (4)一般情况下一个控制按键是不需要作按键字符表的,系统会调用默认的去处理,但是如果要开发一个 全功能键盘(包含了字母和数字),那可能就需要 自己作一个专用的按键字符表了。 android 系统开发小问题启动过程中 android 字符没有显示出来 android 目标平台可以正常启动,但是启动过程中的 android 字符没有显示出来,这个是 linux 内核配置 的问题 打开内核 framebuffer 控制台即可。 (1)make menuconifg 后 选 择 Device Drivers-Graphics support-Cons

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1