Android OTA 升级之一:编译升级包

作者: 宋立新

 

前言

       OTA 升级是 Android 系统提供的标准软件升级方式。 它功能强大,提供了完全升级、增量升级模式,可以通过 SD 卡升级,也可以通过网络升级。

       这里,我们先研究最简单的情况,通过 SD 卡进行完全升级。

       如何执行升级就不多说了,网上有很多资料。(比如,介绍 HTC 手机如何升级)。我们感兴趣的是它是如何实现的,作为开发者,如何修改它以符合我们的定制化需求。

       首先,我们研究一下 ota 升级包的编译过程。

Quick start

       首先编译出 android, 然后执行:

make otapackage

    即可获得: out/target/product/{product_name}/ {product_name} -ota-eng.{uid}.zip

    将该文件改名为 update.zip 放到 T 卡根目录 , 即可开始 recovery 模式下的 OTA 升级。

编译过程研究

 

主要分两步,第一步, 会准备一个包,其中包含升级需要的内容 ( 原材料 ) ,比如, system 目录。

第二步,运行 python 脚本 ./build/tools/releasetools/ota_from_target_files ,以步骤一准备的 ZIP 包作为输入,最终生成需要的升级包。

 

步骤一

编译脚本如下 :

(From: build/core/Makefile)

 

 



  1. 1073 # Depending on the various images guarantees that the underlying  
  2. 1074 # directories are up-to-date.  
  3. 1075 $(BUILT_TARGET_FILES_PACKAGE): /  
  4. 1076                 $(INSTALLED_BOOTIMAGE_TARGET) /  
  5. 1077                 $(INSTALLED_RADIOIMAGE_TARGET) /  
  6. 1078                 $(INSTALLED_RECOVERYIMAGE_TARGET) /  
  7. 1079                 $(INSTALLED_FACTORYIMAGE_TARGET) /  
  8. 1080                 $(INSTALLED_SYSTEMIMAGE) /  
  9. 1081                 $(INSTALLED_USERDATAIMAGE_TARGET) /  
  10. 1082                 $(INSTALLED_SECROIMAGE_TARGET) /  
  11. 1083                 $(INSTALLED_ANDROID_INFO_TXT_TARGET) /  
  12. 1084                 $(built_ota_tools) /  
  13. 1085                 $(APKCERTS_FILE) /  
  14. 1086                 $(HOST_OUT_EXECUTABLES)/fs_config /  
  15. 1087                 | $(ACP)  
  16. 1088         @echo "Package target files: $@"   
  17. 1089         $(hide) rm -rf $@ $(zip_root)  
  18. 1090         $(hide) mkdir -p $(dir $@) $(zip_root)  
  19. 1091         @# Components of the recovery image  
  20. 1092         $(hide) mkdir -p $(zip_root)/RECOVERY  
  21. 1093         $(hide) $(call package_files-copy-root, /  
  22. 1094                 $(TARGET_RECOVERY_ROOT_OUT),$(zip_root)/RECOVERY/RAMDISK)  
  23. 1095 ifdef INSTALLED_KERNEL_TARGET  
  24. 1096         $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET) $(zip_root)/RECOVERY/kernel  
  25. 1097         $(hide) $(ACP) $(recovery_ramdisk) $(zip_root)/RECOVERY/ramdisk  
  26. 1098 endif  
  27. 1099 ifdef INSTALLED_2NDBOOTLOADER_TARGET  
  28. 1100         $(hide) $(ACP) /  
  29. 1101                 $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/RECOVERY/second  
  30. 1102 endif  
  31. 1103 ifdef BOARD_KERNEL_CMDLINE  
  32. 1104         $(hide) echo "$(BOARD_KERNEL_CMDLINE)"  > $(zip_root)/RECOVERY/cmdline  
  33. 1105 endif  
  34. 1106 ifdef BOARD_KERNEL_BASE  
  35. 1107         $(hide) echo "$(BOARD_KERNEL_BASE)"  > $(zip_root)/RECOVERY/ base   
  36. 1108 endif  
  37. 1109         @# Components of the factory image  
  38. 1110         $(hide) mkdir -p $(zip_root)/FACTORY  
  39. 1111         $(hide) $(call package_files-copy-root, /  
  40. 1112                 $(TARGET_FACTORY_ROOT_OUT),$(zip_root)/FACTORY/RAMDISK)  
  41. 1113 ifdef INSTALLED_KERNEL_TARGET  
  42. 1114         $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET) $(zip_root)/FACTORY/kernel  
  43. 1115 endif  
  44. 1116 ifdef INSTALLED_2NDBOOTLOADER_TARGET  
  45. 1117         $(hide) $(ACP) /  
  46. 1118                 $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/FACTORY/second  
  47. 1119 endif  
  48. 1120 ifdef BOARD_KERNEL_CMDLINE  
  49. 1121         $(hide) echo "$(BOARD_KERNEL_CMDLINE)"  > $(zip_root)/FACTORY/cmdline  
  50. 1122 endif  
  51. 1123 ifdef BOARD_KERNEL_BASE  
  52. 1124         $(hide) echo "$(BOARD_KERNEL_BASE)"  > $(zip_root)/FACTORY/ base   
  53. 1125 endif  
  54. 1126         @# Components of the boot image  
  55. 1127         $(hide) mkdir -p $(zip_root)/BOOT  
  56. 1128         $(hide) $(call package_files-copy-root, /  
  57. 1129                 $(TARGET_ROOT_OUT),$(zip_root)/BOOT/RAMDISK)  
  58. 1130 ifdef INSTALLED_KERNEL_TARGET  
  59. 1131         $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET) $(zip_root)/BOOT/kernel  
  60. 1132         $(hide) $(ACP) $(INSTALLED_RAMDISK_TARGET) $(zip_root)/BOOT/ramdisk  
  61. 1133 endif  
  62. 1134 ifdef INSTALLED_2NDBOOTLOADER_TARGET  
  63. 1135         $(hide) $(ACP) /  
  64. 1136                 $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/BOOT/second  
  65. 1137 endif  
  66. 1138 ifdef BOARD_KERNEL_CMDLINE  
  67. 1139         $(hide) echo "$(BOARD_KERNEL_CMDLINE)"  > $(zip_root)/BOOT/cmdline  
  68. 1140 endif  
  69. 1141 ifdef BOARD_KERNEL_BASE  
  70. 1142         $(hide) echo "$(BOARD_KERNEL_BASE)"  > $(zip_root)/BOOT/ base   
  71. 1143 endif  
  72. 1144         $(hide) $(foreach  t,$(INSTALLED_RADIOIMAGE_TARGET),/  
  73. 1145                     mkdir -p $(zip_root)/RADIO; /  
  74. 1146                     $(ACP) $(t) $(zip_root)/RADIO/$(notdir $(t));)  
  75. 1147         @# Contents of the system image  
  76. 1148         $(hide) $(call package_files-copy-root, /  
  77. 1149                 $(SYSTEMIMAGE_SOURCE_DIR),$(zip_root)/SYSTEM)  
  78. 1150         @# Contents of the data image  
  79. 1151         $(hide) $(call package_files-copy-root, /  
  80. 1152                 $(TARGET_OUT_DATA),$(zip_root)/DATA)  
  81. 1153         @# Extra contents of the OTA package  
  82. 1154         $(hide) mkdir -p $(zip_root)/OTA/bin  
  83. 1155         $(hide) $(ACP) $(INSTALLED_ANDROID_INFO_TXT_TARGET) $(zip_root)/OTA/  
  84. 1156         $(hide) $(ACP) $(PRIVATE_OTA_TOOLS) $(zip_root)/OTA/bin/  
  85. 1157         @# Files that do  not end up  in  any images, but are necessary to  
  86. 1158         @# build them.  
  87. 1159         $(hide) mkdir -p $(zip_root)/META  
  88. 1160         $(hide) $(ACP) $(APKCERTS_FILE) $(zip_root)/META/apkcerts.txt  
  89. 1161         $(hide) echo "$(PRODUCT_OTA_PUBLIC_KEYS)"  > $(zip_root)/META/otakeys.txt  
  90. 1162         $(hide) echo "$(PRIVATE_RECOVERY_API_VERSION)"  > $(zip_root)/META/recovery-api-version.txt  
  91. 1163         $(hide) echo "blocksize $(BOARD_FLASH_BLOCK_SIZE)" > $(zip_root)/META/imagesizes.txt  
  92. 1164         $(hide) echo "boot $(call image-size-from-data-size,$(BOARD_BOOTIMAGE_PARTITION_SIZE))"  >> $(zip_root)/META/imagesizes.txt  
  93. 1165         $(hide) echo "recovery $(call image-size-from-data-size,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE))"  >> $(zip_root)/META/imagesizes.txt  
  94. 1166         $(hide) echo "system $(call image-size-from-data-size,$(BOARD_SYSTEMIMAGE_PARTITION_SIZE))"  >> $(zip_root)/META/imagesizes.txt  
  95. 1167         $(hide) echo "secro $(call image-size-from-data-size,$(BOARD_SECROIMAGE_PARTITION_SIZE))"  >> $(zip_root)/META/imagesizes.txt  
  96. 1168         $(hide) echo "userdata $(call image-size-from-data-size,$(BOARD_USERDATAIMAGE_PARTITION_SIZE))"  >> $(zip_root)/META/imagesizes.txt  
  97. 1169         $(hide) echo "$(tool_extensions)"  > $(zip_root)/META/tool-extensions.txt  
  98. 1170         @# Zip everything up, preserving symlinks  
  99. 1171         $(hide) (cd $(zip_root) && zip -qry ../$(notdir $@) .)  
  100. 1172         @# Run fs_config on all the system files in  the zip, and save the output  
  101. 1173         $(hide) zipinfo -1 $@ | awk -F/ 'BEGIN { OFS="/" } /^SYSTEM/// {$$1 = "system"; print}' | $(HOST_OUT_EXECUTABLES)/fs_config > $(zip_root)/META/filesystem_config.txt  
  102. 1174         $(hide) (cd $(zip_root) && zip -q ../$(notdir $@) META/filesystem_config.txt)  



 



  1. 1073  
  2.  # Depending on the various images guarantees that the underlying  
  3. 1074 # directories are up-to-date.  
  4. 1075 $(BUILT_TARGET_FILES_PACKAGE): /  
  5. 1076                 $(INSTALLED_BOOTIMAGE_TARGET) /  
  6. 1077                 $(INSTALLED_RADIOIMAGE_TARGET) /  
  7. 1078                 $(INSTALLED_RECOVERYIMAGE_TARGET) /  
  8. 1079                 $(INSTALLED_FACTORYIMAGE_TARGET) /  
  9. 1080                 $(INSTALLED_SYSTEMIMAGE) /  
  10. 1081                 $(INSTALLED_USERDATAIMAGE_TARGET) /  
  11. 1082                 $(INSTALLED_SECROIMAGE_TARGET) /  
  12. 1083                 $(INSTALLED_ANDROID_INFO_TXT_TARGET) /  
  13. 1084                 $(built_ota_tools) /  
  14. 1085                 $(APKCERTS_FILE) /  
  15. 1086                 $(HOST_OUT_EXECUTABLES)/fs_config /  
  16. 1087                 | $(ACP)  
  17. 1088         @echo "Package target files: $@"  
  18. 1089         $(hide) rm -rf $@ $(zip_root)  
  19. 1090         $(hide) mkdir -p $(dir $@) $(zip_root)  
  20. 1091         @# Components of the recovery image  
  21. 1092         $(hide) mkdir -p $(zip_root)/RECOVERY  
  22. 1093         $(hide) $(call package_files-copy-root, /  
  23. 1094                   
  24. $(TARGET_RECOVERY_ROOT_OUT),$(zip_root)/RECOVERY/RAMDISK)  
  25. 1095 ifdef INSTALLED_KERNEL_TARGET  
  26. 1096         $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET)   
  27. $(zip_root)/RECOVERY/kernel  
  28. 1097         $(hide) $(ACP) $(recovery_ramdisk)   
  29. $(zip_root)/RECOVERY/ramdisk  
  30. 1098 endif  
  31. 1099 ifdef INSTALLED_2NDBOOTLOADER_TARGET  
  32. 1100         $(hide) $(ACP) /  
  33. 1101                 $(INSTALLED_2NDBOOTLOADER_TARGET)   
  34. $(zip_root)/RECOVERY/second  
  35. 1102 endif  
  36. 1103 ifdef BOARD_KERNEL_CMDLINE  
  37. 1104         $(hide) echo "$(BOARD_KERNEL_CMDLINE)" >   
  38. $(zip_root)/RECOVERY/cmdline  
  39. 1105 endif  
  40. 1106 ifdef BOARD_KERNEL_BASE  
  41. 1107         $(hide) echo "$(BOARD_KERNEL_BASE)" >   
  42. $(zip_root)/RECOVERY/base  
  43. 1108 endif  
  44. 1109         @# Components of the factory image  
  45. 1110         $(hide) mkdir -p $(zip_root)/FACTORY  
  46. 1111         $(hide) $(call package_files-copy-root, /  
  47. 1112                   
  48. $(TARGET_FACTORY_ROOT_OUT),$(zip_root)/FACTORY/RAMDISK)  
  49. 1113 ifdef INSTALLED_KERNEL_TARGET  
  50. 1114         $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET)   
  51. $(zip_root)/FACTORY/kernel  
  52. 1115 endif  
  53. 1116 ifdef INSTALLED_2NDBOOTLOADER_TARGET  
  54. 1117         $(hide) $(ACP) /  
  55. 1118                 $(INSTALLED_2NDBOOTLOADER_TARGET)   
  56. $(zip_root)/FACTORY/second  
  57. 1119 endif  
  58. 1120 ifdef BOARD_KERNEL_CMDLINE  
  59. 1121         $(hide) echo "$(BOARD_KERNEL_CMDLINE)" >   
  60. $(zip_root)/FACTORY/cmdline  
  61. 1122 endif  
  62. 1123 ifdef BOARD_KERNEL_BASE  
  63. 1124         $(hide) echo "$(BOARD_KERNEL_BASE)" >   
  64. $(zip_root)/FACTORY/base  
  65. 1125 endif  
  66. 1126         @# Components of the boot image  
  67. 1127         $(hide) mkdir -p $(zip_root)/BOOT  
  68. 1128         $(hide) $(call package_files-copy-root, /  
  69. 1129                 $(TARGET_ROOT_OUT),$(zip_root)/BOOT/RAMDISK)  
  70. 1130 ifdef INSTALLED_KERNEL_TARGET  
  71. 1131         $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET)   
  72. $(zip_root)/BOOT/kernel  
  73. 1132         $(hide) $(ACP) $(INSTALLED_RAMDISK_TARGET)   
  74. $(zip_root)/BOOT/ramdisk  
  75. 1133 endif  
  76. 1134 ifdef INSTALLED_2NDBOOTLOADER_TARGET  
  77. 1135         $(hide) $(ACP) /  
  78. 1136                 $(INSTALLED_2NDBOOTLOADER_TARGET)   
  79. $(zip_root)/BOOT/second  
  80. 1137 endif  
  81. 1138 ifdef BOARD_KERNEL_CMDLINE  
  82. 1139         $(hide) echo "$(BOARD_KERNEL_CMDLINE)" >   
  83. $(zip_root)/BOOT/cmdline  
  84. 1140 endif  
  85. 1141 ifdef BOARD_KERNEL_BASE  
  86. 1142         $(hide) echo "$(BOARD_KERNEL_BASE)" >   
  87. $(zip_root)/BOOT/base  
  88. 1143 endif  
  89. 1144         $(hide) $(foreach t,$(INSTALLED_RADIOIMAGE_TARGET),/  
  90. 1145                     mkdir -p $(zip_root)/RADIO; /  
  91. 1146                     $(ACP) $(t) $(zip_root)/RADIO/$(notdir $(t));)  
  92. 1147         @# Contents of the system image  
  93. 1148         $(hide) $(call package_files-copy-root, /  
  94. 1149                 $(SYSTEMIMAGE_SOURCE_DIR),$(zip_root)/SYSTEM)  
  95. 1150         @# Contents of the data image  
  96. 1151         $(hide) $(call package_files-copy-root, /  
  97. 1152                 $(TARGET_OUT_DATA),$(zip_root)/DATA)  
  98. 1153         @# Extra contents of the OTA package  
  99. 1154         $(hide) mkdir -p $(zip_root)/OTA/bin  
  100. 1155         $(hide) $(ACP) $(INSTALLED_ANDROID_INFO_TXT_TARGET)   
  101. $(zip_root)/OTA/  
  102. 1156         $(hide) $(ACP) $(PRIVATE_OTA_TOOLS) $(zip_root)/OTA/bin/  
  103. 1157         @# Files that do not end up in any images, but are   
  104. necessary to  
  105. 1158         @# build them.  
  106. 1159         $(hide) mkdir -p $(zip_root)/META  
  107. 1160         $(hide) $(ACP) $(APKCERTS_FILE)   
  108. $(zip_root)/META/apkcerts.txt  
  109. 1161         $(hide) echo "$(PRODUCT_OTA_PUBLIC_KEYS)" >   
  110. $(zip_root)/META/otakeys.txt  
  111. 1162         $(hide) echo "$(PRIVATE_RECOVERY_API_VERSION)" >   
  112. $(zip_root)/META/recovery-api-version.txt  
  113. 1163         $(hide) echo "blocksize $(BOARD_FLASH_BLOCK_SIZE)" >   
  114. $(zip_root)/META/imagesizes.txt  
  115. 1164         $(hide) echo "boot $(call   
  116. image-size-from-data-size,$(BOARD_BOOTIMAGE_PARTITION_SIZE))" >>   
  117. $(zip_root)/META/imagesizes.txt  
  118. 1165         $(hide) echo "recovery $(call   
  119. image-size-from-data-size,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE))"   
  120. >> $(zip_root)/META/imagesizes.txt  
  121. 1166         $(hide) echo "system $(call   
  122. image-size-from-data-size,$(BOARD_SYSTEMIMAGE_PARTITION_SIZE))" >>  
  123.  $(zip_root)/META/imagesizes.txt  
  124. 1167         $(hide) echo "secro $(call   
  125. image-size-from-data-size,$(BOARD_SECROIMAGE_PARTITION_SIZE))" >>   
  126. $(zip_root)/META/imagesizes.txt  
  127. 1168         $(hide) echo "userdata $(call   
  128. image-size-from-data-size,$(BOARD_USERDATAIMAGE_PARTITION_SIZE))"   
  129. >> $(zip_root)/META/imagesizes.txt  
  130. 1169         $(hide) echo "$(tool_extensions)" >   
  131. $(zip_root)/META/tool-extensions.txt  
  132. 1170         @# Zip everything up, preserving symlinks  
  133. 1171         $(hide) (cd $(zip_root) && zip -qry ../$(notdir $@)  
  134.  .)  
  135. 1172         @# Run fs_config on all the system files in the zip, and   
  136. save the output  
  137. 1173         $(hide) zipinfo -1 $@ | awk -F/ 'BEGIN { OFS="/" }   
  138. /^SYSTEM/// {$$1 = "system"; print}' | $(HOST_OUT_EXECUTABLES)/fs_config  
  139.  > $(zip_root)/META/filesystem_config.txt  
  140. 1174         $(hide) (cd $(zip_root) && zip -q ../$(notdir $@)   
  141. META/filesystem_config.txt)  



 

 

