diff --git a/recipes-openharmony/openharmony/files/openharmony-preinit b/recipes-openharmony/openharmony/files/openharmony-preinit
new file mode 100644
index 0000000000000000000000000000000000000000..9501a150d36a260b01d1493ac7aa3efec7832524
--- /dev/null
+++ b/recipes-openharmony/openharmony/files/openharmony-preinit
@@ -0,0 +1,84 @@
+# SPDX-FileCopyrightText: Huawei Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+#!/bin/sh
+
+mkdir -p /data/backup
+mkdir -p /data/bootchart
+mkdir -p /data/cache
+mkdir -p /data/cache/backup
+mkdir -p /data/cache/backup_stage
+mkdir -p /data/cache/recovery
+mkdir -p /data/data/.pulse_dir
+mkdir -p /data/dhcp
+mkdir -p /data/drm
+mkdir -p /data/local/tmp
+mkdir -p /data/local/traces
+mkdir -p /data/lost
+mkdir -p /data/mediadrm
+mkdir -p /data/media/obb
+mkdir -p /data/misc/apns
+mkdir -p /data/misc/audioserver
+mkdir -p /data/misc/bluedroid
+mkdir -p /data/misc/bluetooth/logs
+mkdir -p /data/misc/boottrace
+mkdir -p /data/misc/cameraserver
+mkdir -p /data/misc/carrierid
+mkdir -p /data/misc_ce
+mkdir -p /data/misc_de
+mkdir -p /data/misc/dhcp
+mkdir -p /data/misc/ethernet
+mkdir -p /data/misc/gatekeeper
+mkdir -p /data/misc/gcov
+mkdir -p /data/misc/keychain
+mkdir -p /data/misc/keystore
+mkdir -p /data/misc/media
+mkdir -p /data/misc/net
+mkdir -p /data/misc/network_watchlist
+mkdir -p /data/misc/perfprofd
+mkdir -p /data/misc/profiles/cur
+mkdir -p /data/misc/profiles/ref
+mkdir -p /data/misc/profman
+mkdir -p /data/misc/radio
+mkdir -p /data/misc/recovery/proc
+mkdir -p /data/misc/shared_relro
+mkdir -p /data/misc/sms
+mkdir -p /data/misc/systemkeys
+mkdir -p /data/misc/textclassifier
+mkdir -p /data/misc/trace
+mkdir -p /data/misc/update_engine
+mkdir -p /data/misc/update_engine_log
+mkdir -p /data/misc/user
+mkdir -p /data/misc/vold
+mkdir -p /data/misc/vpn
+mkdir -p /data/misc/wifi/sockets
+mkdir -p /data/misc/wifi/wpa_supplicant
+mkdir -p /data/misc/wmtrace
+mkdir -p /data/misc/zoneinfo
+mkdir -p /data/nfc/param
+mkdir -p /data/ota
+mkdir -p /data/ota_package
+mkdir -p /data/preloads
+mkdir -p /data/resourcefoundation.xml
+mkdir -p /data/ss
+mkdir -p /data/system_ce
+mkdir -p /data/system_de
+mkdir -p /data/system/dropbox
+mkdir -p /data/system/heapdump
+mkdir -p /data/system/users
+mkdir -p /data/user
+mkdir -p /data/user_de
+mkdir -p /data/vendor_ce
+mkdir -p /data/vendor_de
+mkdir -p /data/vendor/hardware
+mkdir -p /data/weston
+mkdir -p /usr/lib/dri
+
+# /dev/binder needs to be rw for all users
+chmod 666 /dev/binder
+
+# /dev/dri/card0 needs to be rw for all users
+if [ -c /dev/dri/card0 ]; then
+	chmod 666 /dev/dri/card0
+fi
diff --git a/recipes-openharmony/openharmony/files/openharmony-preinit.service b/recipes-openharmony/openharmony/files/openharmony-preinit.service
new file mode 100644
index 0000000000000000000000000000000000000000..873db0daf2c3f59ade21ac51709cc688722762e5
--- /dev/null
+++ b/recipes-openharmony/openharmony/files/openharmony-preinit.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=OpenHarmony pre-init setup
+
+[Service]
+Type=oneshot
+ExecStart=/bin/sh /usr/sbin/openharmony-preinit
+
+[Install]
+WantedBy=multi-user.target
diff --git a/recipes-openharmony/openharmony/files/openharmony-preinit.service.license b/recipes-openharmony/openharmony/files/openharmony-preinit.service.license
new file mode 100644
index 0000000000000000000000000000000000000000..98a0b3f4a5b8db268215a128c7d06e0a10897e73
--- /dev/null
+++ b/recipes-openharmony/openharmony/files/openharmony-preinit.service.license
@@ -0,0 +1,3 @@
+# SPDX-FileCopyrightText: Huawei Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
diff --git a/recipes-openharmony/openharmony/openharmony-standard_3.0.bb b/recipes-openharmony/openharmony/openharmony-standard_3.0.bb
index 6f6bece3b9cd5dee91d504ddc938038224df47cd..e66ae5486f44cbb3d8306ddeae4c4a57dbab5651 100644
--- a/recipes-openharmony/openharmony/openharmony-standard_3.0.bb
+++ b/recipes-openharmony/openharmony/openharmony-standard_3.0.bb
@@ -347,6 +347,24 @@ copy_subsystem_config_json_file() {
 inherit systemd
 SYSTEMD_AUTO_ENABLE = "enable"
 
+# OpenHarmony pre-init package and its systemd service
+# Used to create folders needed by OH services and components
+PACKAGES =+ "${PN}-openharmony-preinit"
+SYSTEMD_PACKAGES = "${PN}-openharmony-preinit"
+SYSTEMD_SERVICE:${PN}-openharmony-preinit = "openharmony-preinit.service"
+FILES:${PN}-openharmony-preinit = " \
+    ${libdir}/openharmony-preinit \
+"
+SRC_URI += "file://openharmony-preinit file://openharmony-preinit.service"
+do_install:append() {
+    install -d ${D}/${sbindir}
+    install -m 755 ${WORKDIR}/openharmony-preinit ${D}/${sbindir}
+
+    install -d ${D}/${systemd_unitdir}/system
+    install -m 644 ${WORKDIR}/openharmony-preinit.service ${D}${systemd_unitdir}/system/
+}
+RDEPENDS:${PN} += "${PN}-openharmony-preinit"
+
 # //utils/native component
 PACKAGES =+ "${PN}-libutilsecurec ${PN}-libutils"
 FILES:${PN}-libutilsecurec = "${libdir}/libutilsecurec*${SOLIBS}"
@@ -370,7 +388,7 @@ RDEPENDS:${PN}-ptest += "${PN}-libutils-ptest"
 
 # //base/hiviewdfx/hilog component
 PACKAGES =+ "${PN}-hilog"
-SYSTEMD_PACKAGES = "${PN}-hilog"
+SYSTEMD_PACKAGES += "${PN}-hilog"
 SYSTEMD_SERVICE:${PN}-hilog = "hilogd.service"
 SRC_URI += "file://hilogd.service"
 do_install:append() {