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

Commit 09647273 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "first_stage_init: add support to skip module load failures"

parents 8f9d4afa c8907427
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#include "first_stage_console.h"

#include <stdio.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
#include <sys/types.h>
@@ -87,8 +88,18 @@ void StartConsole() {
    _exit(127);
}

bool FirstStageConsole(const std::string& cmdline) {
    return cmdline.find("androidboot.first_stage_console=1") != std::string::npos;
int FirstStageConsole(const std::string& cmdline) {
    auto pos = cmdline.find("androidboot.first_stage_console=");
    if (pos != std::string::npos) {
        int val = 0;
        if (sscanf(cmdline.c_str() + pos, "androidboot.first_stage_console=%d", &val) != 1) {
            return FirstStageConsoleParam::DISABLED;
        }
        if (val <= FirstStageConsoleParam::MAX_PARAM_VALUE && val >= 0) {
            return val;
        }
    }
    return FirstStageConsoleParam::DISABLED;
}

}  // namespace init
+8 −1
Original line number Diff line number Diff line
@@ -21,8 +21,15 @@
namespace android {
namespace init {

enum FirstStageConsoleParam {
    DISABLED = 0,
    CONSOLE_ON_FAILURE = 1,
    IGNORE_FAILURE = 2,
    MAX_PARAM_VALUE = IGNORE_FAILURE,
};

void StartConsole();
bool FirstStageConsole(const std::string& cmdline);
int FirstStageConsole(const std::string& cmdline);

}  // namespace init
}  // namespace android
+3 −3
Original line number Diff line number Diff line
@@ -200,16 +200,16 @@ int FirstStageMain(int argc, char** argv) {
    }

    Modprobe m({"/lib/modules"}, module_load_file);
    auto want_console = ALLOW_FIRST_STAGE_CONSOLE && FirstStageConsole(cmdline);
    auto want_console = ALLOW_FIRST_STAGE_CONSOLE ? FirstStageConsole(cmdline) : 0;
    if (!m.LoadListedModules(!want_console)) {
        if (want_console) {
        if (want_console != FirstStageConsoleParam::DISABLED) {
            LOG(ERROR) << "Failed to load kernel modules, starting console";
        } else {
            LOG(FATAL) << "Failed to load kernel modules";
        }
    }

    if (want_console) {
    if (want_console == FirstStageConsoleParam::CONSOLE_ON_FAILURE) {
        StartConsole();
    }