可见往里面添加了很多内容。

L1089-1090 , 造一个目录。



L1091-1108 ,填充 RECOVERY 子目录的内容。用于生成recovery.img 。包括:kernel 的image, recovery 根文件系统的 image, recovery 根文件系统的内容:



RECOVERY$ tree -L 2



├── kernel



├── ramdisk



└── RAMDISK



    ├── advanced_meta_init.rc



    ├── data



    ├── default.prop



    ├── dev



    ├── etc



    ├── init



    ├── init.factory.rc



    ├── init.goldfish.rc



    ├── init.mt6516.rc



    ├── init.rc



    ├── meta_init.rc



    ├── proc



    ├── res



    ├── sbin



    ├── sys



    ├── system



    └── tmp



L1109-1125, 填充 FACTORY 子目录的内容, 没有用到,包括:kernel 的image



L1126-1143, 填充 BOOT 子目录的内容,用于生成boot.img 。和 RECOVERY 目录类似,包括:kernel 的image, 根文件系统的image, 根文件系统的内容:



BOOT$ tree -L 2



.



├── kernel



├── ramdisk



└── RAMDISK



    ├── advanced_meta_init.rc



    ├── data



    ├── default.prop



    ├── dev



    ├── init



    ├── init.factory.rc



    ├── init.goldfish.rc



    ├── init.mt6516.rc



    ├── init.rc



    ├── meta_init.rc



    ├── proc



    ├── res -> /system/res



    ├── sbin



    ├── sys



    └── system



 



L1144-1146, 填充 RADIO 子目录的内容, 没有用到。



L1147-1149, 填充 SYSTEM 子目录的内容。 这是升级的主要内容。



L1150-1152, 填充 DATA 子目录的内容。缺省没有用到。



L1153-1156, 填充 OTA/bin 子目录的内容, 这是OTA 升级自己使用的程序。后面会遇到。



OTA/bin$ tree



.



├── applypatch



├── applypatch_static



├── check_prereq



└── updater



L1159-1169, 填充 META 子目录的内容, 这里包含了OTA 脚本需要的一些附加信息。



L1170-1171, 将所有内容打包。供下一阶段使用。



L1173-1174, 生成 META/filesystem_config.txt 并将其加入到 zip 包中。该文件保存了 system 目录下各目录、文件的权限及owner.



$ head META/filesystem_config.txt



system 0 0 755



system/usr 0 0 755



system/usr/srec 0 0 755



system/usr/srec/config 0 0 755



system/usr/srec/config/en.us 0 0 755



system/usr/srec/config/en.us/grammars 0 0 755



system/usr/srec/config/en.us/grammars/phone_type_choice.g2g 0 0 644



system/usr/srec/config/en.us/grammars/VoiceDialer.g2g 0 0 644



system/usr/srec/config/en.us/grammars/boolean.g2g 0 0 644



