[Feature][T8TSK-93]Back up the userdata

Change-Id: I784118c7683c01a7d0d29b3f6171ba066a147d84
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount.service
index dc0e1fe..a622209 100644
--- a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount.service
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount.service
@@ -1,7 +1,8 @@
 [Unit]
 Description=Start MOUNT settings
 DefaultDependencies=no
-After=local-fs.target
+After=local-fs.target lynq_ubi1_wmtd.service lynq_data_recover.service
+Requires=local-fs.target lynq_ubi1_wmtd.service lynq_data_recover.service
 Before=sysinit.target systemd-tmpfiles-setup.service busybox-syslog.service
 
 [Service]
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_data_recover b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_data_recover
new file mode 100644
index 0000000..5abe947
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_data_recover
@@ -0,0 +1,129 @@
+#!/bin/busybox sh
+TAG=[DATA_BACKUP_RECOVER]
+echo "$TAG: === Initial: LYNQ MOUNT Abnomal Judge Start ===" > /dev/kmsg
+FilePath=/data/lynq-low-power.sh
+
+detect_read(){
+    a=1
+    while [ $a -le 3 ]
+    do
+        if [ -r "$FilePath" ]
+        then
+            echo "$TAG a=$a can read" > /dev/kmsg
+            return 0
+        else
+            echo "$TAG a=$a can't read" > /dev/kmsg
+        fi
+        a=$[$a+1]
+    done
+    return 1
+}
+detect_write(){
+    a=1
+    while [ $a -le 3 ]
+    do
+        if [ -w "$FilePath" ]
+        then
+            echo "$TAG a=$a can write" > /dev/kmsg
+            return 0
+        else
+        echo "$TAG a=$a can't write" > /dev/kmsg
+        fi
+            a=$[$a+1]
+    done
+    return 1
+}
+
+format_ubi(){
+    ubidetach -m 38
+    echo "$TAG detach over" > /dev/kmsg
+    echo y | ubiformat /dev/mtd38
+    echo "$TAG format over" > /dev/kmsg
+    ubiattach /dev/ubi_ctrl -m 38 -d 31
+    echo "$TAG attach over" > /dev/kmsg
+    ubimkvol /dev/ubi31 -m -N data_recover
+    echo "$TAG mkvol over" > /dev/kmsg
+    mount -t ubifs /dev/ubi31_0 /STATE
+}
+
+mount_read_only(){
+    echo "$TAG: umount start" > /dev/kmsg
+
+    umount /usr/lib/tmpfiles.d
+    umount /etc/firmware
+    umount /etc/syslog
+    umount /home
+    umount /mnt/sncfg
+    umount /mnt/vendor/nvram
+    umount /mnt 
+    umount /srv 
+    umount /usr/local 
+    umount /system/etc/firmware 
+    umount /custom/etc/firmware 
+    umount /var/lib 
+    umount /data
+    umount /system/etc/tele 
+    umount /system/etc/adr
+    umount /system/etc/agps 
+    umount /system/etc/security 
+    umount /etc/adr 
+    umount /etc/gnss
+    umount /usr/share/gps 
+    umount /etc/thermal 
+    umount /etc/config
+    umount /STATE
+
+    echo "$TAG: after umount" > /dev/kmsg
+    mount | grep "ubi1" > /dev/kmsg
+    #some directories are not umount
+    if [ $(mount | grep "ubi1") != "" ];
+        then echo "$TAG: umount Fail!" > /dev/kmsg
+        reboot
+        exit
+    fi
+    format_ubi
+
+}
+cd /
+IFRO="$(cat /sys/class/ubi/ubi1/ro_mode)"
+echo "$TAG the ro_mode:$IFRO" > /dev/kmsg
+
+echo "$TAG ubimount:" > /dev/kmsg
+echo "$(mount | grep "ubi1")" > /dev/kmsg
+#if ro_mode = 1, ubi1 in read-only mode
+if [ $IFRO = "1" ];
+    then echo "$TAG: [Read-Only]ubi1 ro_mode is readonly" > /dev/kmsg
+    mount_read_only
+    cd /data_backup
+    tar -zxvf userdata.tar.gz -C /STATE/
+    reboot
+else
+    detect_read
+    result_read=$?
+    detect_write
+    result_write=$?
+    #can't read the file, the file is lost
+    if [ $result_read -eq 1 ];
+        then echo "$TAG: File Lost!!!" > /dev/kmsg
+        exit
+    fi
+    #ubi1 is not in read-only mode, but no directory is mounted on ubi1
+    if [ $(mount | grep "ubi1") = ""];
+        then echo "$TAG: [Unmount]Unmount!!!" > /dev/kmsg
+        format_ubi
+        cd /data_backup
+        tar -zxvf userdata.tar.gz -C /STATE/
+        reboot
+    else
+        #ubi1 is not in read-only mode, directories mounted on ubi1, but the file can't write
+        #/data is mounted in read-only mode
+        if [ $result_write -eq 1 ];
+            then echo "$TAG: [Read-only]/data is Readonly!!!" > /dev/kmsg
+            mount_read_only
+            cd /data_backup
+            tar -zxvf userdata.tar.gz -C /STATE/
+            reboot
+        fi
+    fi
+fi
+echo "$TAG === Initial: LYNQ MOUNT Abnomal End ===" > /dev/kmsg
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_data_recover.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_data_recover.service
new file mode 100644
index 0000000..c17f83d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_data_recover.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=DATA recover
+DefaultDependencies=no
+After=local-fs.target
+Before=init_mount.service
+
+[Service]
+Type=oneshot
+StandardOutput=kmsg+console
+RemainAfterExit=yes
+ExecStart=/bin/sh /usr/share/init/lynq_data_recover
+
+
+[Install]
+WantedBy=sysinit.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_ubi1_wmtd b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_ubi1_wmtd
new file mode 100755
index 0000000..067dfa9
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_ubi1_wmtd
@@ -0,0 +1,27 @@
+#!/bin/busybox sh
+TAG=[DATA_BACKUP_RECOVER_WMTD]
+echo "$TAG === Initial: LYNQ MOUNT Abnomal Judge Format Start ===" > /dev/kmsg
+
+format_ubi(){
+    ubidetach -m 38
+    echo "$TAG detach over" > /dev/kmsg
+    echo y | ubiformat /dev/mtd38
+    echo "$TAG format over" > /dev/kmsg
+    ubiattach /dev/ubi_ctrl -m 38 -d 31
+    echo "$TAG attach over" > /dev/kmsg
+    ubimkvol /dev/ubi31 -m -N data_recover
+    echo "$TAG mkvol over" > /dev/kmsg
+    mount -t ubifs /dev/ubi31_0 /STATE
+}
+
+echo "$TAG ubi1_mtd_num : $(cat /sys/class/ubi/ubi1/mtd_num)" > /dev/kmsg
+#==================================WORNG MTD==============================================
+if [ $(cat /sys/class/ubi/ubi1/mtd_num) != "38" ];
+    then echo "$TAG WORNG MTD" > /dev/kmsg
+    format_ubi
+    cd /data_backup
+    tar -zxvf userdata.tar.gz -C /STATE/
+    reboot
+fi
+
+echo "$TAG === Initial: LYNQ MOUNT Abnomal End ===" > /dev/kmsg
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_ubi1_wmtd.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_ubi1_wmtd.service
new file mode 100644
index 0000000..aff1ff8
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/lynq_ubi1_wmtd.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=DATA recover
+DefaultDependencies=no
+Before=systemd-remount-fs.service
+
+[Service]
+Type=oneshot
+StandardOutput=kmsg+console
+RemainAfterExit=yes
+ExecStart=/bin/sh /usr/share/init/lynq_ubi1_wmtd
+
+
+[Install]
+WantedBy=sysinit.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/init-2735_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/init-2735_1.0.0.bb
index 06038ed..23096c1 100755
--- a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/init-2735_1.0.0.bb
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/init-2735_1.0.0.bb
@@ -25,6 +25,12 @@
 SRC_URI += "file://init_usb"
 SRC_URI += "file://init_usb.service"
 SRC_URI += "file://smp.sh"
