Android OTA(一)关于make otapackage
来源:互联网 发布:网络大电影营销 编辑:程序博客网 时间:2024/06/05 07:24
make otapackage
顶层Makefile:
build/core/Makefile:1951.PHONY: otapackageotapackage: $(INTERNAL_OTA_PACKAGE_TARGET)
一、 $(INTERNAL_OTA_PACKAGE_TARGET)的定义:INTERNAL_OTA_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip
对于这里的name:
name := $(TARGET_PRODUCT)ifeq ($(TARGET_BUILD_TYPE),debug) name := $(name)_debugendifname := $(name)-ota-$(FILE_NAME_TAG)
1. 对于PRODUCT_OUT:PRODUCT_OUTPRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/productTARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))TARGET_OUT_ROOT_release := $(OUT_DIR)/targetOUT_DIR := $(TOPDIR)out
实际上$(PRODUCT_OUT)是:out/target/product/
2. TARGET_DEVICE:
# 实际上就是$(INTERNAL_PRODUCT)TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)# $(TARGET_PRODUCT))实际上就是$(TARGET_PRODUCT)的“短名字”,假设$(TARGET_PRODUCT)为tardis,那么$(TARGET_DEVICE)就是tardisINTERNAL_PRODUCT := $(call resolve-short-product-name, $(TARGET_PRODUCT))
3. 综上,$(INTERNAL_OTA_PACKAGE_TARGET)值为:out/target/product/tardis/tardis-ota.zip
二、KEY_CERT_PAIR
KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)DEFAULT_KEY_CERT_PAIR := $(DEFAULT_SYSTEM_DEV_CERTIFICATE) # The default key if not set as LOCAL_CERTIFICATEifdef PRODUCT_DEFAULT_DEV_CERTIFICATE DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)else DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkeyendif
可以看到默认的证书为build/target/product/security/testkey三、OTA包的生成命令
$(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE)@echo "Package OTA: $@"$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH MKBOOTIMG=$(MKBOOTIMG) \ ./build/tools/releasetools/ota_from_target_files -v \ --block \ -p $(HOST_OUT) \ -k $(KEY_CERT_PAIR) \ $(if $(OEM_OTA_CONFIG), -o $(OEM_OTA_CONFIG)) \ $(BUILT_TARGET_FILES_PACKAGE) $@
1. PATHPATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH# 把$(INTERNAL_USERIMAGES_BINARY_PATHS)中列出的依赖工具的所有对应的目录都加入到$(PATH)中INTERNAL_USERIMAGES_BINARY_PATHS := $(sort $(dir $(INTERNAL_USERIMAGES_DEPS)))# 相当于取$(INTERNAL_USERIMAGES_DEPS)中的路径的“最小集合”INTERNAL_USERIMAGES_DEPS += $(MKEXTUSERIMG) $(MAKE_EXT4FS) $(E2FSCK)# 对应的三个依赖:MKEXTUSERIMG := $(HOST_OUT_EXECUTABLES)/mkuserimg.shMAKE_EXT4FS := $(HOST_OUT_EXECUTABLES)/make_ext4fs$(HOST_EXECUTABLE_SUFFIX)E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX)
这里可以看出$(INTERNAL_USERIMAGES_BINARY_PATHS)实际上就是:$(HOST_OUT_EXECUTABLES),其定义:HOST_OUT_EXECUTABLES := $(HOST_OUT)/bin
HOST_OUT_EXECUTABLES的依赖关系:HOST_OUT := $(HOST_OUT_$(HOST_BUILD_TYPE))HOST_OUT_release := $(HOST_OUT_ROOT_release)/$(HOST_OS)-$(HOST_PREBUILT_ARCH)HOST_OUT_ROOT_release := $(OUT_DIR)/hostOUT_DIR := $(TOPDIR)outifneq (,$(findstring Linux,$(UNAME))) -> UNAME := $(shell uname -sm) HOST_OS := linuxendifHOST_PREBUILT_ARCH := x86
也就是说$(HOST_OUT)实际上为:out/host-x86/所以$(INTERNAL_USERIMAGES_BINARY_PATHS)为:out/host-x86/bin/, 也就是说$(PATH)为:out/host-x86/bin/:$PATH
2. MKBOOTIMG
$(MKBOOTIMG)的定义为:
MKBOOTIMG := $(HOST_OUT_EXECUTABLES)/mkbootimg$(HOST_EXECUTABLE_SUFFIX)
其中$(HOST_EXECUTABLE_SUFFIX)为空,实际上就是:out/host-x86/bin/mkbootimg3. BUILT_TARGET_FILES_PACKAGE
BUILT_TARGET_FILES_PACKAGE := $(intermediates)/$(name).zip# 中间包路径的确定,这句话的意思是:寻找out/target/product/$(TARGET_PRODUCT)/obj/中PACKAGING类型文件中以target_files开头的目录intermediates := $(call intermediates-dir-for,PACKAGING,target_files)确定中间包名字name := $(TARGET_PRODUCT)ifeq ($(TARGET_BUILD_TYPE),debug) name := $(name)_debugendifname := $(name)-target_files-$(FILE_NAME_TAG) -> FILE_NAME_TAG := $(BUILD_NUMBER) -> eng# 中间包的名字最后会变成:tardis-target_files.zip(假设$(TARGET_PRODUCT)为tardis,$(FILE_NAME_TAG)为空)
4. 命令本身
再回过头看看官网OTA说明:https://source.android.com/devices/tech/ota/tools 所讲的:
./build/tools/releasetools/ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip而对于make otapackage的命令
./build/tools/releasetools/ota_from_target_files -v -p out/host/linux-x86 -k \build/target/product/security/testkey \out/target/product/tardis/obj/PACKAGING/target_files_intermediates/tardis-target_files.zip \out/target/product/tardis/tardis-ota.zip可以看到多了点东西,但是无法改变的事实就是:make otapackage生成的包肯定是完整包
阅读全文
0 0
- Android OTA(一)关于make otapackage
- Android Recovery OTA升级(一)—— make otapackage
- Android+OTA+升级之一:编译升级包---make+otapackage
- make otapackage
- Android 5.x OTA Update官方文档(一,关于OTA 升级)
- 转载:Android 5.x OTA Update官方文档(一,关于OTA 升级)
- make otapackage 流程
- android otapackage compile problem
- RK3288 make otapackage 出错的问题
- OTApackage
- 关于android刷机包OTA包
- Android OTA系统升级---原理一
- Android OTA在线升级一(架构分析)
- Android OTA在线升级一(架构分析)
- Android OTA在线升级一(架构分析)
- Android OTA在线升级一(架构分析)
- Android A/B System OTA分析(一)概览
- Android OTA升级原理和流程分析(一)
- hbase笔记---新版api之对表的操作,指定region创建,普通创建,删除,修改列族信息
- 图像处理中Hough变换笔记
- Redis系列之持久化(三)
- Node.JS错误1:! js里面的$报错
- HDOJ1_a+b
- Android OTA(一)关于make otapackage
- Redis系列之复制(四)
- 个人项目DarkGold项目搭建
- 走出一小步
- [新手题]reverse_factorial(python)
- 怎样解题:写题解思考问题的原则
- AR相机的实现
- OpenCV实现Matlab的circshift、fftshift、ifftshift函数
- Android ORM数据库--ActiveAndroid的使用