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


發佈了162 篇原創文章 · 獲贊 145 · 訪問量 81萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章