+#xf.li 2022.11.17 modify for userdata recover start
+SRC_URI += "file://lynq_data_recover"
+SRC_URI += "file://lynq_ubi1_wmtd"
+SRC_URI += "file://lynq_data_recover.service"
+SRC_URI += "file://lynq_ubi1_wmtd.service"
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 delete for Slow loading of ETS port start
 #SRC_URI += "file://smp.rules"
 
@@ -41,6 +47,7 @@
 INSANE_SKIP_${PN} += "already-stripped"
 
 #dongyu@2022.7.15 delete (/etc/udev/rules.d/smp.rules)for Slow loading of ETS port start
+#xf.li 2022.11.17 modify for userdata recover start
 FILES_${PN} = "${datadir}/init/init_network \
                ${datadir}/init/init_mount \
                ${datadir}/init/usb_switch \
@@ -48,12 +55,16 @@
                ${datadir}/init/init_speech \
                ${datadir}/init/init_usb \
                ${datadir}/init/smp.sh \
+               ${datadir}/init/lynq_data_recover \
+               ${datadir}/init/lynq_ubi1_wmtd \
                ${@bb.utils.contains('BUILD_TYPE', 'user', ' ', ' ${datadir}/init/init_atci', d)}"
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 delete (/etc/udev/rules.d/smp.rules)for Slow loading of ETS port end
 
 inherit systemd
 
 #dongyu@2022.7.15 abb (init_smp.service) for Slow loading of ETS port start
+#xf.li 2022.11.17 modify for userdata recover start
 SYSTEMD_PACKAGES = "${PN}"
 SYSTEMD_SERVICE_${PN} = "init_network.service \
                          init_mount.service \
@@ -67,10 +78,14 @@
                          agps.service \
                          init_usb.service \
 			 init_smp.service \
+			 lynq_ubi1_wmtd.service \
+			 lynq_data_recover.service \
                          ${@bb.utils.contains('BUILD_TYPE', 'user', ' ', 'init_atci.service', d)}"
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 add (init_smp.service) for Slow loading of ETS port end
 
 #dongyu@2022.7.15 abb (${systemd_unitdir}/system/init_smp.service) for Slow loading of ETS port start
+#xf.li 2022.11.17 modify for userdata recover start
 FILES_${PN} += "${systemd_unitdir}/system/init_network.service \
                 ${systemd_unitdir}/system/init_mount.service \
                 ${systemd_unitdir}/system/nvram_daemon.service \
@@ -83,7 +98,10 @@
                 ${systemd_unitdir}/system/agps.service \
                 ${systemd_unitdir}/system/init_usb.service \
 		${systemd_unitdir}/system/init_smp.service \
+		${systemd_unitdir}/system/lynq_ubi1_wmtd.service \
+		${systemd_unitdir}/system/lynq_data_recover.service \
                 ${@bb.utils.contains('BUILD_TYPE', 'user', ' ', ' ${systemd_unitdir}/system/init_atci.service', d)}"
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 add (${systemd_unitdir}/system/init_smp.service) for Slow loading of ETS port end
 
 do_install_append() {
@@ -93,7 +111,10 @@
     install -m 0755 init_speech ${D}${datadir}/init/init_speech
     install -m 0755 init_usb ${D}${datadir}/init/init_usb
     install -m 0755 smp.sh ${D}${datadir}/init/smp.sh
-
+#xf.li 2022.11.17 modify for userdata recover start
+    install -m 0755 lynq_data_recover ${D}${datadir}/init/lynq_data_recover
+    install -m 0755 lynq_ubi1_wmtd ${D}${datadir}/init/lynq_ubi1_wmtd
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 delete for Slow loading of ETS port start
     #install -d ${D}/etc/udev/rules.d/
     #install -m 0755 smp.rules ${D}/etc/udev/rules.d/smp.rules
@@ -124,6 +145,10 @@
         install -m 0644 thermal_core.service ${D}${systemd_unitdir}/system
         install -m 0644 agps.service ${D}${systemd_unitdir}/system
         install -m 0644 init_usb.service ${D}${systemd_unitdir}/system
+#xf.li 2022.11.17 modify for userdata recover start
+        install -m 0644 lynq_data_recover.service ${D}${systemd_unitdir}/system
+        install -m 0644 lynq_ubi1_wmtd.service ${D}${systemd_unitdir}/system
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 abb for Slow loading of ETS port start
 	install -m 0644 init_smp.service ${D}${systemd_unitdir}/system
 #dongyu@2022.7.15 add for Slow loading of ETS port end
diff --git a/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb b/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb
index f55d0c9..1310394 100755
--- a/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb
+++ b/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb
@@ -203,5 +203,16 @@
        echo "${NATA_SERIAL_NUMBER}" >> ${IMAGE_ROOTFS}/sdcard/nata_serial.txt
 }
 ROOTFS_POSTPROCESS_COMMAND += " gen_feature_property;"
