提交 de8626e6 编写于 作者: Y yanghongliang

dayu200 add cmd (reboot loader)

Signed-off-by: Nyanghongliang <yang_hongliang@hoperun.com>
上级 f7e72f9c
......@@ -155,6 +155,10 @@ if (defined(ohos_lite)) {
defines = [ "DISABLE_INIT_TWO_STAGES" ]
}
if (defined(product_name) && product_name == "rk3568") {
defines += [ "PRODUCT_RK" ]
}
install_images = [
"system",
"updater",
......
......@@ -15,15 +15,19 @@ import("//build/ohos.gni")
ohos_executable("begetctl") {
sources = [
"init_cmd_reboot.c",
"main.c",
"misc_daemon.cpp",
"init_cmd_reboot.c",
"param_cmd.c",
"service_control.c",
"param_cmd.c"
]
defines = [ "INIT_AGENT" ]
if (defined(product_name) && product_name == "rk3568") {
defines += [ "PRODUCT_RK" ]
}
include_dirs = [
"//base/startup/init_lite/services/include",
"//base/startup/init_lite/services/log",
......@@ -37,25 +41,25 @@ ohos_executable("begetctl") {
]
deps = [
"//base/startup/init_lite/interfaces/innerkits/fs_manager:libfsmanager_shared",
"//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara",
"//base/startup/init_lite/interfaces/innerkits/reboot:libreboot_static",
"//base/startup/init_lite/services/log:agent_log",
"//base/startup/init_lite/services/param:param_client",
"//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara",
"//third_party/bounds_checking_function:libsec_static",
]
external_deps = [ "hiviewdfx_hilog_native:libhilog" ]
symlink_target_name = [
"misc_daemon",
"reboot",
"devctl",
"service",
"service_control",
"start_service",
"stop_service",
"service",
"param"
"misc_daemon",
"reboot",
"devctl",
"service",
"service_control",
"start_service",
"stop_service",
"service",
"param",
]
install_images = [ "system" ]
......
......@@ -20,6 +20,7 @@
#include "begetctl.h"
#define REBOOT_CMD_NUMBER 2
#ifdef PRODUCT_RK
#define USAGE_INFO "usage: reboot shutdown\n"\
" reboot updater\n"\
" reboot updater[:options]\n" \
......@@ -27,6 +28,14 @@
" reboot flashd[:options]\n" \
" reboot loader\n" \
" reboot\n"
#else
#define USAGE_INFO "usage: reboot shutdown\n"\
" reboot updater\n"\
" reboot updater[:options]\n" \
" reboot flashd\n" \
" reboot flashd[:options]\n" \
" reboot\n"
#endif
static int main_cmd(int argc, char* argv[])
{
......@@ -38,7 +47,9 @@ static int main_cmd(int argc, char* argv[])
if (argc == REBOOT_CMD_NUMBER && strcmp(argv[1], "shutdown") != 0 &&
strcmp(argv[1], "updater") != 0 &&
strcmp(argv[1], "flashd") != 0 &&
strcmp(argv[1], "loader") !=0 &&
#ifdef PRODUCT_RK
strcmp(argv[1], "loader") !=0 &&
#endif
strncmp(argv[1], "updater:", strlen("updater:")) != 0 &&
strncmp(argv[1], "flashd:", strlen("flashd:")) != 0) {
printf("%s", USAGE_INFO);
......
......@@ -25,6 +25,14 @@
#include "init_utils.h"
#include "securec.h"
#ifdef PRODUCT_RK
#include <sys/syscall.h>
#define REBOOT_MAGIC1 0xfee1dead
#define REBOOT_MAGIC2 672274793
#define REBOOT_CMD_RESTART2 0xA1B2C3D4
#endif
#define MAX_VALUE_LENGTH 500
#define MAX_COMMAND_SIZE 20
#define MAX_UPDATE_SIZE 100
......@@ -139,16 +147,18 @@ void ExecReboot(const char *value)
return;
}
INIT_ERROR_CHECK(CheckRebootParam(valueData) == 0, return, "Invalid arg %s for reboot.", value);
char *fstabFile = GetFstabFile();
INIT_ERROR_CHECK(fstabFile != NULL, return, "Failed get fstab file");
Fstab *fstab = NULL;
INIT_ERROR_CHECK((fstab = ReadFstabFromFile(fstabFile, false)) != NULL, free(fstabFile); return,
"Failed get fstab from %s", fstabFile);
free(fstabFile);
char miscDevice[PATH_MAX] = {0};
int ret = GetBlockDeviceByMountPoint("/misc", fstab, miscDevice, PATH_MAX);
ReleaseFstab(fstab);
INIT_ERROR_CHECK(ret == 0, return, "Failed to get misc device name.");
int ret;
char *fstabFile = GetFstabFile();
if (fstabFile != NULL) {
Fstab *fstab = ReadFstabFromFile(fstabFile, false);
free(fstabFile);
if (fstab != NULL) {
ret = GetBlockDeviceByMountPoint("/misc", fstab, miscDevice, PATH_MAX);
ReleaseFstab(fstab);
INIT_CHECK_ONLY_ELOG(ret == 0, "Failed to get misc device name.");
}
}
StopAllServices(SERVICE_ATTR_INVALID);
sync();
INIT_CHECK_ONLY_ELOG(GetMountStatusForMountPoint("/vendor") == 0 || umount("/vendor") == 0,
......@@ -163,7 +173,11 @@ void ExecReboot(const char *value)
ret = 0;
if (valueData == NULL) {
#ifndef PRODUCT_RK
ret = CheckAndRebootToUpdater(NULL, "reboot", NULL, NULL, miscDevice);
#else
reboot(RB_AUTOBOOT);
#endif
} else if (strcmp(valueData, "shutdown") == 0) {
#ifndef STARTUP_INIT_TEST
ret = reboot(RB_POWER_OFF);
......@@ -176,6 +190,10 @@ void ExecReboot(const char *value)
ret = CheckAndRebootToUpdater(valueData, "updater", "updater:", "boot_updater", miscDevice);
} else if (strncmp(valueData, "flash", strlen("flash")) == 0) {
ret = CheckAndRebootToUpdater(valueData, "flash", "flash:", "boot_flash", miscDevice);
#ifdef PRODUCT_RK
} else if (strncmp(valueData, "loader", strlen("loader")) == 0) {
syscall(__NR_reboot, REBOOT_MAGIC1, REBOOT_MAGIC2, REBOOT_CMD_RESTART2, "loader");
#endif
}
INIT_LOGI("Reboot %s %s.", value, (ret == 0) ? "success" : "fail");
return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册