system/usr/srec/config/en.us/g2p 0 0 755



 



这里,目录由 zipinfo –l 提供, 而权限则由 fs_config 设定。此程序的源码位于:build/tools/fs_config, 其中fs_config包含了一个头文件:



 



这个文件(system/core/include/private/android_filesystem_config.h ) 以hardcoding 的方式设定了 system 下各目录、文件的权限、属主。比如:



 


 



如果需要升级其它内容,比如 bootloader, 则可以在这里加入。


 



步骤二

编译脚本如下 :

(From: build/core/Makefile)

 



  1. 1186 name := $(TARGET_PRODUCT)  
  2. 1187 ifeq ($(TARGET_BUILD_TYPE),debug)  
  3. 1188   name := $(name)_debug  
  4. 1189 endif  
  5. 1190 name := $(name)-ota-$(FILE_NAME_TAG)  
  6. 1191   
  7. 1192 INTERNAL_OTA_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip  
  8. 1193   
  9. 1194 $(INTERNAL_OTA_PACKAGE_TARGET): KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)  
  10. 1195   
  11. 1196 ifeq ($(TARGET_OTA_SCRIPT_MODE),)  
  12. 1197 # default  to  "auto"   
  13. 1198 $(INTERNAL_OTA_PACKAGE_TARGET): scriptmode := auto  
  14. 1199 else   
  15. 1200 $(INTERNAL_OTA_PACKAGE_TARGET): scriptmode := $(TARGET_OTA_SCRIPT_MODE)  
  16. 1201 endif  
  17. 1202   
  18. 1203 $(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(OTATOOLS)  
  19. 1204         @echo "Package OTA: $@"   
  20. 1205         $(hide) ./build/tools/releasetools/ota_from_target_files /  
  21. 1206            -m $(scriptmode) /  
  22. 1207            -p $(HOST_OUT) /  
  23. 1208            -k $(KEY_CERT_PAIR) /  
  24. 1209            $(BUILT_TARGET_FILES_PACKAGE) $@  



 



  1. 1186 name := $(TARGET_PRODUCT)  
  2. 1187 ifeq ($(TARGET_BUILD_TYPE),debug)  
  3. 1188   name := $(name)_debug  
  4. 1189 endif  
  5. 1190 name := $(name)-ota-$(FILE_NAME_TAG)  
  6. 1191   
  7. 1192 INTERNAL_OTA_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip  
  8. 1193   
  9. 1194 $(INTERNAL_OTA_PACKAGE_TARGET): KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)  
  10. 1195   
  11. 1196 ifeq ($(TARGET_OTA_SCRIPT_MODE),)  
  12. 1197 # default to "auto"  
  13. 1198 $(INTERNAL_OTA_PACKAGE_TARGET): scriptmode := auto  
  14. 1199 else  
  15. 1200 $(INTERNAL_OTA_PACKAGE_TARGET): scriptmode := $(TARGET_OTA_SCRIPT_MODE)  
  16. 1201 endif  
  17. 1202   
  18. 1203 $(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(OTATOOLS)  
  19. 1204         @echo "Package OTA: $@"  
  20. 1205         $(hide) ./build/tools/releasetools/ota_from_target_files /  
  21. 1206            -m $(scriptmode) /  
  22. 1207            -p $(HOST_OUT) /  
  23. 1208            -k $(KEY_CERT_PAIR) /  
  24. 1209            $(BUILT_TARGET_FILES_PACKAGE) $@  



 

 

核心是一个python 脚本: ota_from_target_files, 它以前一步骤生成的ZIP 包作为输入,生成可用于OTA 升级的zip 包。 具体内容我们后文继续分析。