Moving GSI-specific files to system_ext
Only common files can reside in system partition, other files
should be moved to the newly added system_ext partition.
Note that for GSI, it will be a single system.img that includes the
contents of product and system_ext partitions, under /system/product
and /system/system_ext, respectively. After moving skip_mount.cfg to
system_ext partition, it also needs a symlink file under system
partition:
/system/etc/init/config -> /system/system_ext/etc/init/config
This allows Q-launched first-stage init (in /boot partition) continue
to use the same path when new GSI image is used.
Bug: 138281441
Test: build aosp_arm64-userdebug and boot it on crosshatch
Change-Id: Ida7c2d1b0152c7ef77fa9aeb5d0766d17aec59c5
diff --git a/CleanSpec.mk b/CleanSpec.mk
index a84e793..7ce4ed7 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -655,6 +655,10 @@
$(call add-clean-step, rm -rf $(OUT_DIR)/target/product/generic*/*/product)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/product/generic*/*/system_ext)
+# Move GSI-specific files from /system to /system/system_ext
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/init/init.gsi.rc)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/init/config/)
+
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/target/product/gsi/Android.mk b/target/product/gsi/Android.mk
index 018bbb0..57dee0a 100644
--- a/target/product/gsi/Android.mk
+++ b/target/product/gsi/Android.mk
@@ -169,3 +169,36 @@
include $(BUILD_PHONY_PACKAGE)
endif # BOARD_VNDK_VERSION is set
+
+#####################################################################
+# skip_mount.cfg, read by init to skip mounting some partitions when GSI is used.
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := gsi_skip_mount.cfg
+LOCAL_MODULE_STEM := skip_mount.cfg
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SYSTEM_EXT_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := init/config
+
+# Adds a symlink under /system/etc/init/config pointing to /system/system_ext/etc/init/config
+# because first-stage init in Android 10.0 will read the skip_mount.cfg from /system/etc/* after
+# chroot /system.
+# TODO: remove this symlink when no need to support new GSI on Android 10.
+# The actual file needs to be under /system/system_ext because it's GSI-specific and does not
+# belong to core CSI.
+LOCAL_POST_INSTALL_CMD := ln -sf /system/system_ext/etc/init/config $(TARGET_OUT)/etc/init/config
+
+include $(BUILD_PREBUILT)
+
+#####################################################################
+# init.gsi.rc, GSI-specific init script.
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.gsi.rc
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SYSTEM_EXT_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := init
+
+include $(BUILD_PREBUILT)
diff --git a/target/product/gsi/skip_mount.cfg b/target/product/gsi/gsi_skip_mount.cfg
similarity index 100%
rename from target/product/gsi/skip_mount.cfg
rename to target/product/gsi/gsi_skip_mount.cfg
diff --git a/target/product/gsi_common.mk b/target/product/gsi_common.mk
index 1b5cd55..bfecc95 100644
--- a/target/product/gsi_common.mk
+++ b/target/product/gsi_common.mk
@@ -50,11 +50,6 @@
# Some GSI builds enable dexpreopt, whitelist these preopt files
PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += %.odex %.vdex %.art
-# Exclude GSI specific files
-PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
- system/etc/init/config/skip_mount.cfg \
- system/etc/init/init.gsi.rc \
-
# Exclude all files under system/product and system/system_ext
PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
system/product/% \
@@ -71,9 +66,9 @@
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
# GSI specific tasks on boot
-PRODUCT_COPY_FILES += \
- build/make/target/product/gsi/skip_mount.cfg:system/etc/init/config/skip_mount.cfg \
- build/make/target/product/gsi/init.gsi.rc:system/etc/init/init.gsi.rc \
+PRODUCT_PACKAGES += \
+ gsi_skip_mount.cfg \
+ init.gsi.rc
# Support addtional P vendor interface
PRODUCT_EXTRA_VNDK_VERSIONS := 28
diff --git a/target/product/gsi_release.mk b/target/product/gsi_release.mk
index 4c471db..81411a4 100644
--- a/target/product/gsi_release.mk
+++ b/target/product/gsi_release.mk
@@ -24,11 +24,6 @@
# - etc.
#
-# Exclude GSI specific files
-PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
- system/etc/init/config/skip_mount.cfg \
- system/etc/init/init.gsi.rc \
-
# Exclude all files under system/product and system/system_ext
PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
system/product/% \
@@ -50,9 +45,9 @@
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
# GSI specific tasks on boot
-PRODUCT_COPY_FILES += \
- build/make/target/product/gsi/skip_mount.cfg:system/etc/init/config/skip_mount.cfg \
- build/make/target/product/gsi/init.gsi.rc:system/etc/init/init.gsi.rc \
+PRODUCT_PACKAGES += \
+ gsi_skip_mount.cfg \
+ init.gsi.rc
# Support addtional P VNDK packages
PRODUCT_EXTRA_VNDK_VERSIONS := 28