diff --git a/init/Android.mk b/init/Android.mk index ac31ef161..c881e2fd2 100644 --- a/init/Android.mk +++ b/init/Android.mk @@ -75,13 +75,22 @@ LOCAL_REQUIRED_MODULES := \ adb_debug.prop \ # Set up the directories that first stage init mounts on. -LOCAL_POST_INSTALL_CMD := mkdir -p \ - $(TARGET_RAMDISK_OUT)/debug_ramdisk \ - $(TARGET_RAMDISK_OUT)/dev \ - $(TARGET_RAMDISK_OUT)/mnt \ - $(TARGET_RAMDISK_OUT)/proc \ - $(TARGET_RAMDISK_OUT)/second_stage_resources \ - $(TARGET_RAMDISK_OUT)/sys \ + +my_ramdisk_dirs := \ + debug_ramdisk \ + dev \ + metadata \ + mnt \ + proc \ + second_stage_resources \ + sys \ + +LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_RAMDISK_OUT)/,$(my_ramdisk_dirs)) +ifeq (true,$(BOARD_USES_GENERIC_KERNEL_IMAGE)) + LOCAL_POST_INSTALL_CMD += $(addprefix $(TARGET_RAMDISK_OUT)/first_stage_ramdisk/,$(my_ramdisk_dirs)) +endif + +my_ramdisk_dirs := LOCAL_STATIC_LIBRARIES := \ libc++fs \ diff --git a/init/first_stage_init.cpp b/init/first_stage_init.cpp index 83a32e746..0949fc522 100644 --- a/init/first_stage_init.cpp +++ b/init/first_stage_init.cpp @@ -99,34 +99,6 @@ bool ForceNormalBoot(const std::string& cmdline) { return cmdline.find("androidboot.force_normal_boot=1") != std::string::npos; } -// Move e2fsck before switching root, so that it is available at the same path -// after switching root. -void PrepareSwitchRoot() { - constexpr const char* src = "/system/bin/e2fsck"; - constexpr const char* dst = "/first_stage_ramdisk/system/bin/e2fsck"; - - if (access(dst, X_OK) == 0) { - LOG(INFO) << dst << " already exists and it can be executed"; - return; - } - - if (access(src, F_OK) != 0) { - PLOG(INFO) << "Not moving " << src << " because it cannot be accessed"; - return; - } - - auto dst_dir = android::base::Dirname(dst); - std::error_code ec; - if (!fs::create_directories(dst_dir, ec) && !!ec) { - LOG(FATAL) << "Cannot create " << dst_dir << ": " << ec.message(); - } - if (rename(src, dst) != 0) { - PLOG(FATAL) << "Cannot move " << src << " to " << dst - << ". Either install e2fsck.ramdisk so that it is at the correct place (" << dst - << "), or make ramdisk writable"; - } -} - } // namespace std::string GetModuleLoadList(bool recovery, const std::string& dir_path) { @@ -327,7 +299,6 @@ int FirstStageMain(int argc, char** argv) { if (ForceNormalBoot(cmdline)) { mkdir("/first_stage_ramdisk", 0755); - PrepareSwitchRoot(); // SwitchRoot() must be called with a mount point as the target, so we bind mount the // target directory to itself here. if (mount("/first_stage_ramdisk", "/first_stage_ramdisk", nullptr, MS_BIND, nullptr) != 0) {