分享
分享赚钱 收藏 举报 版权申诉 / 73

类型android系统移植技术详解.doc

  • 上传人:无敌
  • 文档编号:50236
  • 上传时间:2018-03-06
  • 格式:DOC
  • 页数:73
  • 大小:351.02KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    android系统移植技术详解.doc
    资源描述:

    1、Android 系统开发编译环境配置 主机系 统: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 install libesd0-dev sudo apt-get

    2、 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/repo chmod a+x /bin/re

    3、po (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 的最新 版本 , androi

    4、d2.2 本 身也 会有 很 多个版 本, 这可 以 从 TAG 信息中 看出 来, 当 前 froyo 的所有 版本 如下 : * new tag android-2.2.1_r1 - android-2.2.1_r1 * new tag android-2.2_r1 - android-2.2_r1 * new tag android-2.2_r1.1 - android-2.2_r1.1 * new tag android-2.2_r1.2 - android-2.2_r1.2 * new tag android-2.2_r1.3 - android-2.2_r1.3 * new tag

    5、 android-cts-2.2_r1 - android-cts-2.2_r1 * new tag android-cts-2.2_r2 - android-cts-2.2_r2 * new tag android-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) 下 载代 码 rep

    6、o sync froyo 版本的 代码 大小 超 过 2G ,漫 长的 下载 过程 。 (6) 编 译代 码 cd /work/android-froyo-r2 make Ubuntu 下使用 Simba 服务实现局域网内文件共享 Ubuntu 下安 装 Simba 服务 器将 linux 电 脑上 的内 容共 享,同 一局 域网 内的 另外 一台 Windows PC 即可 访 问 其共享 内容 , 从而实 现 Windows 电脑 向 访问本 地文 件一 样访 问 Linux 文 件系 统的 内容 。 (1) 安装 Simaba 服 务器 sudo apt-get install samb

    7、a (2) 安装 samba 图 形化 配置 软件 sudo apt-get install system-config-samba (3) 创建一 个 Simba 专 用用 户 从“系 统” “ 系统 管理 ” “ 用户 和组 ” , 来创 建 。如图 ,先 点击 “解 锁” , 然后“ 添加 新用 户” 然后输 入新 用 户 名字( 如 Simba) 和密码( 如 111111) , 然后在 “高 级” 里面 , 选 择 “主 组” 为 sambashare 后点 击“ 确定“ 即可 一句话 来概 括, 就是 创建 一个主 组 为 sambashare 的 用户 (4) 配置 samba

    8、共享 从“系 统” “ 系统 管理 ”samba “, 运行 配置 界 面 然后” 首选 项“ ” 服务 器设置 “。 点击 :安 全性 ,在最 后的 ”来 宾帐 号“ 里面, 选择我 们新 建立 的那 个用 户 simba 后点击 确定 (5) 修改 samba 配 置文 件 打开/etc/samba/smb.conf , 修改 valid users = XXXX 为 valid users = simba (6) 重启 samba 服务 sudo /etc/init.d/samba restart (7) 添加共 享文 件 从“系 统” “ 系统 管理 ”samba “, 运行 配置 界

    9、 面 点击“添加“ 来添 加共 享文件 夹,点击“ 浏览“ 来 选择 需要 共享 的文 件夹 ,选 择“ 可擦 写“ 和“显示“ ,点 击“ 访问“ 可以设 置访 问权 限, 最好 设置成“ 允 许所 有用 户访 问“ 本文来 自 CSDN 博 客, 转 载请标 明出 处:http:/ Ubuntu 下 tftp 服务器的创建 实验平 台:Ubuntu9.04 (1) 安装 tftp 服务 sudo apt-get install tftp tftpd openbsd-inetd (2) 在根目 录下 创建 文件 夹 tftpboot 文件 夹并修 改权 限 cd / sudo mkdir t

    10、ftpboot sudo chmod 777 tftpboot (3) 修改/etc/inetd.conf 文件 如下: tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot (4) 开启 tftp 服务 sudo /etc/init.d/openbsd-inetd reload sudo in.tftpd -l /tftpboot (5) 重启电 脑, 然后 将测 试 文件放 入/tftpboot 目 录下 即 可开始 测试 ,出 现问 题可 能一般 都是 权限 问题 /tftpboot 目录下 的文 件

    11、访 问 权限改 成 0777 本文来 自 CSDN 博 客, 转 载请标 明出 处:http:/ 创建一个新的 Android 产品项目 从 google 网 站上 下载 的 android 源代 码编 译时 默认 是 编译 google 设定 的产 品, 如果要 开发 自己 的产 品, 则需要 重新 定义 一个 产品 项目, 过程 如下 : 首先我 们定 义产 品的 规格 ,举例 如下 : 公司名 称 ardent 产品名 称 MTP 主板名 称 merlin 然后安 装下 面的 步骤 新建 产品项 目: (1) 在源代 码目 录下 创建 一 个用户 目录 mkdir vendor (2)

    12、在用户 目录 下创 建一 个 公司目 录 mkdir vendor/merlin (3) 在公司 目录 下创 建一 个 products 目录 mkdir vendor/merlin/products (4) 在上面 创建 的 products 下创建 一个 产 品 makefile 文件 MTP.mk ,内 容如 下 : PRODUCT_PACKAGES := AlarmClock Email Fallback Launcher2 Music Camera Settings LatinIME NotePad SoundRecorder Bluetooth CertInstaller Desk

    13、Clock $(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_CN 产品 makefile 文件 的编 写 有一套 规则 ,详 细情 况见 此文后 面的 补充 内容 。 (5) 在

    14、 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_KERNEL := true TARGET_CPU

    15、_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.lib

    16、args=-d /dev/ttyS0 (9) 在主板 目录 下建 议一 个 Android 的主 板配 置文 件 AndroidBoard.mk ,此文 件 是编译 系统 接口 文件 ,内 容 如下: # make file for new hardware from # 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 fi

    17、le := $(INSTALLED_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_V ARS) # # include more board specific stuff here? Such as

    18、Audio parameters. # (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

    19、 phone ”信 息 PRODUCT_MODEL End-user-visible name for the end product PRODUCT_LOCALES 1 个 以空格 分隔 开的 两个 字母 的语言 码加 上 2 字 节的 国 家码的 列表 , 影 响到“Settings“ 中的语 言, 时间 ,日 期和 货币格 式设 置, 举例 :en_GB de_DE es_ES fr_CA PRODUCT_PACKAGES 需要安 装 的 APK 应 用程 序 列表 PRODUCT_DEVICE 工作设 计名 称, 即主 板名 称 PRODUCT_MANUFACTURER 生产 厂家 P

    20、RODUCT_BRAND 软件设 计针 对的 客户 品牌 PRODUCT_PROPERTY_OVERRIDES 以“key=value“ 为格式 的属性 列表 PRODUCT_COPY_FILES 文件复 制列 表 , 格 式为 “ 原文件 路径 : 目的 文件 路 径” , 编 译过 程中 会按 照此 规 则复制 文件 PRODUCT_OTA_PUBLIC_KEYS 产品的 OTA 公 共 密匙列 表 PRODUCT_POLICY 声明此 产品 使用 的政 策 PRODUCT_PACKAGE_OVERLAYS 指 示 是 否 使 用 默 认 资 源 或 添 加 任 何 产 品 特 定 的 资

    21、 源 , 例 如 : vendor/acme/overlay PRODUCT_CONTRIBUTORS_FILE HTML 文件中 包 含项目 的贡 献者 PRODUCT_TAGS 以 空格 分隔开 的指 定产 品关 键词 列表 本文来 自 CSDN 博 客, 转 载请标 明出 处:ttp:/ 制作 ubifs 文件系统 1, 安装 相关 的软 件包 apt-get install liblzo2-dev 2, 获取 相关 的工 具 mkfs.ubifs 和 ubinize 这两个 工具 是制 作 ubifs 文 件系统 的时 候用 到, 它们 是 mtd-utils 工具包中的 内 容,mt

    22、d-utils 工具包你可 以 从下面 的网 站下 载和 编译 出来: 官方网 站:http:/www.linux-mtd.infradead.org/index.html 资源下 载网 站:http:/git.infradead.org/ 3, 创建 一个 create-ubifs.sh 脚本, 主要 是调 用 mkfs.ubifs 和 ubinize 工 具和 相关 参数来 制 作 ubifs 文 件系 统 , 内容如 下: #!/bin/bash # # Script to generate ubifs filesystem image. # # # ubinize configurat

    23、ion 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 check_program() for cmd in “$“ do which $cmd /dev/null 2&1 if $? -ne 0 then echo echo “Cannot fi

    24、nd command “$cmd“ echo exit 1 fi done if $# -ne 5 then echo echo Usage: create-ubifs.sh page_size_in_bytes pages_per_block partition_size_in_bytes blocks_per_device path_to_rootfs echo exit fi page_size_in_bytes=$1 echo “Page size $page_size_in_bytesbytes.“ pages_per_block=$2 echo “Pages per block $

    25、pages_per_block“ partition_size_in_bytes=$3 echo “File-system partition size $partition_size_in_bytesbytes.“ blocks_per_device=$4 echo “Blocks per device $blocks_per_device“ path_to_rootfs=$5 # wear_level_reserved_blocks is 1% of total blcoks per device wear_level_reserved_blocks=expr $blocks_per_de

    26、vice / 100 echo “Reserved blocks for wear level $wear_level_reserved_blocks“ #logical_erase_block_size is physical erase block size minus 2 pages for UBI logical_pages_per_block=expr $pages_per_block - 2 logical_erase_block_size=expr $page_size_in_bytes * $logical_pages_per_block echo “Logical erase

    27、 block size $logical_erase_block_sizebytes.“ #Block size = page_size * pages_per_block block_size=expr $page_size_in_bytes * $pages_per_block echo “Block size $block_sizebytes.“ #physical blocks on a partition = partition size / block size partition_physical_blocks=expr $partition_size_in_bytes / $b

    28、lock_size echo “Physical blocks in a partition $partition_physical_blocks“ #Logical blocks on a partition = physical blocks on a partitiion - reserved for wear level patition_logical_blocks=expr $partition_physical_blocks - $wear_level_reserved_blocks echo “Logical blocks in a partition $patition_lo

    29、gical_blocks“ #File-system volume = Logical blocks in a partition * Logical erase block size fs_vol_size=expr $patition_logical_blocks * $logical_erase_block_size echo “File-system volume $fs_vol_sizebytes.“ echo echo “Generating configuration file.“ echo “rootfs-volume“ $config_file echo “mode=ubi“

    30、 $config_file echo “image=rootfs_ubifs.img“ $config_file echo “vol_id=0“ $config_file echo “vol_size=$fs_vol_size“ $config_file echo “vol_type=dynamic“ $config_file echo “vol_name=system“ $config_file echo # Note: Check necessary program for installation #echo -n “Checking necessary program for inst

    31、allation.“ #check_program mkfs.ubifs ubinize #echo “Done“ #Generate ubifs image echo -n “Generating ubifs.“ ./mkfs.ubifs -x lzo -m $page_size_in_bytes -e $logical_erase_block_size -c $patition_logical_blocks -o rootfs_ubifs.img -d $path_to_rootfs check_result echo -n “Generating ubi image out of the

    32、 ubifs.“ ./ubinize -o ubi.img -m $page_size_in_bytes -p $block_size -s $page_size_in_bytes $config_file -v check_result rm -f rootfs_ubifs.img rm -f $config_file (4) 将 mkfs.ubifs 和 ubinize 以及 create-ubifs.sh 放置在 同一目 录下 ,然 后调 用 create-ubifs.sh 即可创建 ubifs 文件系 统,create-ubifs.sh 用法如 下: create-ubifs.sh p

    33、age_size_in_bytes( 页大小) pages_per_block( 每 个 扇 区 的 页 数 量) partition_size_in_bytes( 分 区大小) blocks_per_device( 扇区数 量) path_to_rootfs( 文件系 统路 径) 举例如 下: ./create-ubifs.sh 2048 64 83886080 4096 ./rootfs 上面命 令的 意思 是调 用 create-ubifs.sh 将当前 目录 下 的 rootfs 文件 夹的 内容 制作 成 ubifs 文件 系统 , nand flash 的页大 小 为 2k, 每个

    34、 扇区 有 64 页, 总共 有 4096 个 扇区 ,要 制 作的文 件系 统的 大小 为 83886080 字 节。 本文来 自 CSDN 博 客, 转 载请标 明出 处:http:/ android 编译 系 统 makefile(Android.mk) 写法 android 编 译系 统的 makefile 文件 Android.mk 写法 如 下 (1)Android.mk 文 件首 先需 要指 定 LOCAL_PATH 变 量,用 于查 找源 文件 。由 于一般 情况 下 Android.mk 和 需要 编译 的 源文件 在同 一目 录下 ,所 以定义 成如 下形 式: LOCAL

    35、_PATH:=$(call my-dir) 上面的 语句 的意 思是 将 LOCAL_PATH 变 量定 义成 本 文件所 在目 录路 径。 (2)Android.mk 中 可以 定义 多个编 译模 块, 每个 编译 模块都 是 以 include $(CLEAR_V ARS) 开始 以 include $(BUILD_XXX) 结束。 include $(CLEAR_V ARS) CLEAR_V ARS 由 编 译 系 统 提 供 , 指 定 让 GNU MAKEFILE 为 你 清 除 除 LOCAL_PATH 以 外 的 所 有 LOCAL_XXX 变量 , 如 LOCAL_MODULE

    36、 , LOCAL_SRC_FILES , LOCAL_SHARED_LIBRARIES , LOCAL_STATIC_LIBRARIES 等。 include $(BUILD_STATIC_LIBRARY) 表 示编 译成 静态 库 include $(BUILD_SHARED_LIBRARY) 表 示编 译成 动 态库。 include $(BUILD_EXECUTABLE) 表示 编译 成可 执行 程序 (3) 举例如 下(frameworks/base/libs/audioflinger/Android.mk) : LOCAL_PATH:= $(call my-dir) include

    37、$(CLEAR_V ARS) 模块一 ifeq ($(AUDIO_POLICY_TEST),true) ENABLE_AUDIO_DUMP := true endif LOCAL_SRC_FILES:= AudioHardwareGeneric.cpp AudioHardwareStub.cpp AudioHardwareInterface.cpp ifeq ($(ENABLE_AUDIO_DUMP),true) LOCAL_SRC_FILES += AudioDumpInterface.cpp LOCAL_CFLAGS += -DENABLE_AUDIO_DUMP endif LOCAL_S

    38、HARED_LIBRARIES := libcutils libutils libbinder libmedia libhardware_legacy ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO),true) LOCAL_CFLAGS += -DGENERIC_AUDIO endif LOCAL_MODULE:= libaudiointerface ifeq ($(BOARD_HA VE_BLUETOOTH),true) LOCAL_SRC_FILES += A2dpAudioInterface.cpp LOCAL_SHARED_LIBRARIES +=

    39、liba2dp LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP LOCAL_C_INCLUDES += $(call include-path-for, bluez) endif include $(BUILD_STATIC_LIBRARY) 模块 一编 译成 静态库 include $(CLEAR_V ARS) 模块二 LOCAL_SRC_FILES:= AudioPolicyManagerBase.cpp LOCAL_SHARED_LIBRARIES := libcutils libutils libmedia ifeq ($(TARGET_SIM

    40、ULATOR),true) LOCAL_LDLIBS += -ldl else LOCAL_SHARED_LIBRARIES += libdl endif LOCAL_MODULE:= libaudiopolicybase ifeq ($(BOARD_HA VE_BLUETOOTH),true) LOCAL_CFLAGS += -DWITH_A2DP endif ifeq ($(AUDIO_POLICY_TEST),true) LOCAL_CFLAGS += -DAUDIO_POLICY_TEST endif include $(BUILD_STATIC_LIBRARY) 模 块二 编译 成

    41、静态库 include $(CLEAR_V ARS) 模块三 LOCAL_SRC_FILES:= AudioFlinger.cpp AudioMixer.cpp.arm AudioResampler.cpp.arm AudioResamplerSinc.cpp.arm AudioResamplerCubic.cpp.arm AudioPolicyService.cpp LOCAL_SHARED_LIBRARIES := libcutils libutils libbinder libmedia libhardware_legacy ifeq ($(strip $(BOARD_USES_GENE

    42、RIC_AUDIO),true) LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase LOCAL_CFLAGS += -DGENERIC_AUDIO else LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy endif ifeq ($(TARGET_SIMULATOR),true) LOCAL_LDLIBS += -ldl else LOCAL_SHARED_LIBRARIES += libdl endif LOCAL_MODULE:= libaudioflinger

    43、ifeq ($(BOARD_HA VE_BLUETOOTH),true) LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP LOCAL_SHARED_LIBRARIES += liba2dp endif ifeq ($(AUDIO_POLICY_TEST),true) LOCAL_CFLAGS += -DAUDIO_POLICY_TEST endif ifeq ($(TARGET_SIMULATOR),true) ifeq ($(HOST_OS),linux) LOCAL_LDLIBS += -lrt -lpthread endif endif ifeq

    44、 ($(BOARD_USE_LVMX),true) LOCAL_CFLAGS += -DLVMX LOCAL_C_INCLUDES += vendor/nxp LOCAL_STATIC_LIBRARIES += liblifevibes LOCAL_SHARED_LIBRARIES += liblvmxservice # LOCAL_SHARED_LIBRARIES += liblvmxipc endif include $(BUILD_SHARED_LIBRARY) 模块 三编 译成 动态库 (4) 编译一 个应 用程 序(APK) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Build all java files in the java subdirectory LOCAL_SRC_FILES := $(call all-subdir-java-files) # Name of the APK to build LOCAL_PACKAGE_NAME := LocalPackage # Tell it to build an APK include $(BUILD_PACKAGE) (5) 编译一 个依 赖于 静 态 Java 库(static.jar) 的应用程序

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:android系统移植技术详解.doc
    链接地址:https://www.docduoduo.com/p-50236.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开