make otapackage 流程分析

原文链接:https://blog.csdn.net/sjz_iron/article/details/8273205

        我们知道,在Android源码整编后执行make otapackage命令即可生成OTA整包,但除此之外它还完成了哪些功能?具体又是如何完成的呢?事实上,在OTA升级过程中命令make otapackage完成了三件事情:

  • 重新对system.img文件进行了打包;

  • 生成差分资源包,路径为out/target/product/<product-name>/obj/PACKAGING/target_files_from_intermedias/<product-name>-target_files-<version-name>.zip,差分资源包用于生成整包和差分包;

  • 生成OTA整包,路径为out/target/product/<product-name>/<product-name>-ota-<version-name>.zip

        本文将对此命令的执行过程进行分析。

  1. # —————————————————————–  
  2. # OTA update package  
  3.   
  4. name := (TARGET_PRODUCT)&nbsp;&nbsp;</span></li><li class="alt"><span>ifeq&nbsp;( (TARGET_PRODUCT)&nbsp;&nbsp;</span></li><li class="alt"><span>ifeq&nbsp;( (TARGET_BUILD_TYPE),debug)  
  5.   name := (name)_debug&nbsp;&nbsp;</span></li><li class="alt"><span>endif&nbsp;&nbsp;</span></li><li class=""><span>name&nbsp;:=&nbsp; (name)_debug&nbsp;&nbsp;</span></li><li class="alt"><span>endif&nbsp;&nbsp;</span></li><li class=""><span>name&nbsp;:=&nbsp; (name)-ota-(FILE_NAME_TAG)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>INTERNAL_OTA_PACKAGE_TARGET&nbsp;:=&nbsp; (FILE_NAME_TAG)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>INTERNAL_OTA_PACKAGE_TARGET&nbsp;:=&nbsp; (PRODUCT_OUT)/(name).zip&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span> (name).zip&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span> (INTERNAL_OTA_PACKAGE_TARGET): KEY_CERT_PAIR := (DEFAULT_KEY_CERT_PAIR)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span> (DEFAULT_KEY_CERT_PAIR)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span> (INTERNAL_OTA_PACKAGE_TARGET): (BUILT_TARGET_FILES_PACKAGE)&nbsp; (BUILT_TARGET_FILES_PACKAGE)&nbsp; (OTATOOLS)  
  6.     @echo “Package OTA: @"&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; @"&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) ./build/tools/releasetools/ota_from_target_files -v \  
  7.        -n \  
  8.        -p (HOST_OUT)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-k&nbsp; (HOST_OUT)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-k&nbsp; (KEY_CERT_PAIR) \  
  9.            (BUILT_TARGET_FILES_PACKAGE)&nbsp; (BUILT_TARGET_FILES_PACKAGE)&nbsp; @  
  10.   
  11. .PHONY: otapackage  
  12. otapackage: (INTERNAL_OTA_PACKAGE_TARGET)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>#&nbsp;-----------------------------------------------------------------&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp;The&nbsp;update&nbsp;package&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>name&nbsp;:=&nbsp; (INTERNAL_OTA_PACKAGE_TARGET)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>#&nbsp;-----------------------------------------------------------------&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp;The&nbsp;update&nbsp;package&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>name&nbsp;:=&nbsp; (TARGET_PRODUCT)  
  13. ifeq ((TARGET_BUILD_TYPE),debug)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;name&nbsp;:=&nbsp; (TARGET_BUILD_TYPE),debug)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;name&nbsp;:=&nbsp; (name)_debug  
  14. endif  
  15. name :=  (name)img ( n a m e ) − i m g − (FILE_NAME_TAG)  
# -----------------------------------------------------------------




OTA update package

name := (TARGETPRODUCT)ifeq( ( T A R G E T P R O D U C T ) i f e q ( (TARGET_BUILD_TYPE),debug)
name := (name)debugendifname:= ( n a m e ) d e b u g e n d i f n a m e := (name)-ota-$(FILE_NAME_TAG)

INTERNAL_OTA_PACKAGE_TARGET := (PRODUCTOUT)/ ( P R O D U C T O U T ) / (name).zip

(INTERNALOTAPACKAGETARGET):KEYCERTPAIR:= ( I N T E R N A L O T A P A C K A G E T A R G E T ) : K E Y C E R T P A I R := (DEFAULT_KEY_CERT_PAIR)

(INTERNALOTAPACKAGETARGET): ( I N T E R N A L O T A P A C K A G E T A R G E T ) : (BUILT_TARGET_FILES_PACKAGE) (OTATOOLS)@echo"PackageOTA: ( O T A T O O L S ) @ e c h o " P a c k a g e O T A : @"
(hide)./build/tools/releasetools/otafromtargetfilesv n p ( h i d e ) . / b u i l d / t o o l s / r e l e a s e t o o l s / o t a f r o m t a r g e t f i l e s − v   − n   − p (HOST_OUT) \
-k (KEYCERTPAIR)  ( K E Y C E R T P A I R )   (BUILT_TARGET_FILES_PACKAGE) $@

.PHONY: otapackage
otapackage: $(INTERNAL_OTA_PACKAGE_TARGET)

-----------------------------------------------------------------

The update package

name := (TARGETPRODUCT)ifeq( ( T A R G E T P R O D U C T ) i f e q ( (TARGET_BUILD_TYPE),debug)
name := (name)debugendifname:= ( n a m e ) d e b u g e n d i f n a m e := (name)-img-$(FILE_NAME_TAG)

  1. 代码段1 Makefile文件中目标otapackage的执行代码  
代码段1 Makefile文件中目标otapackage的执行代码

       

        首先,make otapackage命令会执行Makefile(./build/core/Makefile)中otapackage的目标代码(如代码1所示)。由代码可知,otapackage目标的执行只依赖于 (INTERNALOTAPACKAGETARGET)(MakefileTABotapackagename) ( I N T E R N A L O T A P A C K A G E T A R G E T ) , 而 不 存 在 任 何 规 则 ( 根 据 M a k e f i l e 语 法 , 规 则 必 须 以 T A B 键 开 始 , 而 目 标 o t a p a c k a g e 的 定 义 之 后 却 是 变 量 n a m e 的 声 明 , 因 此 不 存 在 规 则 ) , 因 此 只 需 要 关 注 目 标 (INTERNAL_OTA_PACKAGE_TARGET)的生成。显然,此目标的生成依赖于目标文件:(BUILT_TARGET_FILES_PACKAGE)</span></strong>和<span style="color:#cc66cc;"><strong> (BUILT_TARGET_FILES_PACKAGE)</span></strong>和<span style="color:#cc66cc;"><strong> (OTATOOLS),且其执行的命令为./build/tools/releasetools/ota_from_target_files。也就是说,make otapackage所完成的功能全是通过这两个目标文件和执行的命令完成的,我们将分别对这三个关键点进行分析。

1 $(OTATOOLS)

        目标文件OTATOOLS的编译规则如下所示

  1. OTATOOLS :=  (HOST_OUT_EXECUTABLES)/minigzip&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/minigzip&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/mkbootfs \  
  2.       (HOST_OUT_EXECUTABLES)/mkbootimg&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/mkbootimg&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/fs_config \  
  3.       (HOST_OUT_EXECUTABLES)/mkyaffs2image&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/mkyaffs2image&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/zipalign \  
  4.       (HOST_OUT_EXECUTABLES)/aapt&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/aapt&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/bsdiff \  
  5.       (HOST_OUT_EXECUTABLES)/imgdiff&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/imgdiff&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_JAVA_LIBRARIES)/dumpkey.jar \  
  6.       (HOST_OUT_JAVA_LIBRARIES)/signapk.jar&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_JAVA_LIBRARIES)/signapk.jar&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/mkuserimg.sh \  
  7.       (HOST_OUT_EXECUTABLES)/genext2fs&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/genext2fs&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/tune2fs \  
  8.       (HOST_OUT_EXECUTABLES)/e2fsck&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/e2fsck&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HOST_OUT_EXECUTABLES)/make_ext4fs  
  9.   
  10. .PHONY: otatools  
  11. otatools: (OTATOOLS)&nbsp;&nbsp;</span></li></ol></div><pre class="plain" name="code" style="display: none;">OTATOOLS := (OTATOOLS)&nbsp;&nbsp;</span></li></ol></div><pre class="plain" name="code" style="display: none;">OTATOOLS := (HOST_OUT_EXECUTABLES)/minigzip \
    (HOSTOUTEXECUTABLES)/mkbootfs  ( H O S T O U T E X E C U T A B L E S ) / m k b o o t f s   (HOST_OUT_EXECUTABLES)/mkbootimg \
    (HOSTOUTEXECUTABLES)/fsconfig  ( H O S T O U T E X E C U T A B L E S ) / f s c o n f i g   (HOST_OUT_EXECUTABLES)/mkyaffs2image \
    (HOSTOUTEXECUTABLES)/zipalign  ( H O S T O U T E X E C U T A B L E S ) / z i p a l i g n   (HOST_OUT_EXECUTABLES)/aapt \
    (HOSTOUTEXECUTABLES)/bsdiff  ( H O S T O U T E X E C U T A B L E S ) / b s d i f f   (HOST_OUT_EXECUTABLES)/imgdiff \
    (HOSTOUTJAVALIBRARIES)/dumpkey.jar  ( H O S T O U T J A V A L I B R A R I E S ) / d u m p k e y . j a r   (HOST_OUT_JAVA_LIBRARIES)/signapk.jar \
    (HOSTOUTEXECUTABLES)/mkuserimg.sh  ( H O S T O U T E X E C U T A B L E S ) / m k u s e r i m g . s h   (HOST_OUT_EXECUTABLES)/genext2fs \
    (HOSTOUTEXECUTABLES)/tune2fs  ( H O S T O U T E X E C U T A B L E S ) / t u n e 2 f s   (HOST_OUT_EXECUTABLES)/e2fsck \
    $(HOST_OUT_EXECUTABLES)/make_ext4fs