+#xf.li 2022.11.17 modify for userdata recover start
+do_packdata() {
+	origin=$(pwd)
+	SOURCE=$(pwd)/build/tmp/deploy/images/auto2735evb-ivt-main/state
+	TARGET=$(pwd)/build/tmp/work/auto2735evb_ivt_main-poky-linux/mtk-image-2735/1.0-r0/rootfs
+	mkdir ${TARGET}/data_backup
+	cd ${SOURCE}
+	tar -czvf ${TARGET}/data_backup/userdata.tar.gz *
+}
 
+addtask packdata after do_rootfs before do_gensdk
+#xf.li 2022.11.17 modify for userdata recover end
 addtask modem_align_4kb after do_image_complete before do_build
diff --git a/meta/meta-mediatek-mt2735/recipes-core/initial/files/init_mount.service b/meta/meta-mediatek-mt2735/recipes-core/initial/files/init_mount.service
index dc0e1fe..a622209 100644
--- a/meta/meta-mediatek-mt2735/recipes-core/initial/files/init_mount.service
+++ b/meta/meta-mediatek-mt2735/recipes-core/initial/files/init_mount.service
@@ -1,7 +1,8 @@
 [Unit]
 Description=Start MOUNT settings
 DefaultDependencies=no
-After=local-fs.target
+After=local-fs.target lynq_ubi1_wmtd.service lynq_data_recover.service
+Requires=local-fs.target lynq_ubi1_wmtd.service lynq_data_recover.service
 Before=sysinit.target systemd-tmpfiles-setup.service busybox-syslog.service
 
 [Service]
