Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69688245 authored by Yifan Hong's avatar Yifan Hong Committed by Gerrit Code Review
Browse files

Merge changes from topic "readonly_generic_ramdisk"

* changes:
  Add /metadata to ramdisk.
  Also create dirs under /first_stage_ramdisk for GKI.
  Refactor the list of empty dirs in ramdisk in its own list.
  Revert "Move e2fsck into /first_stage_ramdisk."
parents 8571b761 a3f83730
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -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 \
+0 −29
Original line number Diff line number Diff line
@@ -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) {