Android编译时TARGET_OUT_ROOT/TARGET_OUT变量的由来

TARGET_ROOT_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ROOT)
TARGET_COPY_OUT_ROOT := root

则首先确定 PROUDCT_OUT = $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE);
TARGET_DEVIC是我们check出来的目标设备full_xxx
TARGET_PRODUCT_OUT_ROOT= $(TARGET_OUT_ROOT)/product;
TARGET_OUT_ROOT = $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))
TARGET_BUILD_TYPE = release
则TARGET_OUT_ROOT = $(TARGET_OUT_ROOT_release)
而TARGET_OUT_ROOT_release := $(OUT_DIR)/target
则TARGET_OUT_ROOT = $(OUT_DIR)/target
一般OUT_DIR默认是out目录则可以说吗
TARGET_PRODUCT_OUT_ROOT = out/target/product
最后可以得到
PROUDCT_OUT = out/target/product/xxx/$(TARGET_COPY_OUT_ROOT)

最终可得到最终的TARGET_OUT_ROOT =  out/target/product/xxx/root/
也就是ramdisk文件系统root的所有内容,都放在这里。
一般在Android.mk中制定模块编译时的输出路径为
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)

此外可以发现TARGET_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM) 且一般没有指定LOCAL_MODULE_PATH 时,模块编译输出默认到TARGET_OUT。本质就是out/target/product/xxx/system/所在,也就是打包后的system.img所在,把system镜像所在的块分区在init进程中会被挂载到root/system下面( mount ext4 /dev/block/mmcblk1p16 /system)。root根目录下部分文件链接到system内部,如etc等。

以上核心变量均在build/core/envsetup.mk中建立


你可能感兴趣的:(Android编译时TARGET_OUT_ROOT/TARGET_OUT变量的由来)