From d0934cf2d41893c6c813e9d6acb7e37aa1267d44 Mon Sep 17 00:00:00 2001 From: Robert Drab <robert.drab@huawei.com> Date: Mon, 4 Jul 2022 13:00:01 +0200 Subject: [PATCH] param_service: Split out from the unused OHOS Init service In OpenHarmony 3.0 Param Service is a part of the whole Init system. This service is required by many other services. Therefore we have to split out the service as an independent from Init when Init is not used. Closes: https://gitlab.eclipse.org/eclipse/oniro-core/meta-openharmony/-/issues/28 Signed-off-by: Robert Drab <robert.drab@huawei.com> --- ...param_service-Add-to-startup-l2-part.patch | 29 +++++ .../param_service.patch | 108 ++++++++++++++++++ .../param_service_main.c | 70 ++++++++++++ .../openharmony/openharmony-standard_3.0.bb | 4 + 4 files changed, 211 insertions(+) create mode 100644 recipes-openharmony/openharmony/openharmony-standard-3.0/param_service-Add-to-startup-l2-part.patch create mode 100644 recipes-openharmony/openharmony/openharmony-standard-3.0/param_service.patch create mode 100644 recipes-openharmony/openharmony/openharmony-standard-3.0/param_service_main.c diff --git a/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service-Add-to-startup-l2-part.patch b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service-Add-to-startup-l2-part.patch new file mode 100644 index 0000000..bbbdd20 --- /dev/null +++ b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service-Add-to-startup-l2-part.patch @@ -0,0 +1,29 @@ +# SPDX-FileCopyrightText: Huawei Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +appspawn_standard: Add param_service to startup l2 part + +In OpenHarmony 3.0 param service is a part of init part which is we don not +use and therefore we have to add it to a different part. + +Signed-off-by: Robert Drab <robert.drab@huawei.com> +Upstream-Status: Inappropriate + +diff --git a/ohos.build b/ohos.build +index 650790f..85b3bde 100644 +--- a/ohos.build ++++ b/ohos.build +@@ -9,7 +9,11 @@ + "//base/startup/appspawn_standard:appspawn.rc", + "//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara", + "//base/startup/syspara_lite/interfaces/kits/js:deviceinfo", +- "//base/startup/syspara_lite/interfaces/kits/js:systemparameter" ++ "//base/startup/syspara_lite/interfaces/kits/js:systemparameter", ++ "//base/startup/init_lite/services:param_service", ++ "//base/startup/init_lite/services:ohos.para", ++ "//base/startup/init_lite/services/param:getparam", ++ "//base/startup/init_lite/services/param:setparam" + ], + "inner_kits": [ + { diff --git a/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service.patch b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service.patch new file mode 100644 index 0000000..b16e136 --- /dev/null +++ b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service.patch @@ -0,0 +1,108 @@ +# SPDX-FileCopyrightText: Huawei Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +param_service: Add to build system + +In OpenHarmony 3.0 Param Service is a part of the whole Init system. This +service is required by many other services. Therefore we have to split out +the service as an independent from Init when Init is not used. + +Signed-off-by: Robert Drab <robert.drab@huawei.com> +Upstream-Status: Inappropriate + +diff --git a/services/BUILD.gn b/services/BUILD.gn +index 1994c2ef..e094f7ce 100644 +--- a/services/BUILD.gn ++++ b/services/BUILD.gn +@@ -85,6 +85,25 @@ if (defined(ohos_lite)) { + } else { + import("//build/ohos.gni") + ++ ohos_executable("param_service") { ++ sources = [ "param/src/param_service_main.c" ] ++ include_dirs = [ ++ "//base/startup/init_lite/services/include/param", ++ "//base/startup/init_lite/services/log", ++ "//third_party/cJSON", ++ ] ++ deps = [ ++ "//base/startup/init_lite/services/log:init_log", ++ "//base/startup/init_lite/services/param:paramservice", ++ ] ++ install_images = [ ++ "system", ++ "updater", ++ ] ++ install_enable = true ++ part_name = "startup_l2" ++ } ++ + ohos_executable("init") { + sources = [ + "src/device.c", +@@ -132,6 +151,7 @@ if (defined(ohos_lite)) { + + group("startup_init") { + deps = [ ++ ":param_service", + ":init", + ":init_etc", + "//base/startup/init_lite/interfaces/innerkits/socket:libsocket", +@@ -180,7 +200,7 @@ if (defined(ohos_lite)) { + + ohos_prebuilt_etc("ohos.para") { + source = "//base/startup/init_lite/services/etc/ohos.para" +- part_name = "init" ++ part_name = "startup_l2" + } + + group("init_etc") { +diff --git a/services/param/BUILD.gn b/services/param/BUILD.gn +index 07e1d278..ba420b66 100644 +--- a/services/param/BUILD.gn ++++ b/services/param/BUILD.gn +@@ -83,7 +83,7 @@ ohos_executable("getparam") { + "//third_party/cJSON:cjson_static", + ] + install_enable = true +- part_name = "init" ++ part_name = "startup_l2" + } + + ohos_executable("setparam") { +@@ -100,5 +100,5 @@ ohos_executable("setparam") { + "//third_party/cJSON:cjson_static", + ] + install_enable = true +- part_name = "init" ++ part_name = "startup_l2" + } +diff --git a/services/param/service/param_service.c b/services/param/service/param_service.c +index cd5d93be..03a10ae0 100644 +--- a/services/param/service/param_service.c ++++ b/services/param/service/param_service.c +@@ -131,7 +131,11 @@ static int ProcessParamSet(const RequestMsg *msg) + ret = WritePersistParam(info[0].value, info[1].value); + PARAM_CHECK(ret == 0, return ret, "Failed to set param"); + // notify event to process trigger ++// TODO: add some flag or something instead of if 0 ++// The following call is a part of OpenHarmony init system ++#if 0 + PostTrigger(EVENT_PROPERTY, msg->content, msg->contentSize); ++#endif + return 0; + } + +@@ -267,7 +271,11 @@ int SystemWriteParam(const char *name, const char *value) + PARAM_CHECK(ret == 0, return ret, "Failed to set persist param %s", name); + + // notify event to process trigger ++// TODO: add some flag or something instead of if 0 ++// The following call is a part of OpenHarmony init system ++#if 0 + PostParamTrigger(name, value); ++#endif + return ret; + } + diff --git a/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service_main.c b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service_main.c new file mode 100644 index 0000000..cac8006 --- /dev/null +++ b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service_main.c @@ -0,0 +1,70 @@ +/* + * SPDX-FileCopyrightText: Huawei Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <init_log.h> +#include <init_param.h> +#include <errno.h> +#include <unistd.h> + +/* + * Currently StopParamService doesn't make the libuv loop to stop. + * This causes systemd to wait after sending the SIGTERM and makes + * the shutdown / reboot procedure unacceptably long. + */ +#ifdef PARAM_SERVICE_CLEANUP_FIXED +#include <signal.h> + +void sig_handler(int signum) { + INIT_LOGI("Stopping param service..."); + StopParamService(); +} +#endif + +char *parse_args(int argc, char **argv) { + char *fpath = NULL; + + if (argc == 2 && argv[1]) { + if (access(argv[1], R_OK) == 0) { + fpath = argv[1]; + } + } + + return fpath; +} + +int main(int argc, char **argv) +{ + char *params_fpath = "/system/etc/ohos.para"; + + if (argc > 1) + params_fpath = parse_args(argc, argv); + + if (!params_fpath) { + INIT_LOGI("Invalid params file path!"); + return -EINVAL; + } + + InitParamService(); + int ret = LoadDefaultParams(params_fpath); + if (ret) { + INIT_LOGE("Failed to load default params! Error code: %d", ret); + } + +#ifdef PARAM_SERVICE_CLEANUP_FIXED + struct sigaction action = { 0 }; + action.sa_handler = sig_handler; + + sigaction(SIGTERM, &action, NULL); + sigaction(SIGINT, &action, NULL); + sigaction(SIGHUP, &action, NULL); +#endif + + // Following call spins up libuv event loop that will keep service running + INIT_LOGI("Starting param service..."); + StartParamService(); + + return 0; +} diff --git a/recipes-openharmony/openharmony/openharmony-standard_3.0.bb b/recipes-openharmony/openharmony/openharmony-standard_3.0.bb index 6b0d720..3af057d 100644 --- a/recipes-openharmony/openharmony/openharmony-standard_3.0.bb +++ b/recipes-openharmony/openharmony/openharmony-standard_3.0.bb @@ -53,6 +53,10 @@ SRC_URI += "file://appspawn-procps.patch;patchdir=${S}/base/startup/appspawn_sta SRC_URI += "file://base_startup_appspawn_standard-app-spawn-server-override-007-fix.patch;patchdir=${S}/base/startup/appspawn_standard" SRC_URI += "file://base_startup_appspawn_standard-setprocessname-buffer-overflow.patch;patchdir=${S}/base/startup/appspawn_standard" +SRC_URI += "file://param_service_main.c;subdir=${S}/base/startup/init_lite/services/param/src" +SRC_URI += "file://param_service.patch;patchdir=${S}/base/startup/init_lite" +SRC_URI += "file://param_service-Add-to-startup-l2-part.patch;patchdir=${S}/base/startup/appspawn_standard" + inherit python3native gn_base ptest B = "${S}/out/ohos-arm-release" -- GitLab