提交 6638b7de 编写于 作者: O openharmony_ci 提交者: Gitee

!190 dayu200 add cmd (reboot loader)

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