diff --git a/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover
new file mode 100644
index 0000000..5abe947
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover
@@ -0,0 +1,129 @@
+#!/bin/busybox sh
+TAG=[DATA_BACKUP_RECOVER]
+echo "$TAG: === Initial: LYNQ MOUNT Abnomal Judge Start ===" > /dev/kmsg
+FilePath=/data/lynq-low-power.sh
+
+detect_read(){
+    a=1
+    while [ $a -le 3 ]
+    do
+        if [ -r "$FilePath" ]
+        then
+            echo "$TAG a=$a can read" > /dev/kmsg
+            return 0
+        else
+            echo "$TAG a=$a can't read" > /dev/kmsg
+        fi
+        a=$[$a+1]
+    done
+    return 1
+}
+detect_write(){
+    a=1
+    while [ $a -le 3 ]
+    do
+        if [ -w "$FilePath" ]
+        then
+            echo "$TAG a=$a can write" > /dev/kmsg
+            return 0
+        else
+        echo "$TAG a=$a can't write" > /dev/kmsg
+        fi
+            a=$[$a+1]
+    done
+    return 1
+}
+
+format_ubi(){
+    ubidetach -m 38
+    echo "$TAG detach over" > /dev/kmsg
+    echo y | ubiformat /dev/mtd38
+    echo "$TAG format over" > /dev/kmsg
+    ubiattach /dev/ubi_ctrl -m 38 -d 31
+    echo "$TAG attach over" > /dev/kmsg
+    ubimkvol /dev/ubi31 -m -N data_recover
+    echo "$TAG mkvol over" > /dev/kmsg
+    mount -t ubifs /dev/ubi31_0 /STATE
+}
+
+mount_read_only(){
+    echo "$TAG: umount start" > /dev/kmsg
+
+    umount /usr/lib/tmpfiles.d
+    umount /etc/firmware
+    umount /etc/syslog
+    umount /home
+    umount /mnt/sncfg
+    umount /mnt/vendor/nvram
+    umount /mnt 
+    umount /srv 
+    umount /usr/local 
+    umount /system/etc/firmware 
+    umount /custom/etc/firmware 
+    umount /var/lib 
+    umount /data
+    umount /system/etc/tele 
+    umount /system/etc/adr
+    umount /system/etc/agps 
+    umount /system/etc/security 
+    umount /etc/adr 
+    umount /etc/gnss
+    umount /usr/share/gps 
+    umount /etc/thermal 
+    umount /etc/config
+    umount /STATE
+
+    echo "$TAG: after umount" > /dev/kmsg
+    mount | grep "ubi1" > /dev/kmsg
+    #some directories are not umount
+    if [ $(mount | grep "ubi1") != "" ];
+        then echo "$TAG: umount Fail!" > /dev/kmsg
+        reboot
+        exit
+    fi
+    format_ubi
+
+}
+cd /
+IFRO="$(cat /sys/class/ubi/ubi1/ro_mode)"
+echo "$TAG the ro_mode:$IFRO" > /dev/kmsg
+
+echo "$TAG ubimount:" > /dev/kmsg
+echo "$(mount | grep "ubi1")" > /dev/kmsg
+#if ro_mode = 1, ubi1 in read-only mode
+if [ $IFRO = "1" ];
+    then echo "$TAG: [Read-Only]ubi1 ro_mode is readonly" > /dev/kmsg
+    mount_read_only
+    cd /data_backup
+    tar -zxvf userdata.tar.gz -C /STATE/
+    reboot
+else
+    detect_read
+    result_read=$?
+    detect_write
+    result_write=$?
+    #can't read the file, the file is lost
+    if [ $result_read -eq 1 ];
+        then echo "$TAG: File Lost!!!" > /dev/kmsg
+        exit
+    fi
+    #ubi1 is not in read-only mode, but no directory is mounted on ubi1
+    if [ $(mount | grep "ubi1") = ""];
+        then echo "$TAG: [Unmount]Unmount!!!" > /dev/kmsg
+        format_ubi
+        cd /data_backup
+        tar -zxvf userdata.tar.gz -C /STATE/
+        reboot
+    else
+        #ubi1 is not in read-only mode, directories mounted on ubi1, but the file can't write
+        #/data is mounted in read-only mode
+        if [ $result_write -eq 1 ];
+            then echo "$TAG: [Read-only]/data is Readonly!!!" > /dev/kmsg
+            mount_read_only
+            cd /data_backup
+            tar -zxvf userdata.tar.gz -C /STATE/
+            reboot
+        fi
+    fi
+fi
+echo "$TAG === Initial: LYNQ MOUNT Abnomal End ===" > /dev/kmsg
diff --git a/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover.service b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover.service
new file mode 100644
index 0000000..c17f83d
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=DATA recover
+DefaultDependencies=no
+After=local-fs.target
+Before=init_mount.service
+
+[Service]
+Type=oneshot
+StandardOutput=kmsg+console
+RemainAfterExit=yes
+ExecStart=/bin/sh /usr/share/init/lynq_data_recover
+
+
+[Install]
+WantedBy=sysinit.target
diff --git a/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_ubi1_wmtd b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_ubi1_wmtd
new file mode 100755
index 0000000..067dfa9
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_ubi1_wmtd
@@ -0,0 +1,27 @@
+#!/bin/busybox sh
+TAG=[DATA_BACKUP_RECOVER_WMTD]
+echo "$TAG === Initial: LYNQ MOUNT Abnomal Judge Format Start ===" > /dev/kmsg
+
+format_ubi(){
+    ubidetach -m 38
+    echo "$TAG detach over" > /dev/kmsg
+    echo y | ubiformat /dev/mtd38
+    echo "$TAG format over" > /dev/kmsg
+    ubiattach /dev/ubi_ctrl -m 38 -d 31
+    echo "$TAG attach over" > /dev/kmsg
+    ubimkvol /dev/ubi31 -m -N data_recover
+    echo "$TAG mkvol over" > /dev/kmsg
+    mount -t ubifs /dev/ubi31_0 /STATE
+}
+
+echo "$TAG ubi1_mtd_num : $(cat /sys/class/ubi/ubi1/mtd_num)" > /dev/kmsg
+#==================================WORNG MTD==============================================
+if [ $(cat /sys/class/ubi/ubi1/mtd_num) != "38" ];
+    then echo "$TAG WORNG MTD" > /dev/kmsg
+    format_ubi
+    cd /data_backup
+    tar -zxvf userdata.tar.gz -C /STATE/
+    reboot
+fi
+
+echo "$TAG === Initial: LYNQ MOUNT Abnomal End ===" > /dev/kmsg
diff --git a/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_ubi1_wmtd.service b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_ubi1_wmtd.service
new file mode 100644
index 0000000..aff1ff8
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_ubi1_wmtd.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=DATA recover
+DefaultDependencies=no
+Before=systemd-remount-fs.service
+
+[Service]
+Type=oneshot
+StandardOutput=kmsg+console
+RemainAfterExit=yes
+ExecStart=/bin/sh /usr/share/init/lynq_ubi1_wmtd
+
+
+[Install]
+WantedBy=sysinit.target
diff --git a/meta/meta-mediatek-mt2735/recipes-core/initial/init-2735_1.0.0.bb b/meta/meta-mediatek-mt2735/recipes-core/initial/init-2735_1.0.0.bb
index 06038ed..23096c1 100755
--- a/meta/meta-mediatek-mt2735/recipes-core/initial/init-2735_1.0.0.bb
+++ b/meta/meta-mediatek-mt2735/recipes-core/initial/init-2735_1.0.0.bb
@@ -25,6 +25,12 @@
 SRC_URI += "file://init_usb"
 SRC_URI += "file://init_usb.service"
 SRC_URI += "file://smp.sh"
