diff --git a/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service-Add-to-build-system.patch b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service-Add-to-build-system.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a0cd282f4d45220d3c1bd9ac90f7b6983fd05228
--- /dev/null
+++ b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service-Add-to-build-system.patch
@@ -0,0 +1,110 @@
+# 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;
+ }
+ 
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..1160f798c69f2de0e8e561792b22cea6ef57f513
--- /dev/null
+++ b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service-Add-to-startup-l2-part.patch
@@ -0,0 +1,31 @@
+# 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": [
+           {
diff --git a/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service.c-Fix-stopping-param_service.patch b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service.c-Fix-stopping-param_service.patch
new file mode 100644
index 0000000000000000000000000000000000000000..77a7cb1a2ffd4a4db8e473b39694d030eff713b9
--- /dev/null
+++ b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service.c-Fix-stopping-param_service.patch
@@ -0,0 +1,74 @@
+# 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 接口
+  * 加载默认的参数值
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..5cd2a6c2cff59b6b09ddb756e9561c9d841b6332
--- /dev/null
+++ b/recipes-openharmony/openharmony/openharmony-standard-3.0/param_service_main.c
@@ -0,0 +1,66 @@
+/*
+ * 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;
+}
diff --git a/recipes-openharmony/openharmony/openharmony-standard_3.0.bb b/recipes-openharmony/openharmony/openharmony-standard_3.0.bb
index 1f8aaf1702c018d55c80ea799d0716d45f7aa03f..137d993e8b3913795d8009966456e21a873f0495 100644
--- a/recipes-openharmony/openharmony/openharmony-standard_3.0.bb
+++ b/recipes-openharmony/openharmony/openharmony-standard_3.0.bb
@@ -61,6 +61,11 @@ SRC_URI += "file://appspawn-procps.patch;patchdir=${S}/base/startup/appspawn_sta
 SRC_URI += "file://base_startup_appspawn_standard-disable-longProcName-resetting.patch;patchdir=${S}/base/startup/appspawn_standard"
 SRC_URI += "file://test_xts_acts-Align-tests-list-with-mandatory-set.patch;patchdir=${S}/test/xts/acts"
 
+SRC_URI += "file://param_service_main.c;subdir=${S}/base/startup/init_lite/services/param/src"
+SRC_URI += "file://param_service-Add-to-build-system.patch;patchdir=${S}/base/startup/init_lite"
+SRC_URI += "file://param_service.c-Fix-stopping-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"