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 0000000000000000000000000000000000000000..bbbdd206fbc5f03d5aef193f02ea51c6eab52a22 --- /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 0000000000000000000000000000000000000000..b16e136ab580a62237920cbc551716e6ea098554 --- /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 0000000000000000000000000000000000000000..cac8006695e384b4e2aca85cfae1642bac4a9dfd --- /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 6b0d720866712f139e6b0a8348282b512224f4d2..3af057dd0a7a6774136f0437a57822741ffc4c3a 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"