Merge changes from topic "readonly_generic_ramdisk" am: 696882455b
am: 3401909e7c
Original change: https://android-review.googlesource.com/c/platform/system/core/+/1519823 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I696a169b18eb038958dafa45f63cd9a5528456c0
This commit is contained in:
commit
6c9f509cdb
2 changed files with 16 additions and 36 deletions
|
@ -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 \
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue