From 7eaf9b58ecbaae486e2ecf98fa803c30f10fc3dc Mon Sep 17 00:00:00 2001 From: Justin Yun Date: Fri, 28 Jun 2019 14:28:00 +0900 Subject: [PATCH] Rename product_services to system_ext Update ld.config.txt and init. Bug: 134359158 Test: make && check boot and ld.config.txt file Change-Id: Ie1dce42e690414fb45b26759506ea7f64d06740d --- fs_mgr/fs_mgr_fstab.cpp | 7 ++--- init/init.cpp | 6 ++-- init/property_service.cpp | 7 ++--- libcutils/fs_config.cpp | 31 ++++++++----------- rootdir/etc/ld.config.txt | 41 +++++++++++++------------ rootdir/etc/ld.config.vndk_lite.txt | 24 ++++++++------- rootdir/update_and_install_ld_config.mk | 7 +---- 7 files changed, 57 insertions(+), 66 deletions(-) diff --git a/fs_mgr/fs_mgr_fstab.cpp b/fs_mgr/fs_mgr_fstab.cpp index 31790b160..9a0f4fedc 100644 --- a/fs_mgr/fs_mgr_fstab.cpp +++ b/fs_mgr/fs_mgr_fstab.cpp @@ -704,10 +704,9 @@ bool ReadFstabFromDt(Fstab* fstab, bool log) { return true; } -// For GSI to skip mounting /product and /product_services, until there are -// well-defined interfaces between them and /system. Otherwise, the GSI flashed -// on /system might not be able to work with /product and /product_services. -// When they're skipped here, /system/product and /system/product_services in +// For GSI to skip mounting /product and /system_ext, until there are well-defined interfaces +// between them and /system. Otherwise, the GSI flashed on /system might not be able to work with +// /product and /system_ext. When they're skipped here, /system/product and /system/system_ext in // GSI will be used. bool SkipMountingPartitions(Fstab* fstab) { constexpr const char kSkipMountConfig[] = "/system/etc/init/config/skip_mount.cfg"; diff --git a/init/init.cpp b/init/init.cpp index 675f3e50a..c45d94d4b 100644 --- a/init/init.cpp +++ b/init/init.cpp @@ -139,12 +139,12 @@ static void LoadBootScripts(ActionManager& action_manager, ServiceList& service_ if (!parser.ParseConfig("/system/etc/init")) { late_import_paths.emplace_back("/system/etc/init"); } + // late_import is available only in Q and earlier release. As we don't + // have system_ext in those versions, skip late_import for system_ext. + parser.ParseConfig("/system_ext/etc/init"); if (!parser.ParseConfig("/product/etc/init")) { late_import_paths.emplace_back("/product/etc/init"); } - if (!parser.ParseConfig("/product_services/etc/init")) { - late_import_paths.emplace_back("/product_services/etc/init"); - } if (!parser.ParseConfig("/odm/etc/init")) { late_import_paths.emplace_back("/odm/etc/init"); } diff --git a/init/property_service.cpp b/init/property_service.cpp index b89914f12..8623c3020 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp @@ -782,10 +782,9 @@ static void property_initialize_ro_product_props() { "brand", "device", "manufacturer", "model", "name", }; const char* RO_PRODUCT_PROPS_ALLOWED_SOURCES[] = { - "odm", "product", "product_services", "system", "vendor", + "odm", "product", "system_ext", "system", "vendor", }; - const char* RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER = - "product,product_services,odm,vendor,system"; + const char* RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER = "product,odm,vendor,system_ext,system"; const std::string EMPTY = ""; std::string ro_product_props_source_order = @@ -892,6 +891,7 @@ void property_load_boot_defaults(bool load_debug_prop) { } } load_properties_from_file("/system/build.prop", nullptr, &properties); + load_properties_from_file("/system_ext/build.prop", nullptr, &properties); load_properties_from_file("/vendor/default.prop", nullptr, &properties); load_properties_from_file("/vendor/build.prop", nullptr, &properties); if (SelinuxGetVendorAndroidVersion() >= __ANDROID_API_Q__) { @@ -901,7 +901,6 @@ void property_load_boot_defaults(bool load_debug_prop) { load_properties_from_file("/odm/build.prop", nullptr, &properties); } load_properties_from_file("/product/build.prop", nullptr, &properties); - load_properties_from_file("/product_services/build.prop", nullptr, &properties); load_properties_from_file("/factory/factory.prop", "ro.*", &properties); if (load_debug_prop) { diff --git a/libcutils/fs_config.cpp b/libcutils/fs_config.cpp index 897a16941..b29638c28 100644 --- a/libcutils/fs_config.cpp +++ b/libcutils/fs_config.cpp @@ -106,7 +106,7 @@ static const char sys_conf_file[] = "/system/etc/fs_config_files"; // oem/ file-system since the intent is to provide support for customized // portions of a separate vendor.img or oem.img. Has to remain open so that // customization can also land on /system/vendor, /system/oem, /system/odm, -// /system/product or /system/product_services. +// /system/product or /system/system_ext. // // We expect build-time checking or filtering when constructing the associated // fs_config_* files (see build/tools/fs_config/fs_config_generate.c) @@ -118,15 +118,12 @@ static const char odm_conf_dir[] = "/odm/etc/fs_config_dirs"; static const char odm_conf_file[] = "/odm/etc/fs_config_files"; static const char product_conf_dir[] = "/product/etc/fs_config_dirs"; static const char product_conf_file[] = "/product/etc/fs_config_files"; -static const char product_services_conf_dir[] = "/product_services/etc/fs_config_dirs"; -static const char product_services_conf_file[] = "/product_services/etc/fs_config_files"; +static const char system_ext_conf_dir[] = "/system_ext/etc/fs_config_dirs"; +static const char system_ext_conf_file[] = "/system_ext/etc/fs_config_files"; static const char* conf[][2] = { - {sys_conf_file, sys_conf_dir}, - {ven_conf_file, ven_conf_dir}, - {oem_conf_file, oem_conf_dir}, - {odm_conf_file, odm_conf_dir}, - {product_conf_file, product_conf_dir}, - {product_services_conf_file, product_services_conf_dir}, + {sys_conf_file, sys_conf_dir}, {ven_conf_file, ven_conf_dir}, + {oem_conf_file, oem_conf_dir}, {odm_conf_file, odm_conf_dir}, + {product_conf_file, product_conf_dir}, {system_ext_conf_file, system_ext_conf_dir}, }; // Do not use android_files to grant Linux capabilities. Use ambient capabilities in their @@ -158,9 +155,9 @@ static const struct fs_path_config android_files[] = { { 00600, AID_ROOT, AID_ROOT, 0, "product/build.prop" }, { 00444, AID_ROOT, AID_ROOT, 0, product_conf_dir + 1 }, { 00444, AID_ROOT, AID_ROOT, 0, product_conf_file + 1 }, - { 00600, AID_ROOT, AID_ROOT, 0, "product_services/build.prop" }, - { 00444, AID_ROOT, AID_ROOT, 0, product_services_conf_dir + 1 }, - { 00444, AID_ROOT, AID_ROOT, 0, product_services_conf_file + 1 }, + { 00600, AID_ROOT, AID_ROOT, 0, "system_ext/build.prop" }, + { 00444, AID_ROOT, AID_ROOT, 0, system_ext_conf_dir + 1 }, + { 00444, AID_ROOT, AID_ROOT, 0, system_ext_conf_file + 1 }, { 00755, AID_ROOT, AID_SHELL, 0, "system/bin/crash_dump32" }, { 00755, AID_ROOT, AID_SHELL, 0, "system/bin/crash_dump64" }, { 00755, AID_ROOT, AID_SHELL, 0, "system/bin/debuggerd" }, @@ -248,9 +245,9 @@ static int fs_config_open(int dir, int which, const char* target_out_path) { } // if path is "odm/", "oem/", "product/", -// "product_services/" or "vendor/" +// "system_ext/" or "vendor/" static bool is_partition(const std::string& path) { - static const char* partitions[] = {"odm/", "oem/", "product/", "product_services/", "vendor/"}; + static const char* partitions[] = {"odm/", "oem/", "product/", "system_ext/", "vendor/"}; for (size_t i = 0; i < (sizeof(partitions) / sizeof(partitions[0])); ++i) { if (StartsWith(path, partitions[i])) return true; } @@ -285,10 +282,8 @@ static bool fs_config_cmp(bool dir, const char* prefix, size_t len, const char* if (fnmatch(pattern.c_str(), input.c_str(), fnm_flags) == 0) return true; // Check match between logical partition's files and patterns. - static constexpr const char* kLogicalPartitions[] = {"system/product/", - "system/product_services/", - "system/vendor/", - "vendor/odm/"}; + static constexpr const char* kLogicalPartitions[] = {"system/product/", "system/system_ext/", + "system/vendor/", "vendor/odm/"}; for (auto& logical_partition : kLogicalPartitions) { if (StartsWith(input, logical_partition)) { std::string input_in_partition = input.substr(input.find('/') + 1); diff --git a/rootdir/etc/ld.config.txt b/rootdir/etc/ld.config.txt index b1616d38b..a6ea2abc8 100644 --- a/rootdir/etc/ld.config.txt +++ b/rootdir/etc/ld.config.txt @@ -7,6 +7,7 @@ # absolute path of an executable is selected. dir.system = /system/bin/ dir.system = /system/xbin/ +dir.system = /%SYSTEM_EXT%/bin/ dir.system = /%PRODUCT%/bin/ dir.vendor = /odm/bin/ @@ -48,8 +49,8 @@ namespace.default.isolated = true namespace.default.visible = true namespace.default.search.paths = /system/${LIB} +namespace.default.search.paths += /%SYSTEM_EXT%/${LIB} namespace.default.search.paths += /%PRODUCT%/${LIB} -namespace.default.search.paths += /%PRODUCT_SERVICES%/${LIB} # We can't have entire /system/${LIB} as permitted paths because doing so # makes it possible to load libs in /system/${LIB}/vndk* directories by @@ -61,12 +62,15 @@ namespace.default.search.paths += /%PRODUCT_SERVICES%/${LIB} namespace.default.permitted.paths = /system/${LIB}/drm namespace.default.permitted.paths += /system/${LIB}/extractors namespace.default.permitted.paths += /system/${LIB}/hw +namespace.default.permitted.paths += /%SYSTEM_EXT%/${LIB} namespace.default.permitted.paths += /%PRODUCT%/${LIB} -namespace.default.permitted.paths += /%PRODUCT_SERVICES%/${LIB} # These are where odex files are located. libart has to be able to dlopen the files namespace.default.permitted.paths += /system/framework namespace.default.permitted.paths += /system/app namespace.default.permitted.paths += /system/priv-app +namespace.default.permitted.paths += /%SYSTEM_EXT%/framework +namespace.default.permitted.paths += /%SYSTEM_EXT%/app +namespace.default.permitted.paths += /%SYSTEM_EXT%/priv-app namespace.default.permitted.paths += /vendor/framework namespace.default.permitted.paths += /vendor/app namespace.default.permitted.paths += /vendor/priv-app @@ -80,9 +84,6 @@ namespace.default.permitted.paths += /oem/app namespace.default.permitted.paths += /%PRODUCT%/framework namespace.default.permitted.paths += /%PRODUCT%/app namespace.default.permitted.paths += /%PRODUCT%/priv-app -namespace.default.permitted.paths += /%PRODUCT_SERVICES%/framework -namespace.default.permitted.paths += /%PRODUCT_SERVICES%/app -namespace.default.permitted.paths += /%PRODUCT_SERVICES%/priv-app namespace.default.permitted.paths += /data namespace.default.permitted.paths += /mnt/expand namespace.default.permitted.paths += /apex/com.android.runtime/${LIB}/bionic @@ -90,10 +91,10 @@ namespace.default.permitted.paths += /system/${LIB}/bootstrap namespace.default.asan.search.paths = /data/asan/system/${LIB} namespace.default.asan.search.paths += /system/${LIB} +namespace.default.asan.search.paths += /data/asan/%SYSTEM_EXT%/${LIB} +namespace.default.asan.search.paths += /%SYSTEM_EXT%/${LIB} namespace.default.asan.search.paths += /data/asan/%PRODUCT%/${LIB} namespace.default.asan.search.paths += /%PRODUCT%/${LIB} -namespace.default.asan.search.paths += /data/asan/%PRODUCT_SERVICES%/${LIB} -namespace.default.asan.search.paths += /%PRODUCT_SERVICES%/${LIB} namespace.default.asan.permitted.paths = /data namespace.default.asan.permitted.paths += /system/${LIB}/drm @@ -102,6 +103,10 @@ namespace.default.asan.permitted.paths += /system/${LIB}/hw namespace.default.asan.permitted.paths += /system/framework namespace.default.asan.permitted.paths += /system/app namespace.default.asan.permitted.paths += /system/priv-app +namespace.default.asan.permitted.paths += /%SYSTEM_EXT%/${LIB} +namespace.default.asan.permitted.paths += /%SYSTEM_EXT%/framework +namespace.default.asan.permitted.paths += /%SYSTEM_EXT%/app +namespace.default.asan.permitted.paths += /%SYSTEM_EXT%/priv-app namespace.default.asan.permitted.paths += /vendor/framework namespace.default.asan.permitted.paths += /vendor/app namespace.default.asan.permitted.paths += /vendor/priv-app @@ -116,10 +121,6 @@ namespace.default.asan.permitted.paths += /%PRODUCT%/${LIB} namespace.default.asan.permitted.paths += /%PRODUCT%/framework namespace.default.asan.permitted.paths += /%PRODUCT%/app namespace.default.asan.permitted.paths += /%PRODUCT%/priv-app -namespace.default.asan.permitted.paths += /%PRODUCT_SERVICES%/${LIB} -namespace.default.asan.permitted.paths += /%PRODUCT_SERVICES%/framework -namespace.default.asan.permitted.paths += /%PRODUCT_SERVICES%/app -namespace.default.asan.permitted.paths += /%PRODUCT_SERVICES%/priv-app namespace.default.asan.permitted.paths += /mnt/expand namespace.default.asan.permitted.paths += /apex/com.android.runtime/${LIB}/bionic namespace.default.asan.permitted.paths += /system/${LIB}/bootstrap @@ -510,15 +511,15 @@ namespace.vndk.link.vndk_in_system.shared_libs = %VNDK_USING_CORE_VARIANT_LIBRAR namespace.system.isolated = false namespace.system.search.paths = /system/${LIB} +namespace.system.search.paths += /%SYSTEM_EXT%/${LIB} namespace.system.search.paths += /%PRODUCT%/${LIB} -namespace.system.search.paths += /%PRODUCT_SERVICES%/${LIB} namespace.system.asan.search.paths = /data/asan/system/${LIB} namespace.system.asan.search.paths += /system/${LIB} -namespace.system.asan.search.paths += /data/asan/product/${LIB} +namespace.system.asan.search.paths += /data/asan/%SYSTEM_EXT%/${LIB} +namespace.system.asan.search.paths += /%SYSTEM_EXT%/${LIB} +namespace.system.asan.search.paths += /data/asan/%PRODUCT%/${LIB} namespace.system.asan.search.paths += /%PRODUCT%/${LIB} -namespace.system.asan.search.paths += /data/asan/product_services/${LIB} -namespace.system.asan.search.paths += /%PRODUCT_SERVICES%/${LIB} namespace.system.links = runtime namespace.system.link.runtime.shared_libs = libdexfile_external.so @@ -553,15 +554,15 @@ namespace.vndk_in_system.visible = true # The search paths here should be kept the same as that of the 'system' # namespace. namespace.vndk_in_system.search.paths = /system/${LIB} +namespace.vndk_in_system.search.paths += /%SYSTEM_EXT%/${LIB} namespace.vndk_in_system.search.paths += /%PRODUCT%/${LIB} -namespace.vndk_in_system.search.paths += /%PRODUCT_SERVICES%/${LIB} namespace.vndk_in_system.asan.search.paths = /data/asan/system/${LIB} namespace.vndk_in_system.asan.search.paths += /system/${LIB} -namespace.vndk_in_system.asan.search.paths += /data/asan/product/${LIB} +namespace.vndk_in_system.asan.search.paths += /data/asan/%SYSTEM_EXT%/${LIB} +namespace.vndk_in_system.asan.search.paths += /%SYSTEM_EXT%/${LIB} +namespace.vndk_in_system.asan.search.paths += /data/asan/%PRODUCT%/${LIB} namespace.vndk_in_system.asan.search.paths += /%PRODUCT%/${LIB} -namespace.vndk_in_system.asan.search.paths += /data/asan/product_services/${LIB} -namespace.vndk_in_system.asan.search.paths += /%PRODUCT_SERVICES%/${LIB} namespace.vndk_in_system.whitelisted = %VNDK_USING_CORE_VARIANT_LIBRARIES% @@ -705,7 +706,7 @@ namespace.resolv.link.default.shared_libs += liblog.so [postinstall] namespace.default.isolated = false namespace.default.search.paths = /system/${LIB} +namespace.default.search.paths += /%SYSTEM_EXT%/${LIB} namespace.default.search.paths += /%PRODUCT%/${LIB} -namespace.default.search.paths += /%PRODUCT_SERVICES%/${LIB} namespace.default.link.runtime.shared_libs = %SANITIZER_RUNTIME_LIBRARIES% diff --git a/rootdir/etc/ld.config.vndk_lite.txt b/rootdir/etc/ld.config.vndk_lite.txt index 921240851..69535a91c 100644 --- a/rootdir/etc/ld.config.vndk_lite.txt +++ b/rootdir/etc/ld.config.vndk_lite.txt @@ -7,6 +7,7 @@ # absolute path of an executable is selected. dir.system = /system/bin/ dir.system = /system/xbin/ +dir.system = /%SYSTEM_EXT%/bin/ dir.system = /%PRODUCT%/bin/ dir.vendor = /odm/bin/ @@ -48,21 +49,21 @@ namespace.default.isolated = false namespace.default.visible = true namespace.default.search.paths = /system/${LIB} +namespace.default.search.paths += /%SYSTEM_EXT%/${LIB} +namespace.default.search.paths += /%PRODUCT%/${LIB} namespace.default.search.paths += /odm/${LIB} namespace.default.search.paths += /vendor/${LIB} -namespace.default.search.paths += /%PRODUCT%/${LIB} -namespace.default.search.paths += /%PRODUCT_SERVICES%/${LIB} namespace.default.asan.search.paths = /data/asan/system/${LIB} namespace.default.asan.search.paths += /system/${LIB} +namespace.default.asan.search.paths += /data/asan/%SYSTEM_EXT%/${LIB} +namespace.default.asan.search.paths += /%SYSTEM_EXT%/${LIB} +namespace.default.asan.search.paths += /data/asan/%PRODUCT%/${LIB} +namespace.default.asan.search.paths += /%PRODUCT%/${LIB} namespace.default.asan.search.paths += /data/asan/odm/${LIB} namespace.default.asan.search.paths += /odm/${LIB} namespace.default.asan.search.paths += /data/asan/vendor/${LIB} namespace.default.asan.search.paths += /vendor/${LIB} -namespace.default.asan.search.paths += /data/asan/%PRODUCT%/${LIB} -namespace.default.asan.search.paths += /%PRODUCT%/${LIB} -namespace.default.asan.search.paths += /data/asan/%PRODUCT_SERVICES%/${LIB} -namespace.default.asan.search.paths += /%PRODUCT_SERVICES%/${LIB} # Keep in sync with the "platform" namespace in art/build/apex/ld.config.txt. # If a shared library or an executable requests a shared library that @@ -336,8 +337,9 @@ namespace.default.search.paths += /vendor/${LIB}/vndk-sp # Access to system libraries is allowed namespace.default.search.paths += /system/${LIB}/vndk-sp%VNDK_VER% namespace.default.search.paths += /system/${LIB} +namespace.default.search.paths += /%SYSTEM_EXT%/${LIB} namespace.default.search.paths += /%PRODUCT%/${LIB} -namespace.default.search.paths += /%PRODUCT_SERVICES%/${LIB} +# Put /system/lib/vndk at the last search order in vndk_lite for GSI namespace.default.search.paths += /system/${LIB}/vndk%VNDK_VER% namespace.default.asan.search.paths = /data/asan/odm/${LIB} @@ -356,10 +358,10 @@ namespace.default.asan.search.paths += /data/asan/system/${LIB}/vndk-sp%VNDK_VER namespace.default.asan.search.paths += /system/${LIB}/vndk-sp%VNDK_VER% namespace.default.asan.search.paths += /data/asan/system/${LIB} namespace.default.asan.search.paths += /system/${LIB} -namespace.default.asan.search.paths += /data/asan/product/${LIB} +namespace.default.asan.search.paths += /data/asan/%SYSTEM_EXT%/${LIB} +namespace.default.asan.search.paths += /%SYSTEM_EXT%/${LIB} +namespace.default.asan.search.paths += /data/asan/%PRODUCT%/${LIB} namespace.default.asan.search.paths += /%PRODUCT%/${LIB} -namespace.default.asan.search.paths += /data/asan/product_services/${LIB} -namespace.default.asan.search.paths += /%PRODUCT_SERVICES%/${LIB} namespace.default.asan.search.paths += /data/asan/system/${LIB}/vndk%VNDK_VER% namespace.default.asan.search.paths += /system/${LIB}/vndk%VNDK_VER% @@ -514,5 +516,5 @@ namespace.resolv.link.default.shared_libs += libbinder_ndk.so [postinstall] namespace.default.isolated = false namespace.default.search.paths = /system/${LIB} +namespace.default.search.paths += /%SYSTEM_EXT%/${LIB} namespace.default.search.paths += /%PRODUCT%/${LIB} -namespace.default.search.paths += /%PRODUCT_SERVICES%/${LIB} diff --git a/rootdir/update_and_install_ld_config.mk b/rootdir/update_and_install_ld_config.mk index f62c3df5b..c949a4f1c 100644 --- a/rootdir/update_and_install_ld_config.mk +++ b/rootdir/update_and_install_ld_config.mk @@ -147,12 +147,7 @@ endif $(hide) sed -i.bak -e "s?%SANITIZER_RUNTIME_LIBRARIES%?$(PRIVATE_SANITIZER_RUNTIME_LIBRARIES)?g" $@ $(hide) sed -i.bak -e "s?%VNDK_VER%?$(PRIVATE_VNDK_VERSION_SUFFIX)?g" $@ $(hide) sed -i.bak -e "s?%PRODUCT%?$(TARGET_COPY_OUT_PRODUCT)?g" $@ -ifeq ($(TARGET_COPY_OUT_PRODUCT),$(TARGET_COPY_OUT_PRODUCT_SERVICES)) - # Remove lines containing %PRODUCT_SERVICES% (identical to the %PRODUCT% ones) - $(hide) sed -i.bak -e "\?%PRODUCT_SERVICES%?d" $@ -else - $(hide) sed -i.bak -e "s?%PRODUCT_SERVICES%?$(TARGET_COPY_OUT_PRODUCT_SERVICES)?g" $@ -endif + $(hide) sed -i.bak -e "s?%SYSTEM_EXT%?$(TARGET_COPY_OUT_SYSTEM_EXT)?g" $@ $(hide) sed -i.bak -e "s?^$(PRIVATE_VNDK_VERSION_TAG)??g" $@ $(hide) sed -i.bak "/^\#VNDK[0-9]\{2\}\#.*$$/d" $@ $(hide) rm -f $@.bak