2024年C C++最全android P OTA (MTK)初探 —— 2、基于块,洞悉MySQL底层架构

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

	$(INSTALLED_PRODUCTIMAGE_TARGET) \
	$(INSTALLED_VBMETAIMAGE_TARGET) \
	$(INSTALLED_DTBOIMAGE_TARGET) \
	$(INTERNAL_SYSTEMOTHERIMAGE_FILES) \
	$(INSTALLED_ANDROID_INFO_TXT_TARGET) \
	$(INSTALLED_KERNEL_TARGET) \
	$(INSTALLED_2NDBOOTLOADER_TARGET) \
	$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH) \
	$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH) \
	$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PRODUCT_BASE_FS_PATH) \
	$(SELINUX_FC) \
	$(APKCERTS_FILE) \
	$(SOONG_ZIP) \
	$(HOST_OUT_EXECUTABLES)/fs_config \
	$(HOST_OUT_EXECUTABLES)/imgdiff \
	$(HOST_OUT_EXECUTABLES)/bsdiff \
	$(BUILD_IMAGE_SRCS) \
	$(BUILT_VENDOR_MANIFEST) \
	$(BUILT_VENDOR_MATRIX) \
	| $(ACP)
	
@echo "Package target files: $@"
$(call create-system-vendor-symlink)
$(call create-system-product-symlink)
# 删除之前的zip文件
$(hide) rm -rf $@ $@.list $(zip_root)
$(hide) mkdir -p $(dir $@) $(zip_root)

#全局搜索"hide :="的字眼,可以发现config.mk中有:hide := @,
#说明所有的$(hide) xxxx语句,其实就等同于命令前加了“@”字符,即在Makefile中表示的是关闭了回显,说明Makefile在执行@后面的命令时,不回显将要执行的命令

#关于recovery.img
#这里要添加RAMDISK和kernel,还生成了target包中的RECOVERY目录下的base cmdline等文件。
ifneq (, ( I N S T A L L E D R E C O V E R Y I M A G E T A R G E T ) (INSTALLED_RECOVERYIMAGE_TARGET) (INSTALLEDRECOVERYIMAGETARGET)(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)))#因为不是AB系统,所以这里是成立的
@# Components of the recovery image
$(hide) mkdir -p ( z i p r o o t ) / (zip_root)/ (ziproot)/(PRIVATE_RECOVERY_OUT)
$(hide) $(call package_files-copy-root,
( T A R G E T R E C O V E R Y R O O T O U T ) , (TARGET_RECOVERY_ROOT_OUT), (TARGETRECOVERYROOTOUT),(zip_root)/$(PRIVATE_RECOVERY_OUT)/RAMDISK)
ifdef INSTALLED_KERNEL_TARGET
$(hide) cp $(INSTALLED_KERNEL_TARGET) ( z i p r o o t ) / (zip_root)/ (ziproot)/(PRIVATE_RECOVERY_OUT)/kernel
endif
ifdef INSTALLED_2NDBOOTLOADER_TARGET
$(hide) cp $(INSTALLED_2NDBOOTLOADER_TARGET) ( z i p r o o t ) / (zip_root)/ (ziproot)/(PRIVATE_RECOVERY_OUT)/second
endif
ifdef BOARD_INCLUDE_RECOVERY_DTBO
$(hide) cp $(INSTALLED_DTBOIMAGE_TARGET) ( z i p r o o t ) / (zip_root)/ (ziproot)/(PRIVATE_RECOVERY_OUT)/recovery_dtbo
endif
ifdef INTERNAL_KERNEL_CMDLINE
( h i d e ) e c h o " (hide) echo " (hide)echo"(INTERNAL_KERNEL_CMDLINE)" > ( z i p r o o t ) / (zip_root)/ (ziproot)/(PRIVATE_RECOVERY_OUT)/cmdline
endif
ifdef BOARD_KERNEL_BASE
( h i d e ) e c h o " (hide) echo " (hide)echo"(BOARD_KERNEL_BASE)" > ( z i p r o o t ) / (zip_root)/ (ziproot)/(PRIVATE_RECOVERY_OUT)/base
endif
ifdef BOARD_KERNEL_PAGESIZE
( h i d e ) e c h o " (hide) echo " (hide)echo"(BOARD_KERNEL_PAGESIZE)" > ( z i p r o o t ) / (zip_root)/ (ziproot)/(PRIVATE_RECOVERY_OUT)/pagesize
endif
endif # INSTALLED_RECOVERYIMAGE_TARGET defined or BOARD_USES_RECOVERY_AS_BOOT is true

