您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页Android OTA 升级(一): 编译升级包

Android OTA 升级(一): 编译升级包

来源:百家汽车网

1. OTA功能介绍
       OTA 升级是 Android 系统提供的标准软件升级方式。 它功能强大,提供了全量升级和增量升级模式,可以通过SD卡或U盘升级,也可以通过网络升级。这里,我们先研究最简单的情况,通过SD卡进行完全升级。

2. 编译OTA全量升级包
   1) 首先编译出android
   2) make otapackage
       即可获得:out/target/product/{product_name}/ {product_name}-ota-eng.{uid}.zip

3. 编译过程研究

1) 步骤一
编译脚本如下:
(From: build/core/Makefile)
  

1073 # Depending on the various images guarantees that the underlying  
1074 # directories are up-to-date.  
1075 $(BUILT_TARGET_FILES_PACKAGE): /  
1076                 $(INSTALLED_BOOTIMAGE_TARGET) /  
1077                 $(INSTALLED_RADIOIMAGE_TARGET) /  
1078                 $(INSTALLED_RECOVERYIMAGE_TARGET) /  
1079                 $(INSTALLED_FACTORYIMAGE_TARGET) /  
1080                 $(INSTALLED_SYSTEMIMAGE) /  
1081                 $(INSTALLED_USERDATAIMAGE_TARGET) /  
1082                 $(INSTALLED_SECROIMAGE_TARGET) /  
1083                 $(INSTALLED_ANDROID_INFO_TXT_TARGET) /  
1084                 $(built_ota_tools) /  
1085                 $(APKCERTS_FILE) /  
1086                 $(HOST_OUT_EXECUTABLES)/fs_config /  
1087                 | $(ACP)  
1088         @echo "Package target files: $@"  
10         $(hide) rm -rf $@ $(zip_root)  
1090         $(hide) mkdir -p $(dir $@) $(zip_root)  
1091         @# Components of the recovery image  
1092         $(hide) mkdir -p $(zip_root)/RECOVERY  
1093         $(hide) $(call package_files-copy-root, /  
1094                 $(TARGET_RECOVERY_ROOT_OUT),$(zip_root)/RECOVERY/RAMDISK)  
1095 ifdef INSTALLED_KERNEL_TARGET  
1096         $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET) $(zip_root)/RECOVERY/kernel  
1097         $(hide) $(ACP) $(recovery_ramdisk) $(zip_root)/RECOVERY/ramdisk  
1098 endif  
1099 ifdef INSTALLED_2NDBOOTLOADER_TARGET  
1100         $(hide) $(ACP) /  
1101                 $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/RECOVERY/second  
1102 endif  
1103 ifdef BOARD_KERNEL_CMDLINE  
1104         $(hide) echo "$(BOARD_KERNEL_CMDLINE)" > $(zip_root)/RECOVERY/cmdline  
1105 endif  
1106 ifdef BOARD_KERNEL_BASE  
1107         $(hide) echo "$(BOARD_KERNEL_BASE)" > $(zip_root)/RECOVERY/base  
1108 endif  
1109         @# Components of the factory image  
1110         $(hide) mkdir -p $(zip_root)/FACTORY  
1111         $(hide) $(call package_files-copy-root, /  
1112                 $(TARGET_FACTORY_ROOT_OUT),$(zip_root)/FACTORY/RAMDISK)  
1113 ifdef INSTALLED_KERNEL_TARGET  
1114         $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET) $(zip_root)/FACTORY/kernel  
1115 endif  
1116 ifdef INSTALLED_2NDBOOTLOADER_TARGET  
1117         $(hide) $(ACP) /  
1118                 $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/FACTORY/second  
1119 endif  
1120 ifdef BOARD_KERNEL_CMDLINE  
1121         $(hide) echo "$(BOARD_KERNEL_CMDLINE)" > $(zip_root)/FACTORY/cmdline  
1122 endif  
1123 ifdef BOARD_KERNEL_BASE  
1124         $(hide) echo "$(BOARD_KERNEL_BASE)" > $(zip_root)/FACTORY/base  
1125 endif  
1126         @# Components of the boot image  
1127         $(hide) mkdir -p $(zip_root)/BOOT  
1128         $(hide) $(call package_files-copy-root, /  
1129                 $(TARGET_ROOT_OUT),$(zip_root)/BOOT/RAMDISK)  
1130 ifdef INSTALLED_KERNEL_TARGET  
1131         $(hide) $(ACP) $(INSTALLED_KERNEL_TARGET) $(zip_root)/BOOT/kernel  
1132         $(hide) $(ACP) $(INSTALLED_RAMDISK_TARGET) $(zip_root)/BOOT/ramdisk  
1133 endif  
1134 ifdef INSTALLED_2NDBOOTLOADER_TARGET  
1135         $(hide) $(ACP) /  
1136                 $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/BOOT/second  
1137 endif  
1138 ifdef BOARD_KERNEL_CMDLINE  
1139         $(hide) echo "$(BOARD_KERNEL_CMDLINE)" > $(zip_root)/BOOT/cmdline  
1140 endif  
1141 ifdef BOARD_KERNEL_BASE  
1142         $(hide) echo "$(BOARD_KERNEL_BASE)" > $(zip_root)/BOOT/base  
1143 endif  
1144         $(hide) $(foreach t,$(INSTALLED_RADIOIMAGE_TARGET),/  
1145                     mkdir -p $(zip_root)/RADIO; /  
1146                     $(ACP) $(t) $(zip_root)/RADIO/$(notdir $(t));)  
1147         @# Contents of the system image  
1148         $(hide) $(call package_files-copy-root, /  
1149                 $(SYSTEMIMAGE_SOURCE_DIR),$(zip_root)/SYSTEM)  
1150         @# Contents of the data image  
1151         $(hide) $(call package_files-copy-root, /  
1152                 $(TARGET_OUT_DATA),$(zip_root)/DATA)  
1153         @# Extra contents of the OTA package  
1154         $(hide) mkdir -p $(zip_root)/OTA/bin  
1155         $(hide) $(ACP) $(INSTALLED_ANDROID_INFO_TXT_TARGET) $(zip_root)/OTA/  
1156         $(hide) $(ACP) $(PRIVATE_OTA_TOOLS) $(zip_root)/OTA/bin/  
1157         @# Files that do not end up in any images, but are necessary to  
1158         @# build them.  
1159         $(hide) mkdir -p $(zip_root)/META  
1160         $(hide) $(ACP) $(APKCERTS_FILE) $(zip_root)/META/apkcerts.txt  
1161         $(hide) echo "$(PRODUCT_OTA_PUBLIC_KEYS)" > $(zip_root)/META/otakeys.txt  
1162         $(hide) echo "$(PRIVATE_RECOVERY_API_VERSION)" > $(zip_root)/META/recovery-api-version.txt  
1163         $(hide) echo "blocksize $(BOARD_FLASH_BLOCK_SIZE)" > $(zip_root)/META/imagesizes.txt  
11         $(hide) echo "boot $(call image-size-from-data-size,$(BOARD_BOOTIMAGE_PARTITION_SIZE))" >> $(zip_root)/META/imagesizes.txt  
1165         $(hide) echo "recovery $(call image-size-from-data-size,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE))" >> $(zip_root)/META/imagesizes.txt  
1166         $(hide) echo "system $(call image-size-from-data-size,$(BOARD_SYSTEMIMAGE_PARTITION_SIZE))" >> $(zip_root)/META/imagesizes.txt  
1167         $(hide) echo "secro $(call image-size-from-data-size,$(BOARD_SECROIMAGE_PARTITION_SIZE))" >> $(zip_root)/META/imagesizes.txt  
1168         $(hide) echo "userdata $(call image-size-from-data-size,$(BOARD_USERDATAIMAGE_PARTITION_SIZE))" >> $(zip_root)/META/imagesizes.txt  
1169         $(hide) echo "$(tool_extensions)" > $(zip_root)/META/tool-extensions.txt  
1170         @# Zip everything up, preserving symlinks  
1171         $(hide) (cd $(zip_root) && zip -qry ../$(notdir $@) .)  
1172         @# Run fs_config on all the system files in the zip, and save the output  
1173         $(hide) zipinfo -1 $@ | awk -F/ 'BEGIN { OFS="/" } /^SYSTEM/// {$$1 = "system"; print}' | $(HOST_OUT_EXECUTABLES)/fs_config > $(zip_root)/META/filesystem_config.txt  
1174         $(hide) (cd $(zip_root) && zip -q ../$(notdir $@) META/filesystem_config.txt)

(From: build/core/Makefile)

 

1186 name := $(TARGET_PRODUCT)  
1187 ifeq ($(TARGET_BUILD_TYPE),debug)  
1188   name := $(name)_debug  
11 endif  
1190 name := $(name)-ota-$(FILE_NAME_TAG)  
1191   
1192 INTERNAL_OTA_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip  
1193   
1194 $(INTERNAL_OTA_PACKAGE_TARGET): KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)  
1195   
1196 ifeq ($(TARGET_OTA_SCRIPT_MODE),)  
1197 # default to "auto"  
1198 $(INTERNAL_OTA_PACKAGE_TARGET): scriptmode := auto  
1199 else  
1200 $(INTERNAL_OTA_PACKAGE_TARGET): scriptmode := $(TARGET_OTA_SCRIPT_MODE)  
1201 endif  
1202   
1203 $(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(OTATOOLS)  
1204         @echo "Package OTA: $@"  
1205         $(hide) ./build/tools/releasetools/ota_from_target_files /  
1206            -m $(scriptmode) /  
1207            -p $(HOST_OUT) /  
1208            -k $(KEY_CERT_PAIR) /  
1209            $(BUILT_TARGET_FILES_PACKAGE) $@  

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

 

 

 

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务