+#xf.li 2022.11.17 modify for userdata recover start
+SRC_URI += "file://lynq_data_recover"
+SRC_URI += "file://lynq_ubi1_wmtd"
+SRC_URI += "file://lynq_data_recover.service"
+SRC_URI += "file://lynq_ubi1_wmtd.service"
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 delete for Slow loading of ETS port start
 #SRC_URI += "file://smp.rules"
 
@@ -41,6 +47,7 @@
 INSANE_SKIP_${PN} += "already-stripped"
 
 #dongyu@2022.7.15 delete (/etc/udev/rules.d/smp.rules)for Slow loading of ETS port start
+#xf.li 2022.11.17 modify for userdata recover start
 FILES_${PN} = "${datadir}/init/init_network \
                ${datadir}/init/init_mount \
                ${datadir}/init/usb_switch \
@@ -48,12 +55,16 @@
                ${datadir}/init/init_speech \
                ${datadir}/init/init_usb \
                ${datadir}/init/smp.sh \
+               ${datadir}/init/lynq_data_recover \
+               ${datadir}/init/lynq_ubi1_wmtd \
                ${@bb.utils.contains('BUILD_TYPE', 'user', ' ', ' ${datadir}/init/init_atci', d)}"
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 delete (/etc/udev/rules.d/smp.rules)for Slow loading of ETS port end
 
 inherit systemd
 
 #dongyu@2022.7.15 abb (init_smp.service) for Slow loading of ETS port start
