Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • eclipse/oniro4openharmony/meta-openharmony
  • esben/meta-openharmony
  • thierrye/meta-openharmony
  • robertd/meta-openharmony
  • kristis/meta-openharmony
  • gwozdzcfs/meta-openharmony
  • agherzan/meta-openharmony
  • landgraf/meta-openharmony
  • pastanki/meta-openharmony
  • bero/meta-openharmony
  • stefanschmidt/meta-openharmony
  • mrfrank/meta-openharmony
  • kzarka/meta-openharmony
  • lucafavaretto/meta-openharmony
14 results
Show changes
Commits on Source (7)
......@@ -54,7 +54,7 @@ for ts in unittest moduletest systemtest ; do
done
# Component level test fixture teardown
if [ -f setup.sh ]; then
if [ -f teardown.sh ]; then
source teardown.sh
fi
......
# SPDX-FileCopyrightText: Huawei Inc.
#
# SPDX-License-Identifier: Apache-2.0
Patch for //base/startup/init_lite
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;
}
# SPDX-FileCopyrightText: Huawei Inc.
#
# SPDX-License-Identifier: Apache-2.0
Patch for //base/startup/appspawn_standard
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": [
{
# SPDX-FileCopyrightText: Huawei Inc.
#
# SPDX-License-Identifier: Apache-2.0
Patch for //base/startup/init_lite
param_service.c: Fix stopping param_service
StopParamService() have to be called from the uv_loop context to be able to
successfully stop the uv_loop. To achieve that we need an uv_idle callback.
Signed-off-by: Robert Drab <robert.drab@huawei.com>
Upstream-Status: Pending
diff --git a/services/param/service/param_service.c b/services/param/service/param_service.c
index cd5d93be..6634fa3d 100644
--- a/services/param/service/param_service.c
+++ b/services/param/service/param_service.c
@@ -241,12 +241,36 @@ void StopParamService()
PARAM_LOGI("StopParamService.");
}
+/*
+ * uv_stop() must be called from the uv_loop context and therefore
+ * StopParamService() cannot do it's job when called from the signal handler.
+ * We need a uv_idle callback that will call StopParamService() which calls
+ * uv_stop() from the uv_loop context to actually stop the param service loop.
+ */
+int g_paramService_asyncStopRequest = 0;
+
+int ParamServiceAsyncStopRequest() {
+ g_paramService_asyncStopRequest = 0;
+ return 0;
+}
+
+void ParamServiceLoopIdleCallback(uv_idle_t *handle) {
+ if (g_paramService_asyncStopRequest) {
+ PARAM_LOGI("%s(): %d Stopping param service...", __FUNCTION__, __LINE__);
+ StopParamService();
+ }
+}
+
int StartParamService()
{
PARAM_LOGI("StartParamService.");
uv_fs_t req;
uv_fs_unlink(uv_default_loop(), &req, PIPE_NAME, NULL);
+ uv_idle_t idler;
+ uv_idle_init(uv_default_loop(), &idler);
+ uv_idle_start(&idler, ParamServiceLoopIdleCallback);
+
uv_pipe_t pipeServer;
int ret = uv_pipe_init(uv_default_loop(), &pipeServer, 0);
PARAM_CHECK(ret == 0, return ret, "Failed to uv_pipe_init %d", ret);
diff --git a/services/include/param/init_param.h b/services/include/param/init_param.h
index 73a06795..4574cbaa 100644
--- a/services/include/param/init_param.h
+++ b/services/include/param/init_param.h
@@ -51,6 +51,14 @@ int StartParamService();
*/
void StopParamService();
+/**
+ * ParamServiceAsyncStopRequest interface
+ * Allows stopping ParamService from outside event loop context,
+ * e.g. from signal handler
+ *
+ */
+int ParamServiceAsyncStopRequest(void);
+
/**
* Init 接口
* 加载默认的参数值
/*
* SPDX-FileCopyrightText: Huawei Inc.
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <init_log.h>
#include <init_param.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
void sig_handler(int signum) {
INIT_LOGI("Requesting param service to stop...");
ParamServiceAsyncStopRequest();
}
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);
}
ret = LoadPersistParams();
if (ret) {
INIT_LOGE("Failed to load persist params! Error code: %d", ret);
}
struct sigaction action = { 0 };
action.sa_handler = sig_handler;
sigaction(SIGTERM, &action, NULL);
sigaction(SIGINT, &action, NULL);
sigaction(SIGHUP, &action, NULL);
// Following call spins up libuv event loop that will keep service running
INIT_LOGI("Starting param service...");
StartParamService();
INIT_LOGI("Param service stopped.");
return 0;
}