.PHONY: otatools
otatools: $(OTATOOLS)

代码段2 $(OTATOOLS)的编译规则

        可以看出变量OTATOOLS为系统中一系列文件的集合。那么这些文件又有什么用处呢? 事实上,这些文件用于压缩(minigzip:用于gzip文件;make_ext4fs:将文件转换为ext4类型;mkyaffs2image:用于yaffs文件系统;……)、解压缩、差分(bsdiff,imgdiff)、签名(singapk.jar)等功能,结合代码段1可得到如下结论:目标 (INTERNALOTAPACKAGETARGET) ( I N T E R N A L O T A P A C K A G E T A R G E T ) 的 执 行 依 赖 于 这 一 系 列 系 统 工 具 - - 仅 此 而 已 。 也 就 是 说 , 目 标 文 件 (OTATOOLS)仅仅指定了命令执行所需要的工具,并未执行任何操作。

        注:变量 (HOSTOUTEXECUTABLES)out/host/linuxx86/bin ( H O S T O U T E X E C U T A B L E S ) 指 代 的 是 o u t / h o s t / l i n u x − x 86 / b i n 目 录 , 而 变 量 (HOST_OUT_JAVA_LIBRARIES)/表示的是out/host/linux-x86/framework目录,这意味着我们可以从此目录下找到上述工具,并为我们所用。