#关于boot.img
@# Components of the boot image
$(hide) mkdir -p ( z i p r o o t ) / B O O T i f e q ( (zip_root)/BOOT ifeq ( (ziproot)/BOOTifeq((BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
$(hide) mkdir -p $(zip_root)/ROOT
$(hide) $(call package_files-copy-root,
( T A R G E T R O O T O U T ) , (TARGET_ROOT_OUT), (TARGETROOTOUT),(zip_root)/ROOT)
else
$(hide) $(call package_files-copy-root,
( T A R G E T R O O T O U T ) , (TARGET_ROOT_OUT), (TARGETROOTOUT),(zip_root)/BOOT/RAMDISK)
endif
@# If we are using recovery as boot, this is already done when processing recovery.
ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
ifdef INSTALLED_KERNEL_TARGET
$(hide) cp $(INSTALLED_KERNEL_TARGET) $(zip_root)/BOOT/kernel
endif
ifdef INSTALLED_2NDBOOTLOADER_TARGET
$(hide) cp $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/BOOT/second
endif
ifdef INTERNAL_KERNEL_CMDLINE
( h i d e ) e c h o " (hide) echo " (hide)echo"(INTERNAL_KERNEL_CMDLINE)" > $(zip_root)/BOOT/cmdline
endif
ifdef BOARD_KERNEL_BASE
( h i d e ) e c h o " (hide) echo " (hide)echo"(BOARD_KERNEL_BASE)" > $(zip_root)/BOOT/base
endif
ifdef BOARD_KERNEL_PAGESIZE
( h i d e ) e c h o " (hide) echo " (hide)echo"(BOARD_KERNEL_PAGESIZE)" > $(zip_root)/BOOT/pagesize
endif
endif # BOARD_USES_RECOVERY_AS_BOOT

#system image
$(hide) ( f o r e a c h t , (foreach t, (foreacht,(INSTALLED_RADIOIMAGE_TARGET),
mkdir -p $(zip_root)/RADIO;
cp $(t) ( z i p r o o t ) / R A D I O / (zip_root)/RADIO/ (ziproot)/RADIO/(notdir $(t))😉
@# Contents of the system image
$(hide) $(call package_files-copy-root,
( S Y S T E M I M A G E S O U R C E D I R ) , (SYSTEMIMAGE_SOURCE_DIR), (SYSTEMIMAGESOURCEDIR),(zip_root)/SYSTEM)
@# Contents of the data image
$(hide) $(call package_files-copy-root,
( T A R G E T O U T D A T A ) , (TARGET_OUT_DATA), (TARGETOUTDATA),(zip_root)/DATA)

#vendor image
ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
@# Contents of the vendor image
$(hide) $(call package_files-copy-root,
( T A R G E T O U T V E N D O R ) , (TARGET_OUT_VENDOR), (TARGETOUTVENDOR),(zip_root)/VENDOR)
endif
ifdef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
@# Contents of the product image
$(hide) $(call package_files-copy-root,
( T A R G E T O U T P R O D U C T ) , (TARGET_OUT_PRODUCT), (TARGETOUTPRODUCT),(zip_root)/PRODUCT)
endif
ifdef INSTALLED_SYSTEMOTHERIMAGE_TARGET
@# Contents of the system_other image
$(hide) $(call package_files-copy-root,
( T A R G E T O U T S Y S T E M O T H E R ) , (TARGET_OUT_SYSTEM_OTHER), (TARGETOUTSYSTEMOTHER),(zip_root)/SYSTEM_OTHER)
endif
#上面这几个基本Image的处理,一般都不需要修改。至于其中的细节,等深入研究的时候再补充。哈哈!坑(1)

#Extra contents of the OTA package,这是target包里面的OTA这个目录相关的。应该说,很重要!!!
@# Extra contents of the OTA package
$(hide) mkdir -p $(zip_root)/OTA
$(hide) cp $(INSTALLED_ANDROID_INFO_TXT_TARGET) $(zip_root)/OTA/

#这个ota tool,就是OTA/bin/目录下的那个updater文件,最终被添加到升级包中并更名为updater-binary,看到这个名字应该已经清楚了吧,它就是用来在recovery中升级操作时解析升级脚本,真正执行升级时的数据处理工作的。
ifneq ( ( A B O T A U P D A T E R ) , t r u e ) i f n e q ( (AB_OTA_UPDATER),true) ifneq ( (ABOTAUPDATER),true)ifneq((built_ota_tools),)
$(hide) mkdir -p $(zip_root)/OTA/bin
$(hide) cp $(PRIVATE_OTA_TOOLS) $(zip_root)/OTA/bin/
endif
endif

#target包里面META目录下的,releasetools.py 也被拷贝到这里
@# Files that do not end up in any images, but are necessary to
@# build them.
$(hide) mkdir -p $(zip_root)/META
$(hide) cp $(APKCERTS_FILE) ( z i p r o o t ) / M E T A / a p k c e r t s . t x t i f n e q ( (zip_root)/META/apkcerts.txt ifneq ( (ziproot)/META/apkcerts.txtifneq((tool_extension),)
$(hide) cp $(PRIVATE_TOOL_EXTENSION) $(zip_root)/META/
endif
( h i d e ) e c h o " (hide) echo " (hide)echo"(PRODUCT_OTA_PUBLIC_KEYS)" > $(zip_root)/META/otakeys.txt
$(hide) cp $(SELINUX_FC) $(zip_root)/META/file_contexts.bin

#收集各种配置信息
#这个misc_info文件很重要。里面记录了各种属性键值对,包括项目配置、系统属性等等。在后面生成升级包的时候会读取出来使用。
$(hide) echo "recovery_api_version=$(PRIVATE_RECOVERY_API_VERSION)" > $(zip_root)/META/misc_info.txt
$(hide) echo "fstab_version=$(PRIVATE_RECOVERY_FSTAB_VERSION)" >> $(zip_root)/META/misc_info.txt

ifdef BOARD_FLASH_BLOCK_SIZE
( h i d e ) e c h o " b l o c k s i z e = (hide) echo "blocksize= (hide)echo"blocksize=(BOARD_FLASH_BLOCK_SIZE)" >> $(zip_root)/META/misc_info.txt
endif
ifdef BOARD_BOOTIMAGE_PARTITION_SIZE
( h i d e ) e c h o " b o o t s i z e = (hide) echo "boot_size= (hide)echo"bootsize=(BOARD_BOOTIMAGE_PARTITION_SIZE)" >> ( 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 e q ( (zip_root)/META/misc_info.txt endif ifeq ( (ziproot)/META/miscinfo.txtendififeq((INSTALLED_RECOVERYIMAGE_TARGET),)
$(hide) echo “no_recovery=true” >> $(zip_root)/META/misc_info.txt
endif
ifdef BOARD_INCLUDE_RECOVERY_DTBO
$(hide) echo “include_recovery_dtbo=true” >> $(zip_root)/META/misc_info.txt
endif
ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE
( h i d e ) e c h o " r e c o v e r y s i z e = (hide) echo "recovery_size= (hide)echo"recoverysize=(BOARD_RECOVERYIMAGE_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt
endif
ifdef TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS
@# TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS can be empty to indicate that nothing but defaults should be used.
( h i d e ) e c h o " r e c o v e r y m o u n t o p t i o n s = (hide) echo "recovery_mount_options= (hide)echo"recoverymountoptions=(TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS)" >> $(zip_root)/META/misc_info.txt
else
( h i d e ) e c h o " r e c o v e r y m o u n t o p t i o n s = (hide) echo "recovery_mount_options= (hide)echo"recoverymountoptions=(DEFAULT_TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS)" >> $(zip_root)/META/misc_info.txt
endif
( h i d e ) e c h o " t o o l e x t e n s i o n s = (hide) echo "tool_extensions= (hide)echo"toolextensions=(PRIVATE_TOOL_EXTENSIONS)" >> $(zip_root)/META/misc_info.txt
( 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 = (hide) echo "default_system_dev_certificate= (hide)echo"defaultsystemdevcertificate=(DEFAULT_SYSTEM_DEV_CERTIFICATE)" >> $(zip_root)/META/misc_info.txt
ifdef PRODUCT_EXTRA_RECOVERY_KEYS
( h i d e ) e c h o " e x t r a r e c o v e r y k e y s = (hide) echo "extra_recovery_keys= (hide)echo"extrarecoverykeys=(PRODUCT_EXTRA_RECOVERY_KEYS)" >> $(zip_root)/META/misc_info.txt
endif
( h i d e ) e c h o ′ m k b o o t i m g a r g s = (hide) echo 'mkbootimg_args= (hide)echomkbootimgargs=(BOARD_MKBOOTIMG_ARGS)’ >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o ′ m k b o o t i m g v e r s i o n a r g s = (hide) echo 'mkbootimg_version_args= (hide)echomkbootimgversionargs=(INTERNAL_MKBOOTIMG_VERSION_ARGS)’ >> $(zip_root)/META/misc_info.txt
$(hide) echo “multistage_support=1” >> $(zip_root)/META/misc_info.txt
$(hide) echo “blockimgdiff_versions=3,4” >> ( z i p r o o t ) / M E T A / m i s c i n f o . t x t i f n e q ( (zip_root)/META/misc_info.txt ifneq ( (ziproot)/META/miscinfo.txtifneq((OEM_THUMBPRINT_PROPERTIES),)
# OTA scripts are only interested in fingerprint related properties
( h i d e ) e c h o " o e m f i n g e r p r i n t p r o p e r t i e s = (hide) echo "oem_fingerprint_properties= (hide)echo"oemfingerprintproperties=(OEM_THUMBPRINT_PROPERTIES)" >> ( 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 n e q ( (zip_root)/META/misc_info.txt endif ifneq ( (ziproot)/META/miscinfo.txtendififneq((PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH),)
$(hide) cp ( P R O D U C T S . (PRODUCTS. (PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH)
( z i p r o o t ) / M E T A / (zip_root)/META/ (ziproot)/META/(notdir ( P R O D U C T S . (PRODUCTS. (PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH))
endif
ifneq ( ( P R O D U C T S . (PRODUCTS. (PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH),)
$(hide) cp ( P R O D U C T S . (PRODUCTS. (PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH)
( z i p r o o t ) / M E T A / (zip_root)/META/ (ziproot)/META/(notdir ( P R O D U C T S . (PRODUCTS. (PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH))
endif
ifneq ( ( P R O D U C T S . (PRODUCTS. (PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_PRODUCT_BASE_FS_PATH),)
$(hide) cp ( P R O D U C T S . (PRODUCTS. (PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_PRODUCT_BASE_FS_PATH)
( z i p r o o t ) / M E T A / (zip_root)/META/ (ziproot)/META/(notdir ( P R O D U C T S . (PRODUCTS. (PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_PRODUCT_BASE_FS_PATH))
endif
ifneq ($(strip $(SANITIZE_TARGET)),)
# We need to create userdata.img with real data because the instrumented libraries are in userdata.img.
$(hide) echo “userdata_img_with_data=true” >> ( 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 e q ( (zip_root)/META/misc_info.txt endif ifeq ( (ziproot)/META/miscinfo.txtendififeq((BOARD_USES_FULL_RECOVERY_IMAGE),true)
$(hide) echo “full_recovery_image=true” >> ( 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 e q ( (zip_root)/META/misc_info.txt endif ifeq ( (ziproot)/META/miscinfo.txtendififeq((BOARD_AVB_ENABLE),true)
$(hide) echo “avb_enable=true” >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o " a v b v b m e t a k e y p a t h = (hide) echo "avb_vbmeta_key_path= (hide)echo"avbvbmetakeypath=(BOARD_AVB_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o " a v b v b m e t a a l g o r i t h m = (hide) echo "avb_vbmeta_algorithm= (hide)echo"avbvbmetaalgorithm=(BOARD_AVB_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o " a v b v b m e t a a r g s = (hide) echo "avb_vbmeta_args= (hide)echo"avbvbmetaargs=(BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS)" >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o " a v b b o o t a d d h a s h f o o t e r a r g s = (hide) echo "avb_boot_add_hash_footer_args= (hide)echo"avbbootaddhashfooterargs=(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)" >> $(zip_root)/META/misc_info.txt
ifdef BOARD_AVB_BOOT_KEY_PATH
( h i d e ) e c h o " a v b b o o t k e y p a t h = (hide) echo "avb_boot_key_path= (hide)echo"avbbootkeypath=(BOARD_AVB_BOOT_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o " a v b b o o t a l g o r i t h m = (hide) echo "avb_boot_algorithm= (hide)echo"avbbootalgorithm=(BOARD_AVB_BOOT_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o " a v b b o o t r o l l b a c k i n d e x l o c a t i o n = (hide) echo "avb_boot_rollback_index_location= (hide)echo"avbbootrollbackindexlocation=(BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION)" >> $(zip_root)/META/misc_info.txt
endif # BOARD_AVB_BOOT_KEY_PATH
( h i d e ) e c h o " a v b r e c o v e r y a d d h a s h f o o t e r a r g s = (hide) echo "avb_recovery_add_hash_footer_args= (hide)echo"avbrecoveryaddhashfooterargs=(BOARD_AVB_RECOVERY_ADD_HASH_FOOTER_ARGS)" >> $(zip_root)/META/misc_info.txt
ifdef BOARD_AVB_RECOVERY_KEY_PATH
( h i d e ) e c h o " a v b r e c o v e r y k e y p a t h = (hide) echo "avb_recovery_key_path= (hide)echo"avbrecoverykeypath=(BOARD_AVB_RECOVERY_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o " a v b r e c o v e r y a l g o r i t h m = (hide) echo "avb_recovery_algorithm= (hide)echo"avbrecoveryalgorithm=(BOARD_AVB_RECOVERY_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o " a v b r e c o v e r y r o l l b a c k i n d e x l o c a t i o n = (hide) echo "avb_recovery_rollback_index_location= (hide)echo"avbrecoveryrollbackindexlocation=(BOARD_AVB_RECOVERY_ROLLBACK_INDEX_LOCATION)" >> $(zip_root)/META/misc_info.txt
endif # BOARD_AVB_RECOVERY_KEY_PATH
ifeq (yes, $(strip $(MAIN_VBMETA_IN_BOOT)))
$(hide) echo “avb_main_vbmeta_in_boot=true” >> $(zip_root)/META/misc_info.txt
endif # MAIN_VBMETA_IN_BOOT
endif # BOARD_AVB_ENABLE
ifdef BOARD_BPT_INPUT_FILES
$(hide) echo “board_bpt_enable=true” >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o " b o a r d b p t m a k e t a b l e a r g s = (hide) echo "board_bpt_make_table_args= (hide)echo"boardbptmaketableargs=(BOARD_BPT_MAKE_TABLE_ARGS)" >> $(zip_root)/META/misc_info.txt
( h i d e ) e c h o " b o a r d b p t i n p u t f i l e s = (hide) echo "board_bpt_input_files= (hide)echo"boardbptinputfiles=(BOARD_BPT_INPUT_FILES)" >> $(zip_root)/META/misc_info.txt
endif
ifdef BOARD_BPT_DISK_SIZE
( h i d e ) e c h o " b o a r d b p t d i s k s i z e = (hide) echo "board_bpt_disk_size= (hide)echo"boardbptdisksize=(BOARD_BPT_DISK_SIZE)" >> $(zip_root)/META/misc_info.txt
endif
$(call generate-userimage-prop-dictionary, $(zip_root)/META/misc_info.txt)

#这里是其它一些img的处理

#这里决定了是否更新lk logo 等等

##这里的这个ota_update_list.txt是根据项目的scatter文件(刷机工具使用的那个文件)生成的,做升级包的时候会读取里面的信息,所以它决定了后面会额外添加哪些img到升级包当中,也就是说scatter文件中的is_upgradable就基本决定了对应的分区是否会更新。
#mt_ota_preprocess.py在alps\vendor\mediatek\proprietary\scripts\releasetools\mt_ota_preprocess.py
#mt_ota_preprocess.py这个文件虽然重要,但里面的内容比较简单,就不列出来了。
#PRODUCT_OUT就是编译生成的out目录

@# sign image used to get boot and recovery sig files
$(hide) $(SHELL) $(SECURITY_SIG_TOOL)
@# Copy raw images which need OTA updates from out folder to zip_root/IMAGES folder
#这几个属性在后面的mt_ota_preprocess.py脚本中有用到
$(hide) BOARD_AVB_ENABLE="$(BOARD_AVB_ENABLE)" AB_OTA_UPDATER="$(AB_OTA_UPDATER)" AB_OTA_PARTITIONS="$(AB_OTA_PARTITIONS)" $(TARGET_RELEASETOOLS_EXTENSIONS)/mt_ota_preprocess.py $(zip_root) $(PRODUCT_OUT) $(PRODUCT_OUT)/ota_update_list.txt

ifneq ($(INSTALLED_RECOVERYIMAGE_TARGET),)
( h i d e ) P A T H = (hide) PATH= (hide)PATH=(foreach p, ( I N T E R N A L U S E R I M A G E S B I N A R Y P A T H S ) , (INTERNAL_USERIMAGES_BINARY_PATHS), (INTERNALUSERIMAGESBINARYPATHS),§:)$ P A T H M K B O O T I M G = PATH MKBOOTIMG= PATHMKBOOTIMG=(MKBOOTIMG)
build/make/tools/releasetools/make_recovery_patch $(zip_root) $(zip_root)
endif

#剩下的部分涉及到vbmeta.img 、 和AVB()相关的DTBOIMAGE、还有 radio images 等。这些都不了解,也就先不分析了。 坑(3)
#。。。。。。(省略部分代码)

打包zip包

@# Zip everything up, preserving symlinks and placing META/ files first to
@# help early validation of the .zip file while uploading it.
$(hide) find $(zip_root)/META | sort >$@.list
$(hide) find $(zip_root) -path $(zip_root)/META -prune -o -print | sort >>$@.list
$(hide) $(SOONG_ZIP) -d -o $@ -C $(zip_root) -l $@.list
$(hide) $(TARGET_RELEASETOOLS_EXTENSIONS)/replace_img_from_target_files.py $@ $(PRODUCT_OUT)
@# If SECURITY_IMAGE_PATH doesn't exist , security version is 1.1 and images need to sign again

ifeq (“$(wildcard $(SECURITY_IMAGE_PATH))”,“”)
$(hide) $(SHELL) $(SECURITY_SIG_TOOL)
endif

#没错,就是这个目标,直接生成Target包。
.PHONY: target-files-package
target-files-package: $(BUILT_TARGET_FILES_PACKAGE)

ifneq ($(filter $(MAKECMDGOALS),target-files-package),)
$(call dist-for-goals, target-files-package, $(BUILT_TARGET_FILES_PACKAGE))
endif
#完成ota target包的制作
######################################################################################################################


make otapackage其实也在这里,依赖 target包 和 ota\_from\_target\_files 这个脚本。



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

OTA update package

name := ( T A R G E T P R O D U C T ) i f e q ( (TARGET_PRODUCT) ifeq ( (TARGETPRODUCT)ifeq((TARGET_BUILD_TYPE),debug)
name := $(name)_debug
endif
name := ( n a m e ) − o t a − (name)-ota- (name)ota(FILE_NAME_TAG)

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

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

ifeq ($(AB_OTA_UPDATER),true)
$(INTERNAL_OTA_PACKAGE_TARGET): $(BRILLO_UPDATE_PAYLOAD)
else
#BROTLI is out/host/linux-x86/bin/brotli
$(INTERNAL_OTA_PACKAGE_TARGET): $(BROTLI)
endif

#lyc
#这里就是make otapackage这个目标啦,用来构建整包。

这其中 $@ 就是最终要生成的升级包的名称。

$(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE)
build/make/tools/releasetools/ota_from_target_files
@echo “Package OTA: $@”

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

TA: $@"

[外链图片转存中…(img-BOuQjgCf-1715521964306)]
[外链图片转存中…(img-3z8nJ9YK-1715521964307)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值