二、命令解析

1.extract-bsp()-->

    cp $LINUXOUT_DIR/bImage kernel

    cp -rf $LINUXOUT_MODULE_DIR modules/modules

 

2.lunch()-->

    print_lunch_menu()-->

    //解析用户输入(数字索引),确定用户选择的产品类型,编译类型等

    export TARGET_PRODUCT=$product \      #uranus_nansu,aosp_dragon,...

    export TARGET_BUILD_VARIANT=$variant  #eng user userdebug

    export TARGET_BUILD_TYPE=release

    cd $T; CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \

      command make --no-print-directory -f build/core/config.mk dumpvar-report_config

3.build/core/config.mk-->

    include $(BUILD_SYSTEM)/pathmap.mk

    CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk

    XXXXXXXXXX:= $(BUILD_SYSTEM)/yyyyyyyyyy.mk

    include $(BUILD_SYSTEM)/envsetup.mk-->

        include $(BUILD_SYSTEM)/product_config.mk-->

            include $(BUILD_SYSTEM)/product.mk   #all product-ralated function definetion

            include $(BUILD_SYSTEM)/device.mk    #all device-ralated function definetion

            all_product_configs := $(get-all-product-makefiles)   # Read in all of the product definitions specified by the AndroidProducts.mk files in the tree.

            all_product_makefiles :=$(FUNC all_product_configs)        # 通过$all_product_configs获得$all_product_makefiles

            # 通过$all_product_configs以及$TARGET_PRODUCT获得$current_product_makefile,如device\softwinner\uranus-nansu\uranus_nansu.mk

            current_product_makefile := $(filter all_product_configs, TARGET_PRODUCT) # 通过$all_product_configs以及$TARGET_PRODUCT获得$current_product_makefile

            (call import-products, $(current_product_makefile))   #check to make sure that products have all the necessary vars defined, SET PRODUCTS

                PRODUCTS := device/softwinner/uranus-nansu/uranus_nansu.mk

            TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE) #uranus-nansu

       

        board_config_mk := (TARGET_DEVICE)/BoardConfig.mk  #device\softwinner\uranus-nansu\BoardConfig.mk

        include $(board_config_mk)

        TARGET_DEVICE_DIR :=$(patsubst %/,%,$(dir $(board_config_mk)))  #device\softwinner\uranus-nansu\

        TARGET_xxx := yyyyyy

        /*至此,所有的环节变量(全局)都已经赋值和确定*/

    include $(BUILD_SYSTEM)/dumpvar.mk   #打印输出部分全局变量值

 

4.make()-->前面所有过程都只是配置产品,设置环境变量,真正编译过程在这里正式开始。

    DEFAULT_GOAL := droid   # This is the default target.  It must be the first declared target.

        droid: droid_targets-->

            droid_targets: apps_only              #TARGET_BUILD_APPS = y

            droid_targets: droidcore dist_files   #TARGET_BUILD_APPS = y

 

    .PHONY: droidcore

    droidcore: files \                  #prebuilt,$(modules_to_install),$(INSTALLED_ANDROID_INFO_TXT_TARGET),真正内容最多的是:modules_to_install变量,其包含了当前配置下所有会被安装的模块(一个模块是否会被安装依赖于该产品的配置文件,模块的标签等信息)

    systemimage \                       #$(PRODUCT_OUT)/system.img

    $(INSTALLED_BOOTIMAGE_TARGET) \     #$(PRODUCT_OUT)/boot.img

    $(INSTALLED_RECOVERYIMAGE_TARGET) \ #$(PRODUCT_OUT)/recovery.img

    $(INSTALLED_USERDATAIMAGE_TARGET) \ #$(PRODUCT_OUT)/userdata.img

    $(INSTALLED_CACHEIMAGE_TARGET) \    #$(PRODUCT_OUT)/cache.img

    $(INSTALLED_VENDORIMAGE_TARGET) \   #$(PRODUCT_OUT)/vendor.img

    $(INSTALLED_SYSTEMOTHERIMAGE_TARGET) \ #$(PRODUCT_OUT)/system_other.img

    $(INSTALLED_FILES_FILE) \           #$(PRODUCT_OUT)/installed-files.txt,编译完成后会将安装的文件列表更新到盖文件,提供过查看该文件,可以确定某次优化/增加的模块是否已经移除/加入

    $(INSTALLED_FILES_FILE_VENDOR) \    #$(PRODUCT_OUT)/installed-files-vendor.txt

    $(INSTALLED_FILES_FILE_SYSTEMOTHER) #$(PRODUCT_OUT)/installed-files-system-other.txt

   

    $(call dist-for-goals, droidcore, \

    $(INTERNAL_UPDATE_PACKAGE_TARGET) \  #$(PRODUCT_OUT)/$(TARGET_PRODUCT)-img-$(FILE_NAME_TAG) //uranus_nansu-img-20191128.zip

    $(INTERNAL_OTA_PACKAGE_TARGET) \     #$(PRODUCT_OUT)/$(TARGET_PRODUCT)-ota-$(FILE_NAME_TAG) //uranus_nansu-ota-20191128.zip

    $(BUILT_OTATOOLS_PACKAGE) \          #$(PRODUCT_OUT)/otatools.zip

    $(SYMBOLS_ZIP) \                     #$(PRODUCT_OUT)/$(TARGET_PRODUCT)-symbols-$(FILE_NAME_TAG) //uranus_nansu-symbols-20191128.zip

    $(INSTALLED_FILES_FILE) \            #$(PRODUCT_OUT)/installed-files.txt

    $(INSTALLED_FILES_FILE_VENDOR) \     #$(PRODUCT_OUT)/installed-files-vendor.txt

    $(INSTALLED_FILES_FILE_SYSTEMOTHER) \#$(PRODUCT_OUT)/installed-files-system-other.txt

    $(INSTALLED_BUILD_PROP_TARGET) \     #$(TARGET_OUT)/build.prop

    $(BUILT_TARGET_FILES_PACKAGE) \      #$(intermediates)/$(TARGET_PRODUCT)-target_files-$(FILE_NAME_TAG) //uranus_nansu-target_files-20191128.zip

    $(INSTALLED_ANDROID_INFO_TXT_TARGET) \#$(PRODUCT_OUT)/android-info.txt

    $(INSTALLED_RAMDISK_TARGET) \        #$(PRODUCT_OUT)/ramdisk.img

   )

  

   ifneq ($(ANDROID_BUILD_EMBEDDED),true)

   ifneq ($(TARGET_BUILD_PDK),true)

    $(call dist-for-goals, droidcore, \

      $(APPS_ZIP) \                      #$(PRODUCT_OUT)/$(TARGET_PRODUCT)-apps-$(FILE_NAME_TAG) //uranus_nansu-apps-20191128.zip

      #会将system/app,system/priv/app/目录中*.apk全部打包到zip文件中;

    )

   endif

   注意:dist-for-goals()只有在$(filter dist,$(MAKECMDGOALS))返回真时才会有定义,即执行的make含有dist参数才会存在定义(make dist).

   换而言之,droidcore后面依赖的这些文件/模块只有在编译发布时才会添加进来。主要是将这些依赖文件按指定格式(比如zip)拷贝至:out/dir/目录。

  

    .PHONY: dist_files

    ifeq ($(EMMA_INSTRUMENT),true)      #只有($(EMMA_INSTRUMENT)为true,以及make dist时,才会赋值dist_files

    $(EMMA_META_ZIP) : $(INSTALLED_SYSTEMIMAGE)

    $(call dist-for-goals, dist_files, $(EMMA_META_ZIP))

    endif

   

    $(PRODUCTS)=device/softwinner/uranus-nansu/uranus_nansu.mk-->

    $(call inherit-product, device/softwinner/uranus-common/uranus_64_bit.mk)

        TARGET_ARCH:=

        TARGET_2ND_ARCH:=

    $(call inherit-product, build/target/product/full_base.mk)

        # Get some sounds

        $(call inherit-product-if-exists, frameworks/base/data/sounds/AllAudio.mk)

        # Get the TTS language packs

        $(call inherit-product-if-exists, external/svox/pico/lang/all_pico_languages.mk)

        # Get a list of languages.

        $(call inherit-product, $(SRC_TARGET_DIR)/product/locales_full.mk)

        # Get everything else from the parent package

        $(call inherit-product, $(SRC_TARGET_DIR)/product/generic_no_telephony.mk)

            $(call inherit-product-if-exists, frameworks/base/data/fonts/fonts.mk)

            $(call inherit-product-if-exists, external/hyphenation-patterns/patterns.mk)

            $(call inherit-product-if-exists, frameworks/base/data/keyboards/keyboards.mk)

            $(call inherit-product-if-exists, frameworks/webview/chromium/chromium.mk)

            $(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk)-->

                $(call inherit-product, $(SRC_TARGET_DIR)/product/core_base.mk)-->

                    $(call inherit-product, $(SRC_TARGET_DIR)/product/core_minimal.mk)-->

                        $(call inherit-product, $(SRC_TARGET_DIR)/product/runtime_libart.mk) #Provides a functioning ART environment without Android frameworks

                        $(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk)-->

                            $(call inherit-product, $(SRC_TARGET_DIR)/product/embedded.mk) # This is a build configuration for a very minimal build of the Open-Source part of the tree.

    $(call inherit-product, device/softwinner/uranus-common/uranus-common.mk)-->

        $(call inherit-product, device/softwinner/common/common.mk)-->

            $(call inherit-product, vendor/aw/public/prebuild/bin/tools/tools.mk)

            $(call inherit-product, vendor/aw/public/package/display/display.mk)

    $(call inherit-product-if-exists, device/softwinner/uranus-t1/modules/modules.mk)

   

   

5.常见make命令

    /*其他常用的make 目标*/

    make clean  执行清理,等同于:rm -rf out/。

    make sdk    编译出 Android 的 SDK。

    make clean-sdk  清理 SDK 的编译产物。

    make update-api 更新 API。在 framework API 改动之后,需要首先执行该命令来更新 API,公开的 API 记录在 frameworks/base/api 目录下。

    make dist   执行 Build,并将 MAKECMDGOALS 变量定义的输出文件拷贝到 /out/dist 目录。

    make all    编译所有内容,不管当前产品的定义中是否会包含。

    make help   帮助信息,显示主要的 make 目标。

    make snod   从已经编译出的包快速重建系统镜像。

    make libandroid_runtime 编译所有 JNI framework 内容。

    make framework  编译所有 Java framework 内容。

    make services   编译系统服务和相关内容。

    make <local_target> 编译一个指定的模块,local_target 为模块的名称。

    make clean-<local_target>   清理一个指定模块的编译结果。

    make dump-products  显示所有产品的编译配置信息,例如:产品名,产品支持的地区语言,产品中会包含的模块等信息。

    make PRODUCT-xxx-yyy    编译某个指定的产品。

    make bootimage  生成 boot.img

    make recoveryimage  生成 recovery.img

    make userdataimage  生成 userdata.img

    make cacheimage 生成 cache.img

   

posted on 2020-07-23 16:26  arduino  阅读(725)  评论(0编辑  收藏  举报

导航