在MTK安卓环境中只需要在alps 目录执行./mk otapackage即可打包ota升级包,下面我们来分析下这个过程中。 
alps/mk代码片段

sub chkDep
{
  my $module = $_[0];
  my $string = $module;
  if (!$module)
  {
    $string = all;
  }
#  print "*********************************\n \"$string\" Dependency Checking...\n";
  my $result;
  #在./mk otapackage会调用mediatek/build/makemtk.mk中的otapackage目标
  $result = &p_system("CUR_MODULE=$module make -f mediatek/build/makemtk.mk check-dep $cmdArg @mOpts > $logdir/${project}_check-dep.log 2>&1");
  &p_system("cat $logdir/${project}_check-dep.log");
  if ($result)
  {
    &p_system("cp -f $logdir/${project}_check-dep.log $logdir/${project}_check-dep.log_err");
    die "Please check all dependency error First !!";
  }
}12345678910111213141516171819

接下来查看mediatek/build/makemtk.mk otapackage目标.

从上图可以看出otapackage依赖于system.img boot.img recovery.img secro.img userdata.img目标 
在打包otapackage过程中,mtk平台会重现编译上述的img 
最终会执行alps/build/core/Makefile 中的otapackage目标

# -----------------------------------------------------------------
# OTA update package

name := $(TARGET_PRODUCT)
ifeq ($(TARGET_BUILD_TYPE),debug)
  name := $(name)_debug
endif
name := $(name)-ota-$(FILE_NAME_TAG)

FWUPGRADEPACKAGE_SH := ./build/core/FWUpgradePackage.sh
INTERNAL_OTA_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip

$(INTERNAL_OTA_PACKAGE_TARGET): KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)

ifeq ($(strip $(MTK_FW_UPGRADE)), yes)
$(INTERNAL_OTA_PACKAGE_TARGET): $(FWUPGRADEPACKAGE_SH)
endif
$(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(DISTTOOLS)
    @echo "Package OTA: $@"
ifneq ($(TARGET_USERIMAGES_USE_UBIFS),true)
    $(hide) ./build/tools/releasetools/ota_from_target_files -v \
       -n \
       -p $(HOST_OUT) \
       -k $(KEY_CERT_PAIR) \
       $(BUILT_TARGET_FILES_PACKAGE) $@
else
    $(hide) ./build/tools/releasetools/ota_from_target_files -v \
       -n \
       -g \
       -p $(HOST_OUT) \
       -k $(KEY_CERT_PAIR) \
       $(BUILT_TARGET_FILES_PACKAGE) $@
endif
ifeq ($(strip $(MTK_FW_UPGRADE)), yes)
    @echo "Package FWUpgradePackage"
    bash $(FWUPGRADEPACKAGE_SH) $(PRODUCT_OUT) $(KEY_CERT_PAIR)
endif

.PHONY: otapackage #otapackage 目标
otapackage: $(INTERNAL_OTA_PACKAGE_TARGET)

上面可以看出$(INTERNAL_OTA_PACKAGE_TARGET)依赖于$(KEY_CERT_PAIR),$(HOST_OUT),$(BUILT_TARGET_FILES_PACKAGE),$(HOST_OUT)为主机输出目录,$(KEY_CERT_PAIR)为签名相关信息,$(BUILT_TARGET_FILES_PACKAGE) 
‘BUILT_TARGET_FILES_PACKAGE’目标如下:

# -----------------------------------------------------------------
# A zip of the directories that map to the target filesystem.
# This zip can be used to create an OTA package or filesystem image
# as a post-build step.
#
name := $(TARGET_PRODUCT)
ifeq ($(TARGET_BUILD_TYPE),debug)
  name := $(name)_debug
endif
name := $(name)-target_files-$(FILE_NAME_TAG)

intermediates := $(call intermediates-dir-for,PACKAGING,target_files)
BUILT_TARGET_FILES_PACKAGE := $(intermediates)/$(name).zip
$(BUILT_TARGET_FILES_PACKAGE): intermediates := $(intermediates)
$(BUILT_TARGET_FILES_PACKAGE): \
        zip_root := $(intermediates)/$(name)

# $(1): Directory to copy
# $(2): Location to copy it to
# The "ls -A" is to prevent "acp s/* d" from failing if s is empty.
define package_files-copy-root
  if [ -d "$(strip $(1))" -a "$$(ls -A $(1))" ]; then \
    mkdir -p $(2) && \
    $(ACP) -rd $(strip $(1))/* $(2); \
  fi
endef

built_ota_tools := \
    $(call intermediates-dir-for,EXECUTABLES,applypatch)/applypatch \
    $(call intermediates-dir-for,EXECUTABLES,applypatch_static)/applypatch_static \
    $(call intermediates-dir-for,EXECUTABLES,check_prereq)/check_prereq \
    $(call intermediates-dir-for,EXECUTABLES,sqlite3)/sqlite3 \
    $(call intermediates-dir-for,EXECUTABLES,updater)/updater
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_OTA_TOOLS := $(built_ota_tools)

$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_RECOVERY_API_VERSION := $(RECOVERY_API_VERSION)
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_RECOVERY_FSTAB_VERSION := $(RECOVERY_FSTAB_VERSION)

ifeq ($(TARGET_RELEASETOOLS_EXTENSIONS),)
# default to common dir for device vendor
$(BUILT_TARGET_FILES_PACKAGE): tool_extensions := $(TARGET_DEVICE_DIR)/../common
else
$(BUILT_TARGET_FILES_PACKAGE): tool_extensions := $(TARGET_RELEASETOOLS_EXTENSIONS)
endif

# Depending on the various images guarantees that the underlying
# directories are up-to-date.
$(BUILT_TARGET_FILES_PACKAGE): \
        $(INSTALLED_BOOTIMAGE_TARGET) \
        $(INSTALLED_RADIOIMAGE_TARGET) \
        $(INSTALLED_RECOVERYIMAGE_TARGET) \
        $(INSTALLED_SYSTEMIMAGE) \
        $(INSTALLED_USERDATAIMAGE_TARGET) \
        $(INSTALLED_CACHEIMAGE_TARGET) \
        $(INSTALLED_VENDORIMAGE_TARGET) \
        $(INSTALLED_ANDROID_INFO_TXT_TARGET) \
        $(SELINUX_FC) \
        $(built_ota_tools) \
        $(APKCERTS_FILE) \
        $(HOST_OUT_EXECUTABLES)/fs_config \
        | $(ACP)
ifeq ($(TARGET_USERIMAGES_USE_EXT4),true)
$(BUILT_TARGET_FILES_PACKAGE): $(INSTALLED_CACHEIMAGE_TARGET)
endif
$(BUILT_TARGET_FILES_PACKAGE): \
        $(INSTALLED_FACTORYIMAGE_TARGET) \
        $(if $(BOARD_CUSTOMIMAGE_PARTITION_SIZE), $(INSTALLED_CUSTOMIMAGE_TARGET)) \
        $(INSTALLED_SECROIMAGE_TARGET) \
        mediatek/custom/$(MTK_PROJECT)/security/recovery/SEC_VER.txt
    @echo "Package target files: $@"
    $(hide) rm -rf $@ $(zip_root)
    $(hide) mkdir -p $(dir $@) $(zip_root)
    @# Components of the recovery image
    $(hide) mkdir -p $(zip_root)/RECOVERY
    $(hide) $(call package_files-copy-root, \
        $(TARGET_RECOVERY_ROOT_OUT),$(zip_root)/RECOVERY/RAMDISK)
ifdef INSTALLED_KERNEL_TARGET
    $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET) $(zip_root)/RECOVERY/kernel
    $(hide) $(ACP) $(recovery_ramdisk) $(zip_root)/RECOVERY/ramdisk
endif
ifdef INSTALLED_2NDBOOTLOADER_TARGET
    $(hide) $(ACP) \
        $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/RECOVERY/second
endif
ifdef BOARD_KERNEL_CMDLINE
    $(hide) echo "$(BOARD_KERNEL_CMDLINE)" > $(zip_root)/RECOVERY/cmdline
endif
ifdef BOARD_KERNEL_BASE
    $(hide) echo "$(BOARD_KERNEL_BASE)" > $(zip_root)/RECOVERY/base
endif
    @# Components of the factory image
    $(hide) mkdir -p $(zip_root)/FACTORY
    $(hide) $(call package_files-copy-root, \
        $(TARGET_FACTORY_ROOT_OUT),$(zip_root)/FACTORY/RAMDISK)
ifdef INSTALLED_KERNEL_TARGET
    $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET) $(zip_root)/FACTORY/kernel
endif
ifdef BOARD_KERNEL_PAGESIZE
    $(hide) echo "$(BOARD_KERNEL_PAGESIZE)" > $(zip_root)/RECOVERY/pagesize
endif
ifdef INSTALLED_2NDBOOTLOADER_TARGET
    $(hide) $(ACP) \
        $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/FACTORY/second
endif
ifdef BOARD_KERNEL_CMDLINE
    $(hide) echo "$(BOARD_KERNEL_CMDLINE)" > $(zip_root)/FACTORY/cmdline
endif
ifdef BOARD_KERNEL_BASE
    $(hide) echo "$(BOARD_KERNEL_BASE)" > $(zip_root)/FACTORY/base
endif
    @# Components of the boot image
    $(hide) mkdir -p $(zip_root)/BOOT
    $(hide) $(call package_files-copy-root, \
        $(TARGET_ROOT_OUT),$(zip_root)/BOOT/RAMDISK)
ifdef INSTALLED_KERNEL_TARGET
    $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET) $(zip_root)/BOOT/kernel
    $(hide) $(ACP) $(INSTALLED_RAMDISK_TARGET) $(zip_root)/BOOT/ramdisk
endif
ifdef INSTALLED_2NDBOOTLOADER_TARGET
    $(hide) $(ACP) \
        $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/BOOT/second
endif
ifdef BOARD_KERNEL_CMDLINE
    $(hide) echo "$(BOARD_KERNEL_CMDLINE)" > $(zip_root)/BOOT/cmdline
endif
ifdef BOARD_KERNEL_BASE
    $(hide) echo "$(BOARD_KERNEL_BASE)" > $(zip_root)/BOOT/base
endif
ifdef BOARD_KERNEL_PAGESIZE
    $(hide) echo "$(BOARD_KERNEL_PAGESIZE)" > $(zip_root)/BOOT/pagesize
endif
#wschen
    $(hide) if [ -f $(PRODUCT_OUT)/custom_build_verno ]; then \
              cat $(PRODUCT_OUT)/custom_build_verno > $(zip_root)/BOOT/board; \
            fi

$(hide) $(foreach t,$(INSTALLED_RADIOIMAGE_TARGET),\
                mkdir -p $(zip_root)/RADIO; \
                $(ACP) $(t) $(zip_root)/RADIO/$(notdir $(t));)
    @# Contents of the system image
    $(hide) $(call package_files-copy-root, \
        $(SYSTEMIMAGE_SOURCE_DIR),$(zip_root)/SYSTEM)
    @# Contents of the data image
    $(hide) $(call package_files-copy-root, \
        $(TARGET_OUT_DATA),$(zip_root)/DATA)
ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
    @# Contents of the vendor image
    $(hide) $(call package_files-copy-root, \
        $(TARGET_OUT_VENDOR),$(zip_root)/VENDOR)
endif
#wschen 2012-11-07 
    $(if $(BOARD_CUSTOMIMAGE_PARTITION_SIZE), \
    $(hide) $(call package_files-copy-root, \
        $(TARGET_CUSTOM_OUT),$(zip_root)/CUSTOM))
    @# Extra contents of the OTA package
    $(hide) mkdir -p $(zip_root)/OTA/bin
    $(hide) $(ACP) $(INSTALLED_ANDROID_INFO_TXT_TARGET) $(zip_root)/OTA/
    $(hide) $(ACP) $(PRIVATE_OTA_TOOLS) $(zip_root)/OTA/bin/
    @# Security information of the OTA package
    @echo "[SEC OTA] Adding Security information to OTA package"
    @echo "[SEC OTA] path : mediatek/custom/$(MTK_PROJECT)/security/recovery/SEC_VER.txt"
    $(hide) $(ACP) mediatek/custom/$(MTK_PROJECT)/security/recovery/SEC_VER.txt $(zip_root)/OTA/
    @# Files that do not end up in any images, but are necessary to
    @# build them.
    $(hide) mkdir -p $(zip_root)/META
    $(hide) $(ACP) $(APKCERTS_FILE) $(zip_root)/META/apkcerts.txt
    $(hide)    echo "$(PRODUCT_OTA_PUBLIC_KEYS)" > $(zip_root)/META/otakeys.txt
    $(hide) echo "recovery_api_version=$(PRIVATE_RECOVERY_API_VERSION)" > $(zip_root)/META/misc_info.txt
    $(hide) echo "fstab_version=$(PRIVATE_RECOVERY_FSTAB_VERSION)" >> $(zip_root)/META/misc_info.txt
ifdef BOARD_FLASH_BLOCK_SIZE
    $(hide) echo "blocksize=$(BOARD_FLASH_BLOCK_SIZE)" >> $(zip_root)/META/misc_info.txt
endif
ifdef BOARD_BOOTIMAGE_PARTITION_SIZE
    $(hide) echo "boot_size=$(BOARD_BOOTIMAGE_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt
endif
ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE
    $(hide) echo "recovery_size=$(BOARD_RECOVERYIMAGE_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt
endif
    $(hide) echo "tool_extensions=$(tool_extensions)" >> $(zip_root)/META/misc_info.txt
    $(hide) echo "default_system_dev_certificate=$(DEFAULT_KEY_CERT_PAIR)" >> $(zip_root)/META/misc_info.txt
ifdef PRODUCT_EXTRA_RECOVERY_KEYS
    $(hide) echo "extra_recovery_keys=$(PRODUCT_EXTRA_RECOVERY_KEYS)" >> $(zip_root)/META/misc_info.txt
endif
    $(hide) echo "mkbootimg_args=$(BOARD_MKBOOTIMG_ARGS)" >> $(zip_root)/META/misc_info.txt
    $(hide) echo "use_set_metadata=1" >> $(zip_root)/META/misc_info.txt
    $(hide) echo "update_rename_support=1" >> $(zip_root)/META/misc_info.txt
    $(call generate-userimage-prop-dictionary, $(zip_root)/META/misc_info.txt)
    @# Zip everything up, preserving symlinks
    $(hide) (cd $(zip_root) && zip -qry ../$(notdir $@) .)
    @# Run fs_config on all the system, boot ramdisk, and recovery ramdisk files in the zip, and save the output
    $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="SYSTEM/" } /^SYSTEM\// {print "system/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/filesystem_config.txt
    $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/boot_filesystem_config.txt
    $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/recovery_filesystem_config.txt
#wschen 2012-11-07 
    $(if $(BOARD_CUSTOMIMAGE_PARTITION_SIZE), \
    $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="CUSTOM/" } /^CUSTOM\// {print "custom/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config >> $(zip_root)/META/filesystem_config.txt)
    $(hide) (cd $(zip_root) && zip -q ../$(notdir $@) META/*filesystem_config.txt)

.PHONY: target-files-package
target-files-package: $(BUILT_TARGET_FILES_PACKAGE)

ifneq ($(TARGET_PRODUCT),sdk)
ifeq ($(filter generic%,$(TARGET_DEVICE)),)
ifneq ($(TARGET_NO_KERNEL),true)
ifneq ($(recovery_fstab),)

实际上最终执行的操作为:

$(hide) ./build/tools/releasetools/ota_from_target_files -v \
       -n \
       -g \
       -p $(HOST_OUT) \
       -k $(KEY_CERT_PAIR) \
       $(BUILT_TARGET_FILES_PACKAGE) $@

上述所依赖的文件,最后都会作为参数传递给ota_from_target_files这个python脚本,这个python脚本会进一步生成最终的recovery升级包。示例参数如下:

./build/tools/releasetools/ota_from_target_files
-v -n -g -p out/host/linux-x86 
-k build/target/product/security/testkey out/target/product/streambox/obj/PACKAGING/target_files_intermediates/streambox-target_files-eng.xiaojingling.zip
out/target/product/streambox/streambox-ota-eng.xiaojingling.zip

img_from_target_files为核心脚本,后面会专门解析此脚本。

安卓OTA升级系统解析上相关推荐

  1. android系统开机启动很慢,为什么安卓手机升级系统后,首次启动会比较慢?

    原标题:为什么安卓手机升级系统后,首次启动会比较慢? 点击 很多小伙伴对安卓手机进行系统升级后,可能都会遇到一种情况:手机首次启动的时间好久,首次打开应用的时间也比往常要长. 为什么会出现这种情况? ...

  2. win7旗舰版 手机ota升级系统是什么意思

    win7旗舰版 手机ota升级系统是什么意思 手机ota升级是指手机终端通过无线网络下载远程服务器上的升级包,对系统或应用进行升级的技术. 手机ota升级系统是什么意思 OTA是一项基于短消息机制,通 ...

  3. 安卓机更新系统会卡吗_安卓手机升级系统会变卡吗

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 手机升级系统会变卡有三种情况: 1.手机用的时间长了,版本太低,配置跟不上系统所需配置,这种情况系统升级会卡. 2.手机内存小,升 ...

  4. 安卓手机升级系统webview

    今天公司有台android 5.1的的设备,其系统webview版本太低(39.0),给我手动升级了一下webview,顺便总结一下 一.前言 从Android4.4系统开始,Chromium内核取代 ...

  5. 安卓OTA升级文件的制作

    OTA刷机包制作 整个项目编译完成后再执行make otapackage   生成的完整升级包会存放在out\debug\target\product[project name]\  下  具体名字根 ...

  6. Android View系统解析(上)

    注意:上图中的公式有误,正确的应该为: x = left + translationX y = top + translationY 顶 36 踩 2

  7. ipad一直卡在白苹果_IOS checkm8漏洞越狱 典型应用案例之OTA升级造成白苹果修复案例...

    苹果设备OTA升级系统造成白苹果的现象屡见不鲜,给广大的手机用户造成诸多困扰,在这里解释下什么叫OTA升级,通俗讲,就是你的苹果手机提示你有新的版本,通过WIFI或者4G的网络条件下手机自己进行下载新 ...

  8. 全志T507如何在Android系统上进行OTA升级

    OTA升级是Android系统所提供的标准软件升级方式.它功能十分强大,并且提供了完全升级(完整包)和增量升级(差异包)两种模式.https://www.forlinx.com/product/133 ...

  9. 干货 | 飞凌嵌入式OKT507-C开发板如何在Android系统上进行OTA升级

    OTA升级是Android系统所提供的标准软件升级方式.它功能十分强大,并且提供了完全升级(完整包)和增量升级(差异包)两种模式.下面我们以飞凌嵌入式OKT507-C开发板为例,为大家讲解一下具体步骤 ...

最新文章

  1. CCS中各个项目文件的作用
  2. iOS:quartz2D绘图(给图形绘制阴影)
  3. linux 硬链接和软链接
  4. python编写格斗游戏_Python文字小游戏:搏击比赛
  5. 一周学会Mootools 1.4中文教程:(7)汇总收尾
  6. argis中4波段影像变3波段
  7. servlet乱码问题
  8. r语言导入ggplot2_R语言入门--画图(一)--ggplot2
  9. 下载丨10月数据库技术通讯:HAIP在两个私网网卡上发生互换,导致ASM实例启动失败...
  10. 《java程序员全攻略:从小工到专家》连载一:外行人眼中的IT人
  11. elementUI 下拉框隐藏时触发相关事件(下拉框下拉显示时不触发)
  12. paip.java桌面开发应用与WEB RIA应用
  13. 3600000毫秒等于多少小时_毫秒换算(秒与毫秒换算)
  14. python调节电脑音量_python如何调节音量大小
  15. syn重发_疑难杂症之被丢弃的SYN包
  16. mysql truncate分区表_MySQL分区表的管理~1
  17. Unable to boot device because it cannot be located on disk. Domain: NSPOSIXErrorDomain
  18. 运维祈求不宕机_一份运维监控的终极秘籍!监控不到位,宕机两行泪
  19. 带你一文搞懂VMware Workstation的三种网络模式
  20. P4844 LJJ爱数数 数论

热门文章

  1. 银行外汇资金业务学习笔记(2)当我们在说头寸(position)的时候
  2. 基于springboot的电影院会员管理系统
  3. 概率统计D 01.06 伯努利概型
  4. 阿翔编程学-PKI介绍
  5. 【金猿产品展】Smartbi一站式大数据分析平台——更聪明的大数据分析软件
  6. FAQ7: 如何正确的对待汇编学习和反汇编学习?
  7. 大数据面试指南【精华】
  8. Sass快速入门笔记(将主要知识点截取出来,参考官方文档和一些网络教学视频)
  9. 破解大数据孤岛化 SaaS主流厂商共建开放标准
  10. java-net-php-python-jspm校园闲鱼网站计算机毕业设计程序