+#xf.li 2022.11.17 modify for userdata recover start
 SYSTEMD_PACKAGES = "${PN}"
 SYSTEMD_SERVICE_${PN} = "init_network.service \
                          init_mount.service \
@@ -67,10 +78,14 @@
                          agps.service \
                          init_usb.service \
 			 init_smp.service \
+			 lynq_ubi1_wmtd.service \
+			 lynq_data_recover.service \
                          ${@bb.utils.contains('BUILD_TYPE', 'user', ' ', 'init_atci.service', d)}"
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 add (init_smp.service) for Slow loading of ETS port end
 
 #dongyu@2022.7.15 abb (${systemd_unitdir}/system/init_smp.service) for Slow loading of ETS port start
+#xf.li 2022.11.17 modify for userdata recover start
 FILES_${PN} += "${systemd_unitdir}/system/init_network.service \
                 ${systemd_unitdir}/system/init_mount.service \
                 ${systemd_unitdir}/system/nvram_daemon.service \
@@ -83,7 +98,10 @@
                 ${systemd_unitdir}/system/agps.service \
                 ${systemd_unitdir}/system/init_usb.service \
 		${systemd_unitdir}/system/init_smp.service \
+		${systemd_unitdir}/system/lynq_ubi1_wmtd.service \
+		${systemd_unitdir}/system/lynq_data_recover.service \
                 ${@bb.utils.contains('BUILD_TYPE', 'user', ' ', ' ${systemd_unitdir}/system/init_atci.service', d)}"
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 add (${systemd_unitdir}/system/init_smp.service) for Slow loading of ETS port end
 
 do_install_append() {
@@ -93,7 +111,10 @@
     install -m 0755 init_speech ${D}${datadir}/init/init_speech
     install -m 0755 init_usb ${D}${datadir}/init/init_usb
     install -m 0755 smp.sh ${D}${datadir}/init/smp.sh
-
+#xf.li 2022.11.17 modify for userdata recover start
+    install -m 0755 lynq_data_recover ${D}${datadir}/init/lynq_data_recover
+    install -m 0755 lynq_ubi1_wmtd ${D}${datadir}/init/lynq_ubi1_wmtd
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 delete for Slow loading of ETS port start
     #install -d ${D}/etc/udev/rules.d/
     #install -m 0755 smp.rules ${D}/etc/udev/rules.d/smp.rules
@@ -124,6 +145,10 @@
         install -m 0644 thermal_core.service ${D}${systemd_unitdir}/system
         install -m 0644 agps.service ${D}${systemd_unitdir}/system
         install -m 0644 init_usb.service ${D}${systemd_unitdir}/system
+#xf.li 2022.11.17 modify for userdata recover start
+        install -m 0644 lynq_data_recover.service ${D}${systemd_unitdir}/system
+        install -m 0644 lynq_ubi1_wmtd.service ${D}${systemd_unitdir}/system
+#xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 abb for Slow loading of ETS port start
 	install -m 0644 init_smp.service ${D}${systemd_unitdir}/system
 #dongyu@2022.7.15 add for Slow loading of ETS port end