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中建立