Merge "first_stage_init: add support to skip module load failures" into rvc-d1-dev
This commit is contained in:
commit
427e663b96
3 changed files with 24 additions and 6 deletions
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
#include "first_stage_console.h"
|
#include "first_stage_console.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/sysmacros.h>
|
#include <sys/sysmacros.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
@ -87,8 +88,18 @@ void StartConsole() {
|
||||||
_exit(127);
|
_exit(127);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FirstStageConsole(const std::string& cmdline) {
|
int FirstStageConsole(const std::string& cmdline) {
|
||||||
return cmdline.find("androidboot.first_stage_console=1") != std::string::npos;
|
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
|
} // namespace init
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,15 @@
|
||||||
namespace android {
|
namespace android {
|
||||||
namespace init {
|
namespace init {
|
||||||
|
|
||||||
|
enum FirstStageConsoleParam {
|
||||||
|
DISABLED = 0,
|
||||||
|
CONSOLE_ON_FAILURE = 1,
|
||||||
|
IGNORE_FAILURE = 2,
|
||||||
|
MAX_PARAM_VALUE = IGNORE_FAILURE,
|
||||||
|
};
|
||||||
|
|
||||||
void StartConsole();
|
void StartConsole();
|
||||||
bool FirstStageConsole(const std::string& cmdline);
|
int FirstStageConsole(const std::string& cmdline);
|
||||||
|
|
||||||
} // namespace init
|
} // namespace init
|
||||||
} // namespace android
|
} // namespace android
|
||||||
|
|
|
||||||
|
|
@ -200,16 +200,16 @@ int FirstStageMain(int argc, char** argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Modprobe m({"/lib/modules"}, module_load_file);
|
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 (!m.LoadListedModules(!want_console)) {
|
||||||
if (want_console) {
|
if (want_console != FirstStageConsoleParam::DISABLED) {
|
||||||
LOG(ERROR) << "Failed to load kernel modules, starting console";
|
LOG(ERROR) << "Failed to load kernel modules, starting console";
|
||||||
} else {
|
} else {
|
||||||
LOG(FATAL) << "Failed to load kernel modules";
|
LOG(FATAL) << "Failed to load kernel modules";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (want_console) {
|
if (want_console == FirstStageConsoleParam::CONSOLE_ON_FAILURE) {
|
||||||
StartConsole();
|
StartConsole();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue