SuperIC社区_
标题: Android系统镜像文件的打包|过程分析(2) [打印本页]
作者: liuwei    时间: 2016-9-28 13:13
标题: Android系统镜像文件的打包|过程分析(2)
注意,ALL_DEFAULT_INSTALLED_MODULES描述的文件除了在build/core/main.mk文件中定义的模块文件之外,还包含以下这些文件:
        1. 通过PRODUCT_COPY_FILES定义的要拷贝到目标设备上去的文件
[plain] view plain copy
 

- unique_product_copy_files_pairs :=  
 - $(foreach cf,$(PRODUCT_COPY_FILES), \  
 -     $(if $(filter $(unique_product_copy_files_pairs),$(cf)),,\  
 -         $(eval unique_product_copy_files_pairs += $(cf))))  
 - unique_product_copy_files_destinati** :=  
 - $(foreach cf,$(unique_product_copy_files_pairs), \  
 -     $(eval _src := $(call word-colon,1,$(cf))) \  
 -     $(eval _dest := $(call word-colon,2,$(cf))) \  
 -     $(call check-product-copy-files,$(cf)) \  
 -     $(if $(filter $(unique_product_copy_files_destinati**),$(_dest)), \  
 -         $(info PRODUCT_COPY_FILES $(cf) ignored.), \  
 -         $(eval _fulldest := $(call append-path,$(PRODUCT_OUT),$(_dest))) \  
 -         $(if $(filter %.xml,$(_dest)),\  
 -             $(eval $(call copy-xml-file-checked,$(_src),$(_fulldest))),\  
 -             $(eval $(call copy-one-file,$(_src),$(_fulldest)))) \  
 -         <span style="color:#FF0000;"><strong>$(eval ALL_DEFAULT_INSTALLED_MODULES += $(_fulldest)) \</strong></span>  
 -         $(eval unique_product_copy_files_destinati** += $(_dest))))  
 
        2.  由ADDITIONAL_DEFAULT_PROPERTIES定义的属性所组成的default.prop文件
[plain] view plain copy
 

- INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_ROOT_OUT)/default.prop  
 - <span style="color:#FF0000;"><strong>ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_DEFAULT_PROP_TARGET)</strong></span>  
 - ADDITIONAL_DEFAULT_PROPERTIES := \  
 -     $(call collapse-pairs, $(ADDITIONAL_DEFAULT_PROPERTIES))  
 - ADDITIONAL_DEFAULT_PROPERTIES += \  
 -     $(call collapse-pairs, $(PRODUCT_DEFAULT_PROPERTY_OVERRIDES))  
 - ADDITIONAL_DEFAULT_PROPERTIES := $(call uniq-pairs-by-first-component, \  
 -     $(ADDITIONAL_DEFAULT_PROPERTIES),=)  
 -   
 - $(INSTALLED_DEFAULT_PROP_TARGET):  
 -     @echo Target buildinfo: $@  
 -     @mkdir -p $(dir $@)  
 -     $(hide) echo "#" > $@; \  
 -             echo "# ADDITIONAL_DEFAULT_PROPERTIES" >> $@; \  
 -             echo "#" >> $@;  
 -     $(hide) $(foreach line,$(ADDITIONAL_DEFAULT_PROPERTIES), \  
 -         echo "$(line)" >> $@;)  
 -     build/tools/post_process_props.py $@  
 
         3. 由ADDITIONAL_BUILD_PROPERTIES等定义的属性所组成的build.prop文件
[plain] view plain copy
 

- INSTALLED_BUILD_PROP_TARGET := $(TARGET_OUT)/build.prop  
 - <span style="color:#FF0000;"><strong>ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_BUILD_PROP_TARGET)</strong></span>  
 - ADDITIONAL_BUILD_PROPERTIES := \  
 -     $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))  
 - ADDITIONAL_BUILD_PROPERTIES := $(call uniq-pairs-by-first-component, \  
 -     $(ADDITIONAL_BUILD_PROPERTIES),=)  
 - ......  
 - BUILDINFO_SH := build/tools/buildinfo.sh  
 - $(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(wildcard $(TARGET_DEVICE_DIR)/system.prop)  
 -     @echo Target buildinfo: $@  
 -     @mkdir -p $(dir $@)  
 -     $(hide) TARGET_BUILD_TYPE="$(TARGET_BUILD_VARIANT)" \  
 -             TARGET_DEVICE="$(TARGET_DEVICE)" \  
 -             PRODUCT_NAME="$(TARGET_PRODUCT)" \  
 -             PRODUCT_BRAND="$(PRODUCT_BRAND)" \  
 -             PRODUCT_DEFAULT_LANGUAGE="$(call default-locale-language,$(PRODUCT_LOCALES))" \  
 -             PRODUCT_DEFAULT_REGION="$(call default-locale-region,$(PRODUCT_LOCALES))" \  
 -             PRODUCT_DEFAULT_WIFI_CHANNELS="$(PRODUCT_DEFAULT_WIFI_CHANNELS)" \  
 -             PRODUCT_MODEL="$(PRODUCT_MODEL)" \  
 -             PRODUCT_MANUFACTURER="$(PRODUCT_MANUFACTURER)" \  
 -             PRIVATE_BUILD_DESC="$(PRIVATE_BUILD_DESC)" \  
 -             BUILD_ID="$(BUILD_ID)" \  
 -             BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \  
 -             BUILD_NUMBER="$(BUILD_NUMBER)" \  
 -             PLATFORM_VERSION="$(PLATFORM_VERSION)" \  
 -             PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \  
 -             PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \  
 -             BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \  
 -             TARGET_BOOTLOADER_BOARD_NAME="$(TARGET_BOOTLOADER_BOARD_NAME)" \  
 -             BUILD_FINGERPRINT="$(BUILD_FINGERPRINT)" \  
 -             TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \  
 -             TARGET_CPU_ABI="$(TARGET_CPU_ABI)" \  
 -             TARGET_CPU_ABI2="$(TARGET_CPU_ABI2)" \  
 -             TARGET_AAPT_CHARACTERISTICS="$(TARGET_AAPT_CHARACTERISTICS)" \  
 -             bash $(BUILDINFO_SH) > $@  
 -     $(hide) if [ -f $(TARGET_DEVICE_DIR)/system.prop ]; then \  
 -               cat $(TARGET_DEVICE_DIR)/system.prop >> $@; \  
 -             fi  
 -     $(if $(ADDITIONAL_BUILD_PROPERTIES), \  
 -         $(hide) echo >> $@; \  
 -                 echo "#" >> $@; \  
 -                 echo "# ADDITIONAL_BUILD_PROPERTIES" >> $@; \  
 -                 echo "#" >> $@; )  
 -     $(hide) $(foreach line,$(ADDITIONAL_BUILD_PROPERTIES), \  
 -         echo "$(line)" >> $@;)  
 -     $(hide) build/tools/post_process_props.py $@  
 
         4. 用来描述event类型日志格式的event-log-tags文件
[plain] view plain copy
 

- all_event_log_tags_file := $(TARGET_OUT_COMMON_INTERMEDIATES)/all-event-log-tags.txt  
 -   
 - event_log_tags_file := $(TARGET_OUT)/etc/event-log-tags  
 -   
 - # Include tags from all packages that we know about  
 - all_event_log_tags_src := \  
 -     $(sort $(foreach m, $(ALL_MODULES), $(ALL_MODULES.$(m).EVENT_LOG_TAGS)))  
 -   
 - # PDK builds will already have a full list of tags that needs to get merged  
 - # in with the ones from source  
 - pdk_fusion_log_tags_file := $(patsubst $(PRODUCT_OUT)/%,$(_pdk_fusion_intermediates)/%,$(filter $(event_log_tags_file),$(ALL_PDK_FUSION_FILES)))  
 -   
 - $(all_event_log_tags_file): PRIVATE_SRC_FILES := $(all_event_log_tags_src) $(pdk_fusion_log_tags_file)  
 -     $(hide) mkdir -p $(dir $@)  
 -     $(hide) build/tools/merge-event-log-tags.py -o $@ $(PRIVATE_SRC_FILES)  
 -   
 - # Include tags from all packages included in this product, plus all  
 - # tags that are part of the system (ie, not in a vendor/ or device/  
 - # directory).  
 - event_log_tags_src := \  
 -     $(sort $(foreach m,\  
 -       $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) \  
 -       $(call module-names-for-tag-list,user), \  
 -       $(ALL_MODULES.$(m).EVENT_LOG_TAGS)) \  
 -       $(filter-out vendor/% device/% out/%,$(all_event_log_tags_src)))  
 -   
 - $(event_log_tags_file): PRIVATE_SRC_FILES := $(event_log_tags_src) $(pdk_fusion_log_tags_file)  
 - $(event_log_tags_file): PRIVATE_MERGED_FILE := $(all_event_log_tags_file)  
 - $(event_log_tags_file): $(event_log_tags_src) $(all_event_log_tags_file) $(pdk_fusion_log_tags_file)  
 -     $(hide) mkdir -p $(dir $@)  
 -     $(hide) build/tools/merge-event-log-tags.py -o $@ -m $(PRIVATE_MERGED_FILE) $(PRIVATE_SRC_FILES)  
 -   
 - event-log-tags: $(event_log_tags_file)  
 -   
 - <strong><span style="color:#FF0000;">ALL_DEFAULT_INSTALLED_MODULES += $(event_log_tags_file)</span></strong>  
 
        关于Android系统的event日志,可以参考Android日志系统驱动程序Logger源代码分析、Android应用程序框架层和系统运行库层日志系统源代码分析和Android日志系统Logcat源代码简要分析这个系列的文章。
        5. 由于使用了BSD、GPL和Apache许可的模块而必须在发布时附带的Notice文件
[plain] view plain copy
 

- target_notice_file_txt := $(TARGET_OUT_INTERMEDIATES)/NOTICE.txt  
 - target_notice_file_html := $(TARGET_OUT_INTERMEDIATES)/NOTICE.html  
 - target_notice_file_html_gz := $(TARGET_OUT_INTERMEDIATES)/NOTICE.html.gz  
 - tools_notice_file_txt := $(HOST_OUT_INTERMEDIATES)/NOTICE.txt  
 - tools_notice_file_html := $(HOST_OUT_INTERMEDIATES)/NOTICE.html  
 -   
 - kernel_notice_file := $(TARGET_OUT_NOTICE_FILES)/src/kernel.txt  
 - pdk_fusion_notice_files := $(filter $(TARGET_OUT_NOTICE_FILES)/%, $(ALL_PDK_FUSION_FILES))  
 - ......  
 - # Install the html file at /system/etc/NOTICE.html.gz.  
 - # This is not ideal, but this is very late in the game, after a lot of  
 - # the module processing has already been done -- in fact, we used the  
 - # fact that all that has been done to get the list of modules that we  
 - # need notice files for.  
 - $(target_notice_file_html_gz): $(target_notice_file_html) | $(MINIGZIP)  
 -     $(hide) $(MINIGZIP) -9 < $< > $@  
 - installed_notice_html_gz := $(TARGET_OUT)/etc/NOTICE.html.gz  
 - $(installed_notice_html_gz): $(target_notice_file_html_gz) | $(ACP)  
 -     $(copy-file-to-target)  
 -   
 - # if we've been run my mm, mmm, etc, don't reinstall this every time  
 - ifeq ($(ONE_SHOT_MAKEFILE),)  
 - <span style="color:#FF0000;"><strong>ALL_DEFAULT_INSTALLED_MODULES += $(installed_notice_html_gz)</strong></span>  
 - endif  
 
        6. 用来验证OTA更新的ZS文件
[plain] view plain copy
 

- <span style="color:#FF0000;"><strong>ALL_DEFAULT_INSTALLED_MODULES += $(TARGET_OUT_ETC)/security/otacerts.zip</strong></span>  
 - $(TARGET_OUT_ETC)/security/otacerts.zip: KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)  
 - $(TARGET_OUT_ETC)/security/otacerts.zip: $(addsuffix .x509.pem,$(DEFAULT_KEY_CERT_PAIR))  
 -     $(hide) rm -f $@  
 -     $(hide) mkdir -p $(dir $@)  
 -     $(hide) zip -qj $@ $<  
 -   
 - .PHONY: otacerts  
 - otacerts: $(TARGET_OUT_ETC)/security/otacerts.zip  
 
       
作者: liuwei    时间: 2016-9-28 14:10





| 欢迎光临 SuperIC社区_ (/) | 
Powered by Discuz! X3.3 |