1.2$(BUILT_TARGET_FILES_PACKAGE)

        目标OTATOOLS指明了执行make otapackage命令所需要的系统工具,而目标 (BUILTTARGEFILESPACKAGE)system.img</span> ( B U I L T T A R G E F I L E S P A C K A G E ) 的 生 成 则 完 成 了 两 件 事 : 重 新 打 包 s y s t e m . i m g 文 件 和 < / s p a n > 生 成 差 分 资 源 包 。 (BUILT_TARGE_FILES_PACKAGE)的编译规则如下所示:

  1. # —————————————————————–  
  2. # A zip of the directories that map to the target filesystem.  
  3. # This zip can be used to create an OTA package or filesystem image  
  4. # as a post-build step.  
  5. #  
  6. name := (TARGET_PRODUCT)&nbsp;&nbsp;</span></li><li class="alt"><span>ifeq&nbsp;( (TARGET_PRODUCT)&nbsp;&nbsp;</span></li><li class="alt"><span>ifeq&nbsp;( (TARGET_BUILD_TYPE),debug)  
  7.   name := (name)_debug&nbsp;&nbsp;</span></li><li class="alt"><span>endif&nbsp;&nbsp;</span></li><li class=""><span>name&nbsp;:=&nbsp; (name)_debug&nbsp;&nbsp;</span></li><li class="alt"><span>endif&nbsp;&nbsp;</span></li><li class=""><span>name&nbsp;:=&nbsp; (name)-target_files-(FILE_NAME_TAG)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>intermediates&nbsp;:=&nbsp; (FILE_NAME_TAG)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>intermediates&nbsp;:=&nbsp; (call intermediates-dir-for,PACKAGING,target_files)  
  8. BUILT_TARGET_FILES_PACKAGE :=  (intermediates)/ ( i n t e r m e d i a t e s ) / (name).zip  
  9. (BUILT_TARGET_FILES_PACKAGE):&nbsp;intermediates&nbsp;:=&nbsp; (BUILT_TARGET_FILES_PACKAGE):&nbsp;intermediates&nbsp;:=&nbsp; (intermediates)  
  10. (BUILT_TARGET_FILES_PACKAGE):&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_root&nbsp;:=&nbsp; (BUILT_TARGET_FILES_PACKAGE):&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_root&nbsp;:=&nbsp; (intermediates)/(name)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp; (name)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp; (1): Directory to copy  
  11. (2):&nbsp;Location&nbsp;to&nbsp;copy&nbsp;it&nbsp;to&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp;The&nbsp;"ls&nbsp;-A"&nbsp;is&nbsp;to&nbsp;prevent&nbsp;"acp&nbsp;s/*&nbsp;d"&nbsp;from&nbsp;failing&nbsp;if&nbsp;s&nbsp;is&nbsp;empty.&nbsp;&nbsp;</span></li><li class="alt"><span>define&nbsp;package_files-copy-root&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;if&nbsp;[&nbsp;-d&nbsp;" (2):&nbsp;Location&nbsp;to&nbsp;copy&nbsp;it&nbsp;to&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp;The&nbsp;"ls&nbsp;-A"&nbsp;is&nbsp;to&nbsp;prevent&nbsp;"acp&nbsp;s/*&nbsp;d"&nbsp;from&nbsp;failing&nbsp;if&nbsp;s&nbsp;is&nbsp;empty.&nbsp;&nbsp;</span></li><li class="alt"><span>define&nbsp;package_files-copy-root&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;if&nbsp;[&nbsp;-d&nbsp;" (strip (1))"&nbsp;-a&nbsp;" (1))"&nbsp;-a&nbsp;" (ls&nbsp;-A&nbsp; (ls&nbsp;-A&nbsp; (1))” ]; then \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  12.     mkdir -p (2)&nbsp;&amp;&amp;&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (2)&nbsp;&amp;&amp;&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (ACP) -rd (strip&nbsp; (strip&nbsp; (1))/* (2);&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;fi&nbsp;&nbsp;</span></li><li class=""><span>endef&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>built_ota_tools&nbsp;:=&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (2);&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;fi&nbsp;&nbsp;</span></li><li class=""><span>endef&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>built_ota_tools&nbsp;:=&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (call intermediates-dir-for,EXECUTABLES,applypatch)/applypatch \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  13.     (call&nbsp;intermediates-dir-for,EXECUTABLES,applypatch_static)/applypatch_static&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (call&nbsp;intermediates-dir-for,EXECUTABLES,applypatch_static)/applypatch_static&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (call intermediates-dir-for,EXECUTABLES,check_prereq)/check_prereq \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  14.     (call&nbsp;intermediates-dir-for,EXECUTABLES,sqlite3)/sqlite3&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (call&nbsp;intermediates-dir-for,EXECUTABLES,sqlite3)/sqlite3&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (call intermediates-dir-for,EXECUTABLES,updater)/updater  
  15. (BUILT_TARGET_FILES_PACKAGE):&nbsp;PRIVATE_OTA_TOOLS&nbsp;:=&nbsp; (BUILT_TARGET_FILES_PACKAGE):&nbsp;PRIVATE_OTA_TOOLS&nbsp;:=&nbsp; (built_ota_tools)  
  16.   
  17. (BUILT_TARGET_FILES_PACKAGE):&nbsp;PRIVATE_RECOVERY_API_VERSION&nbsp;:=&nbsp; (BUILT_TARGET_FILES_PACKAGE):&nbsp;PRIVATE_RECOVERY_API_VERSION&nbsp;:=&nbsp; (RECOVERY_API_VERSION)  
  18.   
  19. ifeq ((TARGET_RELEASETOOLS_EXTENSIONS),)&nbsp;&nbsp;</span></li><li class="alt"><span>#&nbsp;default&nbsp;to&nbsp;common&nbsp;dir&nbsp;for&nbsp;device&nbsp;vendor&nbsp;&nbsp;</span></li><li class=""><span> (TARGET_RELEASETOOLS_EXTENSIONS),)&nbsp;&nbsp;</span></li><li class="alt"><span>#&nbsp;default&nbsp;to&nbsp;common&nbsp;dir&nbsp;for&nbsp;device&nbsp;vendor&nbsp;&nbsp;</span></li><li class=""><span> (BUILT_TARGET_FILES_PACKAGE): tool_extensions := (TARGET_DEVICE_DIR)/../common&nbsp;&nbsp;</span></li><li class="alt"><span>else&nbsp;&nbsp;</span></li><li class=""><span> (TARGET_DEVICE_DIR)/../common&nbsp;&nbsp;</span></li><li class="alt"><span>else&nbsp;&nbsp;</span></li><li class=""><span> (BUILT_TARGET_FILES_PACKAGE): tool_extensions := (TARGET_RELEASETOOLS_EXTENSIONS)&nbsp;&nbsp;</span></li><li class="alt"><span>endif&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>#&nbsp;Depending&nbsp;on&nbsp;the&nbsp;various&nbsp;images&nbsp;guarantees&nbsp;that&nbsp;the&nbsp;underlying&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp;directories&nbsp;are&nbsp;up-to-date.&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>ifeq&nbsp;( (TARGET_RELEASETOOLS_EXTENSIONS)&nbsp;&nbsp;</span></li><li class="alt"><span>endif&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>#&nbsp;Depending&nbsp;on&nbsp;the&nbsp;various&nbsp;images&nbsp;guarantees&nbsp;that&nbsp;the&nbsp;underlying&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp;directories&nbsp;are&nbsp;up-to-date.&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>ifeq&nbsp;( (TARGET_USERIMAGES_USE_EXT4),true)  
  20. (BUILT_TARGET_FILES_PACKAGE):&nbsp; (BUILT_TARGET_FILES_PACKAGE):&nbsp; (INSTALLED_CACHEIMAGE_TARGET)  
  21. endif  
  22.   
  23. (BUILT_TARGET_FILES_PACKAGE):&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (BUILT_TARGET_FILES_PACKAGE):&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_BOOTIMAGE_TARGET) \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  24.         (INSTALLED_RADIOIMAGE_TARGET)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_RADIOIMAGE_TARGET)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_RECOVERYIMAGE_TARGET) \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  25.         (INSTALLED_FACTORYIMAGE_TARGET)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_FACTORYIMAGE_TARGET)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_SYSTEMIMAGE) \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  26.         (INSTALLED_CACHEIMAGE_TARGET)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_CACHEIMAGE_TARGET)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_USERDATAIMAGE_TARGET) \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  27.         (INSTALLED_SECROIMAGE_TARGET)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_SECROIMAGE_TARGET)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_ANDROID_INFO_TXT_TARGET) \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  28.         (built_ota_tools)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (built_ota_tools)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (APKCERTS_FILE) \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  29.         (HOST_OUT_EXECUTABLES)/fs_config&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp; (HOST_OUT_EXECUTABLES)/fs_config&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp; (ACP)  
  30.     @echo “Package target files: @"&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; @"&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) rm -rf @&nbsp; @&nbsp; (zip_root)  
  31.     (hide)&nbsp;mkdir&nbsp;-p&nbsp; (hide)&nbsp;mkdir&nbsp;-p&nbsp; (dir @)&nbsp; @)&nbsp; (zip_root)  
  32.     @# Components of the recovery image  
  33.     (hide)&nbsp;mkdir&nbsp;-p&nbsp; (hide)&nbsp;mkdir&nbsp;-p&nbsp; (zip_root)/RECOVERY  
  34.     (hide)&nbsp; (hide)&nbsp; (call package_files-copy-root, \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  35.          (TARGETRECOVERYROOTOUT), ( T A R G E T R E C O V E R Y R O O T O U T ) , (zip_root)/RECOVERY/RAMDISK)  
  36. ifdef INSTALLED_KERNEL_TARGET  
  37.     (hide)&nbsp; (hide)&nbsp; (ACP) (INSTALLED_KERNEL_TARGET)&nbsp; (INSTALLED_KERNEL_TARGET)&nbsp; (zip_root)/RECOVERY/kernel  
  38.     (hide)&nbsp; (hide)&nbsp; (ACP) (recovery_ramdisk)&nbsp; (recovery_ramdisk)&nbsp; (zip_root)/RECOVERY/ramdisk  
  39. endif  
  40. ifdef INSTALLED_2NDBOOTLOADER_TARGET  
  41.     (hide)&nbsp; (hide)&nbsp; (ACP) \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  42.         (INSTALLED_2NDBOOTLOADER_TARGET)&nbsp; (INSTALLED_2NDBOOTLOADER_TARGET)&nbsp; (zip_root)/RECOVERY/second  
  43. endif  
  44. ifdef BOARD_KERNEL_CMDLINE  
  45.     (hide)&nbsp;echo&nbsp;" (hide)&nbsp;echo&nbsp;" (BOARD_KERNEL_CMDLINE)” > (zip_root)/RECOVERY/cmdline&nbsp;&nbsp;</span></li><li class="alt"><span>endif&nbsp;&nbsp;</span></li><li class=""><span>ifdef&nbsp;BOARD_KERNEL_BASE&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/RECOVERY/cmdline&nbsp;&nbsp;</span></li><li class="alt"><span>endif&nbsp;&nbsp;</span></li><li class=""><span>ifdef&nbsp;BOARD_KERNEL_BASE&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo ”(BOARD_KERNEL_BASE)"&nbsp;&gt;&nbsp; (BOARD_KERNEL_BASE)"&nbsp;&gt;&nbsp; (zip_root)/RECOVERY/base  
  46. endif  
  47.     @# Components of the factory image  
  48.     (hide)&nbsp;mkdir&nbsp;-p&nbsp; (hide)&nbsp;mkdir&nbsp;-p&nbsp; (zip_root)/FACTORY  
  49.     (hide)&nbsp; (hide)&nbsp; (call package_files-copy-root, \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  50.          (TARGETFACTORYROOTOUT), ( T A R G E T F A C T O R Y R O O T O U T ) , (zip_root)/FACTORY/RAMDISK)  
  51. ifdef INSTALLED_KERNEL_TARGET  
  52.     (hide)&nbsp; (hide)&nbsp; (ACP) (INSTALLED_KERNEL_TARGET)&nbsp; (INSTALLED_KERNEL_TARGET)&nbsp; (zip_root)/FACTORY/kernel  
  53. endif  
  54. ifdef BOARD_KERNEL_PAGESIZE  
  55.     (hide)&nbsp;echo&nbsp;" (hide)&nbsp;echo&nbsp;" (BOARD_KERNEL_PAGESIZE)” > (zip_root)/RECOVERY/pagesize&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;INSTALLED_2NDBOOTLOADER_TARGET&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/RECOVERY/pagesize&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;INSTALLED_2NDBOOTLOADER_TARGET&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) (ACP)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ACP)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_2NDBOOTLOADER_TARGET) (zip_root)/FACTORY/second&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_KERNEL_CMDLINE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/FACTORY/second&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_KERNEL_CMDLINE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo ”(BOARD_KERNEL_CMDLINE)"&nbsp;&gt;&nbsp; (BOARD_KERNEL_CMDLINE)"&nbsp;&gt;&nbsp; (zip_root)/FACTORY/cmdline  
  56. endif  
  57. ifdef BOARD_KERNEL_BASE  
  58.     (hide)&nbsp;echo&nbsp;" (hide)&nbsp;echo&nbsp;" (BOARD_KERNEL_BASE)” > (zip_root)/FACTORY/base&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;@#&nbsp;Components&nbsp;of&nbsp;the&nbsp;boot&nbsp;image&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/FACTORY/base&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;@#&nbsp;Components&nbsp;of&nbsp;the&nbsp;boot&nbsp;image&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) mkdir -p (zip_root)/BOOT&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/BOOT&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) (call&nbsp;package_files-copy-root,&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (call&nbsp;package_files-copy-root,&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (TARGET_ROOT_OUT),(zip_root)/BOOT/RAMDISK)&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;INSTALLED_KERNEL_TARGET&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/BOOT/RAMDISK)&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;INSTALLED_KERNEL_TARGET&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) (ACP)&nbsp; (ACP)&nbsp; (INSTALLED_KERNEL_TARGET) (zip_root)/BOOT/kernel&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/BOOT/kernel&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) (ACP)&nbsp; (ACP)&nbsp; (INSTALLED_RAMDISK_TARGET) (zip_root)/BOOT/ramdisk&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;INSTALLED_2NDBOOTLOADER_TARGET&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/BOOT/ramdisk&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;INSTALLED_2NDBOOTLOADER_TARGET&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) (ACP)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ACP)&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (INSTALLED_2NDBOOTLOADER_TARGET) (zip_root)/BOOT/second&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_KERNEL_CMDLINE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/BOOT/second&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_KERNEL_CMDLINE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo ”(BOARD_KERNEL_CMDLINE)"&nbsp;&gt;&nbsp; (BOARD_KERNEL_CMDLINE)"&nbsp;&gt;&nbsp; (zip_root)/BOOT/cmdline  
  59. endif  
  60. ifdef BOARD_KERNEL_BASE  
  61.     (hide)&nbsp;echo&nbsp;" (hide)&nbsp;echo&nbsp;" (BOARD_KERNEL_BASE)” > (zip_root)/BOOT/base&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_KERNEL_PAGESIZE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/BOOT/base&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_KERNEL_PAGESIZE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo ”(BOARD_KERNEL_PAGESIZE)"&nbsp;&gt;&nbsp; (BOARD_KERNEL_PAGESIZE)"&nbsp;&gt;&nbsp; (zip_root)/BOOT/pagesize  
  62. endif  
  63. #wschen  
  64. ifneq ”“ ”(CUSTOM_BUILD_VERNO)"&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (CUSTOM_BUILD_VERNO)"&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo ”(CUSTOM_BUILD_VERNO)"&nbsp;&gt;&nbsp; (CUSTOM_BUILD_VERNO)"&nbsp;&gt;&nbsp; (zip_root)/BOOT/board  
  65. endif  
  66.   
  67. #[eton begin]: added by LiuDekuan for u-boot update  
  68.     (hide)&nbsp; (hide)&nbsp; (ACP) (PRODUCT_OUT)/uboot_eyang77_ics2.bin&nbsp; (PRODUCT_OUT)/uboot_eyang77_ics2.bin&nbsp; (zip_root)/uboot.bin  
  69. #[eton end]  
  70.   
  71.     (hide)&nbsp; (hide)&nbsp; (foreach t,(INSTALLED_RADIOIMAGE_TARGET),\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mkdir&nbsp;-p&nbsp; (INSTALLED_RADIOIMAGE_TARGET),\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mkdir&nbsp;-p&nbsp; (zip_root)/RADIO; \&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 
  72.                 (ACP)&nbsp; (ACP)&nbsp; (t)  (ziproot)/RADIO/ ( z i p r o o t ) / R A D I O / (notdir (t));)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;@#&nbsp;Contents&nbsp;of&nbsp;the&nbsp;system&nbsp;image&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (t));)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;@#&nbsp;Contents&nbsp;of&nbsp;the&nbsp;system&nbsp;image&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) (call&nbsp;package_files-copy-root,&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (call&nbsp;package_files-copy-root,&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SYSTEMIMAGE_SOURCE_DIR),(zip_root)/SYSTEM)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;@#&nbsp;Contents&nbsp;of&nbsp;the&nbsp;data&nbsp;image&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/SYSTEM)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;@#&nbsp;Contents&nbsp;of&nbsp;the&nbsp;data&nbsp;image&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) (call&nbsp;package_files-copy-root,&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (call&nbsp;package_files-copy-root,&nbsp;\&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (TARGET_OUT_DATA),(zip_root)/DATA)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;@#&nbsp;Extra&nbsp;contents&nbsp;of&nbsp;the&nbsp;OTA&nbsp;package&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/DATA)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;@#&nbsp;Extra&nbsp;contents&nbsp;of&nbsp;the&nbsp;OTA&nbsp;package&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) mkdir -p (zip_root)/OTA/bin&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/OTA/bin&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) (ACP)&nbsp; (ACP)&nbsp; (INSTALLED_ANDROID_INFO_TXT_TARGET) (zip_root)/OTA/&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/OTA/&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) (ACP)&nbsp; (ACP)&nbsp; (PRIVATE_OTA_TOOLS) (zip_root)/OTA/bin/&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;@#&nbsp;Security&nbsp;information&nbsp;of&nbsp;the&nbsp;OTA&nbsp;package&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;@echo&nbsp;"[SEC&nbsp;OTA]&nbsp;Adding&nbsp;Security&nbsp;information&nbsp;to&nbsp;OTA&nbsp;package"&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;@echo&nbsp;"[SEC&nbsp;OTA]&nbsp;path&nbsp;:&nbsp;mediatek/custom/ (zip_root)/OTA/bin/&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;@#&nbsp;Security&nbsp;information&nbsp;of&nbsp;the&nbsp;OTA&nbsp;package&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;@echo&nbsp;"[SEC&nbsp;OTA]&nbsp;Adding&nbsp;Security&nbsp;information&nbsp;to&nbsp;OTA&nbsp;package"&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;@echo&nbsp;"[SEC&nbsp;OTA]&nbsp;path&nbsp;:&nbsp;mediatek/custom/ (MTK_PROJECT)/security/recovery/SEC_VER.txt”  
  73.     (hide)&nbsp; (hide)&nbsp; (ACP) mediatek/custom/(MTK_PROJECT)/security/recovery/SEC_VER.txt&nbsp; (MTK_PROJECT)/security/recovery/SEC_VER.txt&nbsp; (zip_root)/OTA/  
  74.     @# Files that do not end up in any images, but are necessary to  
  75.     @# build them.  
  76.     (hide)&nbsp;mkdir&nbsp;-p&nbsp; (hide)&nbsp;mkdir&nbsp;-p&nbsp; (zip_root)/META  
  77.     (hide)&nbsp; (hide)&nbsp; (ACP) (APKCERTS_FILE)&nbsp; (APKCERTS_FILE)&nbsp; (zip_root)/META/apkcerts.txt  
  78.     (hide)&nbsp;echo&nbsp;" (hide)&nbsp;echo&nbsp;" (PRODUCT_OTA_PUBLIC_KEYS)” > (zip_root)/META/otakeys.txt&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/META/otakeys.txt&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo “recovery_api_version=(PRIVATE_RECOVERY_API_VERSION)"&nbsp;&gt;&nbsp; (PRIVATE_RECOVERY_API_VERSION)"&nbsp;&gt;&nbsp; (zip_root)/META/misc_info.txt  
  79. ifdef BOARD_FLASH_BLOCK_SIZE  
  80.     (hide)&nbsp;echo&nbsp;"blocksize= (hide)&nbsp;echo&nbsp;"blocksize= (BOARD_FLASH_BLOCK_SIZE)” >> (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_BOOTIMAGE_PARTITION_SIZE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_BOOTIMAGE_PARTITION_SIZE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo “boot_size=(BOARD_BOOTIMAGE_PARTITION_SIZE)"&nbsp;&gt;&gt;&nbsp; (BOARD_BOOTIMAGE_PARTITION_SIZE)"&nbsp;&gt;&gt;&nbsp; (zip_root)/META/misc_info.txt  
  81. endif  
  82. ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE  
  83.     (hide)&nbsp;echo&nbsp;"recovery_size= (hide)&nbsp;echo&nbsp;"recovery_size= (BOARD_RECOVERYIMAGE_PARTITION_SIZE)” >> (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_SYSTEMIMAGE_PARTITION_SIZE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_SYSTEMIMAGE_PARTITION_SIZE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo “system_size=(BOARD_SYSTEMIMAGE_PARTITION_SIZE)"&nbsp;&gt;&gt;&nbsp; (BOARD_SYSTEMIMAGE_PARTITION_SIZE)"&nbsp;&gt;&gt;&nbsp; (zip_root)/META/misc_info.txt  
  84. endif  
  85. ifdef BOARD_SECROIMAGE_PARTITION_SIZE  
  86.     (hide)&nbsp;echo&nbsp;"secro_size= (hide)&nbsp;echo&nbsp;"secro_size= (BOARD_SECROIMAGE_PARTITION_SIZE)” >> (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_CACHEIMAGE_PARTITION_SIZE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;BOARD_CACHEIMAGE_PARTITION_SIZE&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo “cache_size=(BOARD_CACHEIMAGE_PARTITION_SIZE)"&nbsp;&gt;&gt;&nbsp; (BOARD_CACHEIMAGE_PARTITION_SIZE)"&nbsp;&gt;&gt;&nbsp; (zip_root)/META/misc_info.txt  
  87. endif  
  88. ifdef BOARD_USERDATAIMAGE_PARTITION_SIZE  
  89.     (hide)&nbsp;echo&nbsp;"userdata_size= (hide)&nbsp;echo&nbsp;"userdata_size= (BOARD_USERDATAIMAGE_PARTITION_SIZE)” >> (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo “tool_extensions=(tool_extensions)"&nbsp;&gt;&gt;&nbsp; (tool_extensions)"&nbsp;&gt;&gt;&nbsp; (zip_root)/META/misc_info.txt  
  90. ifdef mkyaffs2_extra_flags  
  91.     (hide)&nbsp;echo&nbsp;"mkyaffs2_extra_flags= (hide)&nbsp;echo&nbsp;"mkyaffs2_extra_flags= (mkyaffs2_extra_flags)” >> (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;INTERNAL_USERIMAGES_SPARSE_EXT_FLAG&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class=""><span>endif&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;INTERNAL_USERIMAGES_SPARSE_EXT_FLAG&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo “extfs_sparse_flag=(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG)"&nbsp;&gt;&gt;&nbsp; (INTERNAL_USERIMAGES_SPARSE_EXT_FLAG)"&nbsp;&gt;&gt;&nbsp; (zip_root)/META/misc_info.txt  
  92. endif  
  93.     (hide)&nbsp;echo&nbsp;"default_system_dev_certificate= (hide)&nbsp;echo&nbsp;"default_system_dev_certificate= (DEFAULT_KEY_CERT_PAIR)” >> (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;PRODUCT_EXTRA_RECOVERY_KEYS&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (zip_root)/META/misc_info.txt&nbsp;&nbsp;</span></li><li class="alt"><span>ifdef&nbsp;PRODUCT_EXTRA_RECOVERY_KEYS&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; (hide) echo “extra_recovery_keys=(PRODUCT_EXTRA_RECOVERY_KEYS)"&nbsp;&gt;&gt;&nbsp; (PRODUCT_EXTRA_RECOVERY_KEYS)"&nbsp;&gt;&gt;&nbsp; (zip_root)/META/misc_info.txt  
  94. endif  
  95.     @# Zip everything up, preserving symlinks  
  96.     (hide)&nbsp;(cd&nbsp; (hide)&nbsp;(cd&nbsp; (zip_root) && zip -qry ../(notdir&nbsp; (notdir&nbsp; @) .)  
  97.     @# Run fs_config on all the system, boot ramdisk, and recovery ramdisk files in the zip, and save the output  
  98.     (hide)&nbsp;zipinfo&nbsp;-1&nbsp; (hide)&nbsp;zipinfo&nbsp;-1&nbsp; @ | awk ‘BEGIN { FS=”SYSTEM/” } /^SYSTEM\// {print “system/” 
    2}'&nbsp;|&nbsp;$(HOST_OUT_EXECUTABLES)/fs_config&nbsp;&gt;&nbsp;$(zip_root)/META/filesystem_config.txt&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$(hide)&nbsp;zipinfo&nbsp;-1&nbsp;$@&nbsp;|&nbsp;awk&nbsp;'BEGIN&nbsp;{&nbsp;FS="BOOT/RAMDISK/"&nbsp;}&nbsp;/^BOOT\/RAMDISK\//&nbsp;{print&nbsp; 2}'&nbsp;|&nbsp;$(HOST_OUT_EXECUTABLES)/fs_config&nbsp;&gt;&nbsp;$(zip_root)/META/filesystem_config.txt&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$(hide)&nbsp;zipinfo&nbsp;-1&nbsp;$@&nbsp;|&nbsp;awk&nbsp;'BEGIN&nbsp;{&nbsp;FS="BOOT/RAMDISK/"&nbsp;}&nbsp;/^BOOT\/RAMDISK\//&nbsp;{print&nbsp;
    2}'&nbsp;|&nbsp;(HOST_OUT_EXECUTABLES)/fs_config&nbsp;&gt;&nbsp; (HOST_OUT_EXECUTABLES)/fs_config&nbsp;&gt;&nbsp; (zip_root)/META/boot_filesystem_config.txt&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;(hide)&nbsp;zipinfo&nbsp;-1&nbsp; (hide)&nbsp;zipinfo&nbsp;-1&nbsp; @&nbsp;|&nbsp;awk&nbsp;'BEGIN&nbsp;{&nbsp;FS="RECOVERY/RAMDISK/"&nbsp;}&nbsp;/^RECOVERY\/RAMDISK\//&nbsp;{print&nbsp;$$2}’ | $(HOST_OUT_EXECUTABLES)/fs_config&nbsp;&gt;&nbsp;$(zip_root)/META/recovery_filesystem_config.txt  
  99.     (hide)&nbsp;(cd&nbsp; (hide)&nbsp;(cd&nbsp; (zip_root) && zip -q ../(notdir&nbsp; (notdir&nbsp; @) META/*filesystem_config.txt)  
  100.   
  101.   
  102. target-files-package: (BUILT_TARGET_FILES_PACKAGE)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>ifneq&nbsp;( (BUILT_TARGET_FILES_PACKAGE)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>ifneq&nbsp;( (TARGET_PRODUCT),sdk)  
  103. ifeq ((filter&nbsp;generic%, (filter&nbsp;generic%, (TARGET_DEVICE)),)  
  104. ifneq ((TARGET_NO_KERNEL),true)&nbsp;&nbsp;</span></li><li class="alt"><span>ifneq&nbsp;( (TARGET_NO_KERNEL),true)&nbsp;&nbsp;</span></li><li class="alt"><span>ifneq&nbsp;( (recovery_fstab),)  
# —————————————————————–

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 := (TARGETPRODUCT)ifeq( ( T A R G E T P R O D U C T ) i f e q ( (TARGET_BUILD_TYPE),debug)
name := (name)debugendifname:= ( n a m e ) d e b u g e n d i f n a m e := (name)-target_files-$(FILE_NAME_TAG)

intermediates := (callintermediatesdirfor,PACKAGING,targetfiles)BUILTTARGETFILESPACKAGE:= ( c a l l i n t e r m e d i a t e s − d i r − f o r , P A C K A G I N G , t a r g e t f i l e s ) B U I L T T A R G E T F I L E S P A C K A G E := (intermediates)/ (name).zip ( n a m e ) . z i p (BUILT_TARGET_FILES_PACKAGE): intermediates := (intermediates) ( i n t e r m e d i a t e s ) (BUILT_TARGET_FILES_PACKAGE): \
zip_root := (intermediates)/ ( i n t e r m e d i a t e s ) / (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 ( s t r i p (1))" -a "$$(ls -A $(1))" ]; then \
mkdir -p $(2) && \
$(ACP) -rd $(strip $(1))/* $(2); \
fi
endef

built_ota_tools := \
(callintermediatesdirfor,EXECUTABLES,applypatch)/applypatch  ( c a l l i n t e r m e d i a t e s − d i r − f o r , E X E C U T A B L E S , a p p l y p a t c h ) / a p p l y p a t c h   (call intermediates-dir-for,EXECUTABLES,applypatch_static)/applypatch_static \
(callintermediatesdirfor,EXECUTABLES,checkprereq)/checkprereq  ( c a l l i n t e r m e d i a t e s − d i r − f o r , E X E C U T A B L E S , c h e c k p r e r e q ) / c h e c k p r e r e q   (call intermediates-dir-for,EXECUTABLES,sqlite3)/sqlite3 \
(callintermediatesdirfor,EXECUTABLES,updater)/updater ( c a l l i n t e r m e d i a t e s − d i r − f o r , E X E C U T A B L E S , u p d a t e r ) / u p d a t e r (BUILT_TARGET_FILES_PACKAGE): PRIVATE_OTA_TOOLS := $(built_ota_tools)

(BUILTTARGETFILESPACKAGE):PRIVATERECOVERYAPIVERSION:= ( B U I L T T A R G E T F I L E S P A C K A G E ) : P R I V A T E R E C O V E R Y A P I V E R S I O N := (RECOVERY_API_VERSION)

ifeq ($(TARGET_RELEASETOOLS_EXTENSIONS),)

default to common dir for device vendor

(BUILTTARGETFILESPACKAGE):toolextensions:= ( B U I L T T A R G E T F I L E S P A C K A G E ) : t o o l e x t e n s i o n s := (TARGET_DEVICE_DIR)/../common
else
(BUILTTARGETFILESPACKAGE):toolextensions:= ( B U I L T T A R G E T F I L E S P A C K A G E ) : t o o l e x t e n s i o n s := (TARGET_RELEASETOOLS_EXTENSIONS)
endif

Depending on the various images guarantees that the underlying

directories are up-to-date.

ifeq ( (TARGETUSERIMAGESUSEEXT4),true) ( T A R G E T U S E R I M A G E S U S E E X T 4 ) , t r u e ) (BUILT_TARGET_FILES_PACKAGE): $(INSTALLED_CACHEIMAGE_TARGET)
endif

(BUILTTARGETFILESPACKAGE):  ( B U I L T T A R G E T F I L E S P A C K A G E ) :   (INSTALLED_BOOTIMAGE_TARGET) \
(INSTALLEDRADIOIMAGETARGET)  ( I N S T A L L E D R A D I O I M A G E T A R G E T )   (INSTALLED_RECOVERYIMAGE_TARGET) \
(INSTALLEDFACTORYIMAGETARGET)  ( I N S T A L L E D F A C T O R Y I M A G E T A R G E T )   (INSTALLED_SYSTEMIMAGE) \
(INSTALLEDCACHEIMAGETARGET)  ( I N S T A L L E D C A C H E I M A G E T A R G E T )   (INSTALLED_USERDATAIMAGE_TARGET) \
(INSTALLEDSECROIMAGETARGET)  ( I N S T A L L E D S E C R O I M A G E T A R G E T )   (INSTALLED_ANDROID_INFO_TXT_TARGET) \
(builtotatools)  ( b u i l t o t a t o o l s )   (APKCERTS_FILE) \
(HOSTOUTEXECUTABLES)/fsconfig | ( H O S T O U T E X E C U T A B L E S ) / f s c o n f i g   | (ACP)
@echo "Package target files: @" @ " (hide) rm -rf @ @ (zip_root)
(hide)mkdirp ( h i d e ) m k d i r − p (dir @) @ ) (zip_root)
@# Components of the recovery image
(hide)mkdirp ( h i d e ) m k d i r − p (zip_root)/RECOVERY
(hide) ( h i d e ) (call package_files-copy-root, \
(TARGETRECOVERYROOTOUT), ( T A R G E T R E C O V E R Y R O O T O U T ) , (zip_root)/RECOVERY/RAMDISK)
ifdef INSTALLED_KERNEL_TARGET
(hide) ( h i d e ) (ACP) (INSTALLEDKERNELTARGET) ( I N S T A L L E D K E R N E L T A R G E T ) (zip_root)/RECOVERY/kernel
(hide) ( h i d e ) (ACP) (recoveryramdisk) ( r e c o v e r y r a m d i s k ) (zip_root)/RECOVERY/ramdisk
endif
ifdef INSTALLED_2NDBOOTLOADER_TARGET
(hide) ( h i d e ) (ACP) \
(INSTALLED2NDBOOTLOADERTARGET) ( I N S T A L L E D 2 N D B O O T L O A D E R T A R G E T ) (zip_root)/RECOVERY/second
endif
ifdef BOARD_KERNEL_CMDLINE
(hide)echo" ( h i d e ) e c h o " (BOARD_KERNEL_CMDLINE)" > (ziproot)/RECOVERY/cmdlineendififdefBOARDKERNELBASE ( z i p r o o t ) / R E C O V E R Y / c m d l i n e e n d i f i f d e f B O A R D K E R N E L B A S E (hide) echo " (BOARDKERNELBASE)"> ( B O A R D K E R N E L B A S E ) "> (zip_root)/RECOVERY/base
endif
@# Components of the factory image
(hide)mkdirp ( h i d e ) m k d i r − p (zip_root)/FACTORY
(hide) ( h i d e ) (call package_files-copy-root, \
(TARGETFACTORYROOTOUT), ( T A R G E T F A C T O R Y R O O T O U T ) , (zip_root)/FACTORY/RAMDISK)
ifdef INSTALLED_KERNEL_TARGET
(hide) ( h i d e ) (ACP) (INSTALLEDKERNELTARGET) ( I N S T A L L E D K E R N E L T A R G E T ) (zip_root)/FACTORY/kernel
endif
ifdef BOARD_KERNEL_PAGESIZE
(hide)echo" ( h i d e ) e c h o " (BOARD_KERNEL_PAGESIZE)" > (ziproot)/RECOVERY/pagesizeendififdefINSTALLED2NDBOOTLOADERTARGET ( z i p r o o t ) / R E C O V E R Y / p a g e s i z e e n d i f i f d e f I N S T A L L E D 2 N D B O O T L O A D E R T A R G E T (hide) (ACP)  ( A C P )   (INSTALLED_2NDBOOTLOADER_TARGET) (ziproot)/FACTORY/secondendififdefBOARDKERNELCMDLINE ( z i p r o o t ) / F A C T O R Y / s e c o n d e n d i f i f d e f B O A R D K E R N E L C M D L I N E (hide) echo " (BOARDKERNELCMDLINE)"> ( B O A R D K E R N E L C M D L I N E ) "> (zip_root)/FACTORY/cmdline
endif
ifdef BOARD_KERNEL_BASE
(hide)echo" ( h i d e ) e c h o " (BOARD_KERNEL_BASE)" > (zip_root)/FACTORY/base  
endif  
    @# Components of the boot image
(zip_root)/FACTORY/base  endif      @# Components of the boot image
(hide) mkdir -p (ziproot)/BOOT ( z i p r o o t ) / B O O T (hide) (callpackagefilescopyroot,  ( c a l l p a c k a g e f i l e s − c o p y − r o o t ,   (TARGET_ROOT_OUT), (ziproot)/BOOT/RAMDISK)ifdefINSTALLEDKERNELTARGET ( z i p r o o t ) / B O O T / R A M D I S K ) i f d e f I N S T A L L E D K E R N E L T A R G E T (hide) (ACP) ( A C P ) (INSTALLED_KERNEL_TARGET) (ziproot)/BOOT/kernel ( z i p r o o t ) / B O O T / k e r n e l (hide) (ACP) ( A C P ) (INSTALLED_RAMDISK_TARGET) (ziproot)/BOOT/ramdiskendififdefINSTALLED2NDBOOTLOADERTARGET ( z i p r o o t ) / B O O T / r a m d i s k e n d i f i f d e f I N S T A L L E D 2 N D B O O T L O A D E R T A R G E T (hide) (ACP)  ( A C P )   (INSTALLED_2NDBOOTLOADER_TARGET) (ziproot)/BOOT/secondendififdefBOARDKERNELCMDLINE ( z i p r o o t ) / B O O T / s e c o n d e n d i f i f d e f B O A R D K E R N E L C M D L I N E (hide) echo " (BOARDKERNELCMDLINE)"> ( B O A R D K E R N E L C M D L I N E ) "> (zip_root)/BOOT/cmdline
endif
ifdef BOARD_KERNEL_BASE
(hide)echo" ( h i d e ) e c h o " (BOARD_KERNEL_BASE)" > (ziproot)/BOOT/baseendififdefBOARDKERNELPAGESIZE ( z i p r o o t ) / B O O T / b a s e e n d i f i f d e f B O A R D K E R N E L P A G E S I Z E (hide) echo " (BOARDKERNELPAGESIZE)"> ( B O A R D K E R N E L P A G E S I Z E ) "> (zip_root)/BOOT/pagesize
endif

wschen

ifneq "" " (CUSTOMBUILDVERNO)" ( C U S T O M B U I L D V E R N O ) " (hide) echo " (CUSTOMBUILDVERNO)"> ( C U S T O M B U I L D V E R N O ) "> (zip_root)/BOOT/board
endif

[eton begin]: added by LiuDekuan for u-boot update

$(hide) $(ACP) $(PRODUCT_OUT)/uboot_eyang77_ics2.bin $(zip_root)/uboot.bin

[eton end]

$(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)
@# 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)" &gt; $(zip_root)/META/otakeys.txt
$(hide) echo "recovery_api_version=$(PRIVATE_RECOVERY_API_VERSION)" &gt; $(zip_root)/META/misc_info.txt

ifdef BOARD_FLASH_BLOCK_SIZE
(hide)echo"blocksize= ( h i d e ) e c h o " b l o c k s i z e = (BOARD_FLASH_BLOCK_SIZE)” >> (ziproot)/META/miscinfo.txtendififdefBOARDBOOTIMAGEPARTITIONSIZE ( z i p r o o t ) / M E T A / m i s c i n f o . t x t e n d i f i f d e f B O A R D B O O T I M A G E P A R T I T I O N S I Z E (hide) echo "boot_size= (BOARDBOOTIMAGEPARTITIONSIZE)>> ( B O A R D B O O T I M A G E P A R T I T I O N S I Z E ) ” >> (zip_root)/META/misc_info.txt
endif
ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE
(hide)echo"recoverysize= ( h i d e ) e c h o " r e c o v e r y s i z e = (BOARD_RECOVERYIMAGE_PARTITION_SIZE)” >> (ziproot)/META/miscinfo.txtendififdefBOARDSYSTEMIMAGEPARTITIONSIZE ( z i p r o o t ) / M E T A / m i s c i n f o . t x t e n d i f i f d e f B O A R D S Y S T E M I M A G E P A R T I T I O N S I Z E (hide) echo "system_size= (BOARDSYSTEMIMAGEPARTITIONSIZE)>> ( B O A R D S Y S T E M I M A G E P A R T I T I O N S I Z E ) ” >> (zip_root)/META/misc_info.txt
endif
ifdef BOARD_SECROIMAGE_PARTITION_SIZE
(hide)echo"secrosize= ( h i d e ) e c h o " s e c r o s i z e = (BOARD_SECROIMAGE_PARTITION_SIZE)” >> (ziproot)/META/miscinfo.txtendififdefBOARDCACHEIMAGEPARTITIONSIZE ( z i p r o o t ) / M E T A / m i s c i n f o . t x t e n d i f i f d e f B O A R D C A C H E I M A G E P A R T I T I O N S I Z E (hide) echo "cache_size= (BOARDCACHEIMAGEPARTITIONSIZE)>> ( B O A R D C A C H E I M A G E P A R T I T I O N S I Z E ) ” >> (zip_root)/META/misc_info.txt
endif
ifdef BOARD_USERDATAIMAGE_PARTITION_SIZE
(hide)echo"userdatasize= ( h i d e ) e c h o " u s e r d a t a s i z e = (BOARD_USERDATAIMAGE_PARTITION_SIZE)” >> (ziproot)/META/miscinfo.txtendif ( z i p r o o t ) / M E T A / m i s c i n f o . t x t e n d i f (hide) echo "tool_extensions= (toolextensions)>> ( t o o l e x t e n s i o n s ) ” >> (zip_root)/META/misc_info.txt
ifdef mkyaffs2_extra_flags
(hide)echo"mkyaffs2extraflags= ( h i d e ) e c h o " m k y a f f s 2 e x t r a f l a g s = (mkyaffs2_extra_flags)” >> (ziproot)/META/miscinfo.txtendififdefINTERNALUSERIMAGESSPARSEEXTFLAG ( z i p r o o t ) / M E T A / m i s c i n f o . t x t e n d i f i f d e f I N T E R N A L U S E R I M A G E S S P A R S E E X T F L A G (hide) echo "extfs_sparse_flag= (INTERNALUSERIMAGESSPARSEEXTFLAG)>> ( I N T E R N A L U S E R I M A G E S S P A R S E E X T F L A G ) ” >> (zip_root)/META/misc_info.txt
endif
(hide)echo"defaultsystemdevcertificate= ( h i d e ) e c h o " d e f a u l t s y s t e m d e v c e r t i f i c a t e = (DEFAULT_KEY_CERT_PAIR)” >> (ziproot)/META/miscinfo.txtifdefPRODUCTEXTRARECOVERYKEYS ( z i p r o o t ) / M E T A / m i s c i n f o . t x t i f d e f P R O D U C T E X T R A R E C O V E R Y K E Y S (hide) echo "extra_recovery_keys= (PRODUCTEXTRARECOVERYKEYS)>> ( P R O D U C T E X T R A R E C O V E R Y K E Y S ) ” >> (zip_root)/META/misc_info.txt
endif
@# Zip everything up, preserving symlinks
(hide)(cd ( h i d e ) ( c d (zip_root) && zip -qry ../ (notdir ( n o t d i r @) .)
@# Run fs_config on all the system, boot ramdisk, and recovery ramdisk files in the zip, and save the output
(hide)zipinfo1 ( h i d e ) z i p i n f o − 1 @ | awk ‘BEGIN { FS=”SYSTEM/” } /^SYSTEM\// {print “system/”

2}' | $(HOST_OUT_EXECUTABLES)/fs_config &gt; $(zip_root)/META/filesystem_config.txt
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print
2}' | $(HOST_OUT_EXECUTABLES)/fs_config &gt; $(zip_root)/META/filesystem_config.txt $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print
2}' | (HOST_OUT_EXECUTABLES)/fs_config &gt; (HOST_OUT_EXECUTABLES)/fs_config &gt; (zip_root)/META/boot_filesystem_config.txt (hide)zipinfo1 ( h i d e ) z i p i n f o − 1 @ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}’ | $(HOST_OUT_EXECUTABLES)/fs_config &gt; $(zip_root)/META/recovery_filesystem_config.txt
$(hide) (cd $(zip_root) && zip -q ../$(notdir $@) META/*filesystem_config.txt)

target-files-package: $(BUILT_TARGET_FILES_PACKAGE)

ifneq ( (TARGETPRODUCT),sdk)ifeq( ( T A R G E T P R O D U C T ) , s d k ) i f e q ( (filter generic%, (TARGETDEVICE)),)ifneq( ( T A R G E T D E V I C E ) ) , ) i f n e q ( (TARGET_NO_KERNEL),true)
ifneq ($(recovery_fstab),)

代码段3 $(BUILT_TARGE_FILES_PACKAGE)目标的编译规则

         system.img文件的重新打包是通过 (BUILTTARGEFILESPACKAGE) ( B U I L T T A R G E F I L E S P A C K A G E ) 的 依 赖 条 件 (INSTALLED_SYSTEMIMAGE)目标文件的编译来完成的,而$(BUILT_TARGE_FILES_PACKAGE)所有的执行命令(代码第66行至最后)都只为完成一件事,生成差分资源包所对应的目录并将其打包为ZIP包。具体的操作包括:

  • 创建 (ziproot)(66 68) ( z i p r o o t ) 目 录 ( 代 码 第 66   68 行 ) , (zip_root)即out/target/product/<product-name>/obj/PACKAGING/target_files_from_intermedias/<product-name>-target_files-<version-name>;
  • 创建/ (ziproot)/RECOVERYCOPY(69 86)</li><li>/ ( z i p r o o t ) / R E C O V E R Y 目 录 并 将 C O P Y 相 关 文 件 ( 代 码 69   86 ) ; < / l i >< l i > 创 建 / (zip_root)/FACTORY目录并将COPY相关文件(代码87~106);
  • 创建/ (ziproot)/BOOTCOPY(107 131)</li><li>COPY(132 191)</li><li> ( z i p r o o t ) / B O O T 目 录 并 将 C O P Y 相 关 文 件 ( 代 码 107   131 ) ; < / l i >< l i > 创 建 其 他 目 录 并 C O P Y 文 件 ( 代 码 132   191 ) ; < / l i >< l i > 将 (zip_root)目录压缩为资源差分包(代码192~198)等。

        经过目标文件$(BUILT_TARGE_FILES_PACKAGE)的执行后,system.img已经被重新打包,且差分资源包也已经生成,剩下的工作就是将差分资源包传递给ota_target_from_files代码,由它来生成OTA整包。

1.3 ota_target_from_files

         ota_target_from_files为python代码所写的一个可执行文件,其路径为./build/tools/releasetools/ota_target_from_files。在此目录中其他python代码文件的辅助下,ota_target_from_files主要完成两个功能:生成OTA整包和OTA差分包,分别是通过函数WriteFullOTAPackage和WriteIncrementalOTAPackage来实现的。显然make otapackage命令调用的就是函数WriteFullOTAPackage来生成OTA整包。

[python] view plain copy
print ?
  1. def main(argv):  
  2.   
  3.   def option_handler(o, a):  
  4.     if o in (“-b”“–board_config”):  
  5.       pass   # deprecated  
  6.     elif o in (“-k”“–package_key”):  
  7.       OPTIONS.package_key = a  
  8.     elif o in (“-i”“–incremental_from”):  
  9.       print “LiuDekuan: incremental_source = ”, a  
  10.       OPTIONS.incremental_source = a  
  11.     elif o in (“-w”“–wipe_user_data”):  
  12.       OPTIONS.wipe_user_data = True  
  13.     elif o in (“-n”“–no_prereq”):  
  14.       OPTIONS.omit_prereq = True  
  15.     elif o in (“-e”“–extra_script”):  
  16.       OPTIONS.extra_script = a  
  17.     elif o in (“-a”“–aslr_mode”):  
  18.       if a in (“on”“On”“true”“True”“yes”“Yes”):  
  19.         OPTIONS.aslr_mode = True  
  20.       else:  
  21.         OPTIONS.aslr_mode = False  
  22.     elif o in (“–worker_threads”):  
  23.       OPTIONS.worker_threads = int(a)  
  24.     elif o in (“-r”“–preloader”):  
  25.       OPTIONS.preloader = a  
  26.     elif o in (“-l”“–logo”):  
  27.       OPTIONS.logo = a  
  28.     elif o in (“-u”“–uboot”):  
  29.       OPTIONS.uboot = a  
  30.     elif o in (“-d”“–dsp”):  
  31.       OPTIONS.dsp = a  
  32.     else:  
  33.       return False  
  34.     return True  
  35.   
  36.   args = common.ParseOptions(argv, __doc__,  
  37.                              extra_opts=”b:k:i:d:wne:r:l:u:d:a:”,  
  38.                              extra_long_opts=[”board_config=”,  
  39.                                               ”package_key=”,  
  40.                                               ”incremental_from=”,  
  41.                                               ”wipe_user_data”,  
  42.                                               ”no_prereq”,  
  43.                                               ”extra_script=”,  
  44.                                               ”preloader=”,  
  45.                                               ”logo=”,  
  46.                                               ”uboot=”,  
  47.                                               ”dsp=”,  
  48.                                               ”worker_threads=”,  
  49.                                               ”aslr_mode=”,  
  50.                                               ],  
  51.                              extra_option_handler=option_handler)  
  52.   
  53.   if len(args) != 2:  
  54.     common.Usage(__doc__)  
  55.     sys.exit(1)  
  56.   if OPTIONS.extra_script is not None:  
  57.     OPTIONS.extra_script = open(OPTIONS.extra_script).read()  
  58.   
  59.   print “unzipping target target-files…”  
  60.   OPTIONS.input_tmp, input_zip = common.UnzipTemp(args[0])  
  61.   
  62.   OPTIONS.target_tmp = OPTIONS.input_tmp  
  63.   OPTIONS.info_dict = common.LoadInfoDict(input_zip)  
  64.   if OPTIONS.verbose:  
  65.     print “— target info —”  
  66.     common.DumpInfoDict(OPTIONS.info_dict)  
  67.   
  68.   if OPTIONS.device_specific is None:  
  69.     OPTIONS.device_specific = OPTIONS.info_dict.get(”tool_extensions”None)  
  70.   if OPTIONS.device_specific is not None:  
  71.     OPTIONS.device_specific = os.path.normpath(OPTIONS.device_specific)  
  72.     print “using device-specific extensions in”, OPTIONS.device_specific  
  73.   
  74.   temp_zip_file = tempfile.NamedTemporaryFile()  
  75.   output_zip = zipfile.ZipFile(temp_zip_file, ”w”,  
  76.                                compression=zipfile.ZIP_DEFLATED)  
  77.   
  78.   if OPTIONS.incremental_source is None:  
  79.     WriteFullOTAPackage(input_zip, output_zip)  
  80.     if OPTIONS.package_key is None:  
  81.       OPTIONS.package_key = OPTIONS.info_dict.get(  
  82.           ”default_system_dev_certificate”,  
  83.           ”build/target/product/security/testkey”)  
  84.   else:  
  85.     print “unzipping source target-files…”  
  86.     OPTIONS.source_tmp, source_zip = common.UnzipTemp(OPTIONS.incremental_source)  
  87.     OPTIONS.target_info_dict = OPTIONS.info_dict  
  88.     OPTIONS.source_info_dict = common.LoadInfoDict(source_zip)  
  89.     if OPTIONS.package_key is None:  
  90.       OPTIONS.package_key = OPTIONS.source_info_dict.get(  
  91.           ”default_system_dev_certificate”,  
  92.           ”build/target/product/security/testkey”)  
  93.     if OPTIONS.verbose:  
  94.       print “— source info —”  
  95.       common.DumpInfoDict(OPTIONS.source_info_dict)  
  96.     WriteIncrementalOTAPackage(input_zip, source_zip, output_zip)  
  97.   
  98.   output_zip.close()  
  99.   
  100.   SignOutput(temp_zip_file.name, args[1])  
  101.   temp_zip_file.close()  
  102.   
  103.   common.Cleanup()  
  104.   
  105.   print “done.”  
def main(argv):

  def option_handler(o, a):
    if o in ("-b", "--board_config"):
      pass   # deprecated
    elif o in ("-k", "--package_key"):
      OPTIONS.package_key = a
    elif o in ("-i", "--incremental_from"):
      print "LiuDekuan: incremental_source = ", a
      OPTIONS.incremental_source = a
    elif o in ("-w", "--wipe_user_data"):
      OPTIONS.wipe_user_data = True
    elif o in ("-n", "--no_prereq"):
      OPTIONS.omit_prereq = True
    elif o in ("-e", "--extra_script"):
      OPTIONS.extra_script = a
    elif o in ("-a", "--aslr_mode"):
      if a in ("on", "On", "true", "True", "yes", "Yes"):
        OPTIONS.aslr_mode = True
      else:
        OPTIONS.aslr_mode = False
    elif o in ("--worker_threads"):
      OPTIONS.worker_threads = int(a)
    elif o in ("-r", "--preloader"):
      OPTIONS.preloader = a
    elif o in ("-l", "--logo"):
      OPTIONS.logo = a
    elif o in ("-u", "--uboot"):
      OPTIONS.uboot = a
    elif o in ("-d", "--dsp"):
      OPTIONS.dsp = a
    else:
      return False
    return True

  args = common.ParseOptions(argv, __doc__,
                             extra_opts="b:k:i:d:wne:r:l:u:d:a:",
                             extra_long_opts=["board_config=",
                                              "package_key=",
                                              "incremental_from=",
                                              "wipe_user_data",
                                              "no_prereq",
                                              "extra_script=",
                                              "preloader=",
                                              "logo=",
                                              "uboot=",
                                              "dsp=",
                                              "worker_threads=",
                                              "aslr_mode=",
                                              ],
                             extra_option_handler=option_handler)

  if len(args) != 2:
    common.Usage(__doc__)
    sys.exit(1)
  if OPTIONS.extra_script is not None:
    OPTIONS.extra_script = open(OPTIONS.extra_script).read()

  print "unzipping target target-files..."
  OPTIONS.input_tmp, input_zip = common.UnzipTemp(args[0])

  OPTIONS.target_tmp = OPTIONS.input_tmp
  OPTIONS.info_dict = common.LoadInfoDict(input_zip)
  if OPTIONS.verbose:
    print "--- target info ---"
    common.DumpInfoDict(OPTIONS.info_dict)

  if OPTIONS.device_specific is None:
    OPTIONS.device_specific = OPTIONS.info_dict.get("tool_extensions", None)
  if OPTIONS.device_specific is not None:
    OPTIONS.device_specific = os.path.normpath(OPTIONS.device_specific)
    print "using device-specific extensions in", OPTIONS.device_specific

  temp_zip_file = tempfile.NamedTemporaryFile()
  output_zip = zipfile.ZipFile(temp_zip_file, "w",
                               compression=zipfile.ZIP_DEFLATED)

  if OPTIONS.incremental_source is None:
    WriteFullOTAPackage(input_zip, output_zip)
    if OPTIONS.package_key is None:
      OPTIONS.package_key = OPTIONS.info_dict.get(
          "default_system_dev_certificate",
          "build/target/product/security/testkey")
  else:
    print "unzipping source target-files..."
    OPTIONS.source_tmp, source_zip = common.UnzipTemp(OPTIONS.incremental_source)
    OPTIONS.target_info_dict = OPTIONS.info_dict
    OPTIONS.source_info_dict = common.LoadInfoDict(source_zip)
    if OPTIONS.package_key is None:
      OPTIONS.package_key = OPTIONS.source_info_dict.get(
          "default_system_dev_certificate",
          "build/target/product/security/testkey")
    if OPTIONS.verbose:
      print "--- source info ---"
      common.DumpInfoDict(OPTIONS.source_info_dict)
    WriteIncrementalOTAPackage(input_zip, source_zip, output_zip)

  output_zip.close()

  SignOutput(temp_zip_file.name, args[1])
  temp_zip_file.close()

  common.Cleanup()

  print "done."

代码段4 ota_from_target_files中的main函数

        目标$(INTERNAL_OTA_PACKAGE_TARGET)的执行中调用到ota_from_target_files(如代码段1所示),程序便会跳转到ota_from_target_files的main函数中(代码段4),main函数首先解析Makefile(或终端)传递过来的参数(代码3~51),之后将代码段3中生成的差分资源包赋给变量input_zip(代码第60行)并创建需要输出的ZIP包(整包或差分包);之后判断当前命令是生成整包还是差分包(代码78)。如是整包升级则调用函数WriteFullOTAPackage函数(代码79),其中参数input_zip是差分资源包,而output_zip即OTA整包;如是差分包升级则执行else分支(85~96),调用函数WriteIncrementalOTAPackage。

[python] view plain copy
print ?
  1. def WriteFullOTAPackage(input_zip, output_zip):  
  2.   # TODO: how to determine this?  We don’t know what version it will  
  3.   # be installed on top of.  For now, we expect the API just won’t  
  4.   # change very often.  
  5.   script = edify_generator.EdifyGenerator(3, OPTIONS.info_dict)  
  6.   
  7.   metadata = {”post-build”: GetBuildProp(“ro.build.fingerprint”, input_zip),  
  8.               ”pre-device”: GetBuildProp(“ro.product.device”, input_zip),  
  9.               ”post-timestamp”: GetBuildProp(“ro.build.date.utc”, input_zip),  
  10.               }  
  11.   
  12.   device_specific = common.DeviceSpecificParams(  
  13.       input_zip=input_zip,  
  14.       input_version=OPTIONS.info_dict[”recovery_api_version”],  
  15.       output_zip=output_zip,  
  16.       script=script,  
  17.       input_tmp=OPTIONS.input_tmp,  
  18.       metadata=metadata,  
  19.       info_dict=OPTIONS.info_dict)  
  20.   
  21.   if not OPTIONS.omit_prereq:  
  22.     ts = GetBuildProp(”ro.build.date.utc”, input_zip)  
  23.     script.AssertOlderBuild(ts)  
  24.   
  25.   AppendAssertions(script, input_zip)  
  26.   device_specific.FullOTA_Assertions()  
  27.   
  28.   script.ShowProgress(0.50)  
  29.   
  30.   if OPTIONS.wipe_user_data:  
  31.     script.FormatPartition(”/data”)  
  32.   
  33.   if OPTIONS.selinux_fc is not None:  
  34.     WritePolicyConfig(OPTIONS.selinux_fc, output_zip)  
  35.   
  36.   script.FormatPartition(”/system”)  
  37.   script.Mount(”/system”)  
  38.   script.UnpackPackageDir(”recovery”“/system”)  
  39.   script.UnpackPackageDir(”system”“/system”)  
  40.   
  41.   (symlinks, retouch_files) = CopySystemFiles(input_zip, output_zip)  
  42.   script.MakeSymlinks(symlinks)  
  43.   if OPTIONS.aslr_mode:  
  44.     script.RetouchBinaries(retouch_files)  
  45.   else:  
  46.     script.UndoRetouchBinaries(retouch_files)  
  47.   
  48.   boot_img = common.GetBootableImage(”boot.img”“boot.img”,  
  49.                                      OPTIONS.input_tmp, ”BOOT”)  
  50.   recovery_img = common.GetBootableImage(”recovery.img”“recovery.img”,  
  51.                                          OPTIONS.input_tmp, ”RECOVERY”)  
  52.   MakeRecoveryPatch(output_zip, recovery_img, boot_img)  
  53.   
  54.   Item.GetMetadata(input_zip)  
  55.   Item.Get(”system”).SetPermissions(script)  
  56.   
  57.   common.CheckSize(boot_img.data, ”boot.img”, OPTIONS.info_dict)  
  58.   common.ZipWriteStr(output_zip, ”boot.img”, boot_img.data)  
  59.   script.ShowProgress(0.20)  
  60.   
  61.   script.ShowProgress(0.210)  
  62.   script.WriteRawImage(”/boot”“boot.img”)  
  63.   
  64.   script.ShowProgress(0.10)  
  65.   device_specific.FullOTA_InstallEnd()  
  66.   
  67.   if OPTIONS.extra_script is not None:  
  68.     script.AppendExtra(OPTIONS.extra_script)  
  69.   
  70.   script.UnmountAll()  
  71.   script.AddToZip(input_zip, output_zip)  
  72.   WriteMetadata(metadata, output_zip)  
def WriteFullOTAPackage(input_zip, output_zip):
  # TODO: how to determine this?  We don't know what version it will
  # be installed on top of.  For now, we expect the API just won't
  # change very often.
  script = edify_generator.EdifyGenerator(3, OPTIONS.info_dict)

  metadata = {"post-build": GetBuildProp("ro.build.fingerprint", input_zip),
              "pre-device": GetBuildProp("ro.product.device", input_zip),
              "post-timestamp": GetBuildProp("ro.build.date.utc", input_zip),
              }

  device_specific = common.DeviceSpecificParams(
      input_zip=input_zip,
      input_version=OPTIONS.info_dict["recovery_api_version"],
      output_zip=output_zip,
      script=script,
      input_tmp=OPTIONS.input_tmp,
      metadata=metadata,
      info_dict=OPTIONS.info_dict)

  if not OPTIONS.omit_prereq:
    ts = GetBuildProp("ro.build.date.utc", input_zip)
    script.AssertOlderBuild(ts)

  AppendAssertions(script, input_zip)
  device_specific.FullOTA_Assertions()

  script.ShowProgress(0.5, 0)

  if OPTIONS.wipe_user_data:
    script.FormatPartition("/data")

  if OPTIONS.selinux_fc is not None:
    WritePolicyConfig(OPTIONS.selinux_fc, output_zip)

  script.FormatPartition("/system")
  script.Mount("/system")
  script.UnpackPackageDir("recovery", "/system")
  script.UnpackPackageDir("system", "/system")

  (symlinks, retouch_files) = CopySystemFiles(input_zip, output_zip)
  script.MakeSymlinks(symlinks)
  if OPTIONS.aslr_mode:
    script.RetouchBinaries(retouch_files)
  else:
    script.UndoRetouchBinaries(retouch_files)

  boot_img = common.GetBootableImage("boot.img", "boot.img",
                                     OPTIONS.input_tmp, "BOOT")
  recovery_img = common.GetBootableImage("recovery.img", "recovery.img",
                                         OPTIONS.input_tmp, "RECOVERY")
  MakeRecoveryPatch(output_zip, recovery_img, boot_img)

  Item.GetMetadata(input_zip)
  Item.Get("system").SetPermissions(script)

  common.CheckSize(boot_img.data, "boot.img", OPTIONS.info_dict)
  common.ZipWriteStr(output_zip, "boot.img", boot_img.data)
  script.ShowProgress(0.2, 0)

  script.ShowProgress(0.2, 10)
  script.WriteRawImage("/boot", "boot.img")

  script.ShowProgress(0.1, 0)
  device_specific.FullOTA_InstallEnd()

  if OPTIONS.extra_script is not None:
    script.AppendExtra(OPTIONS.extra_script)

  script.UnmountAll()
  script.AddToZip(input_zip, output_zip)
  WriteMetadata(metadata, output_zip)

代码段5 ota_from_target_files文件中的WriteFullOTAPackage函数

        代码段5为WriteFullOTAPackage函数的定义,它所完成的功能便是将整包所需要的文件从差分资源包中读出并写入到整包中。同时,它还会向整包中的META-INFO/com/google/android/updater-script文件中写入一些操作命令(极其重要),在recovery模式下系统会根据这些命令并执行相应的操作以完成系统的升级功能。

            </div>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值