[Feature][T800]For WOM version, recover lynq_uci

Change-Id: Idef1ee621a70ee95e4bc8c1be5cf59ff7f29baff
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 eebe5f4..8fd2820 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
@@ -211,6 +211,7 @@
 	TARGET=${TOPDIR}/tmp/work/auto2735evb_ivt_main-poky-linux/mtk-image-2735/1.0-r0/rootfs
 	mkdir ${TARGET}/data_backup
 	cp ${TARGET}/etc/config/radio_property ${TARGET}/data_backup/
+	cp ${TARGET}/etc/config/lynq_uci ${TARGET}/data_backup/
         cp ${TARGET}/data/atsvc/lynq_atsvc_plugin.xml ${TARGET}/data_backup/
         cp ${TARGET}/data/atsvc/terminal_controller.conf ${TARGET}/data_backup/
 	cd ${SOURCE}
diff --git a/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover_wom b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover_wom
new file mode 100644
index 0000000..a46a3bf
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover_wom
@@ -0,0 +1,139 @@
+#!/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 /
+
+echo "$TAG: Before recover radio_property" > /dev/kmsg
+rm -rf /etc/config/.*.uci*
+cp /data_backup/radio_property /etc/config/radio_property
+cp /data_backup/lynq_uci /etc/config/lynq_uci
+mkdir -p /data/atsvc
+cp /data_backup/lynq_atsvc_plugin.xml /data/atsvc/lynq_atsvc_plugin.xml
+cp /data_backup/terminal_controller.conf /data/atsvc/terminal_controller.conf
+echo "$TAG: After recover radio_property" > /dev/kmsg
+
+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/init-2735_1.0.0.bb b/meta/meta-mediatek-mt2735/recipes-core/initial/init-2735_1.0.0.bb
index 25b963f..8d87332 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
@@ -11,6 +11,10 @@
 SRC_URI += "${@bb.utils.contains("MOBILETEK_OEMAPP_CFG", "PLATFORM", "file://init_mount_nand", "", d)}"
 SRC_URI += "${@bb.utils.contains("MOBILETEK_USB_CFG", "PLATFORM", "file://usb_switch", "", d)}"
 SRC_URI += "${@bb.utils.contains("MOBILETEK_USB_CFG", "GSW", "file://usb_switch_gsw", "", d)}"
+#xf.li@20230530 add for wom rndis start
+SRC_URI += "${@bb.utils.contains("MOBILETEK_RNDIS_CFG", "PLATFORM", "file://lynq_data_recover", "", d)}"
+SRC_URI += "${@bb.utils.contains("MOBILETEK_RNDIS_CFG", "WOM", "file://lynq_data_recover_wom", "", d)}"
+#xf.li@20230530 add for wom rndis end
 SRC_URI += "file://init_network.service"
 SRC_URI += "file://init_mount.service"
 SRC_URI += "file://nvram_daemon.service"
@@ -123,9 +127,15 @@
     if [ "${MOBILETEK_USB_CFG}" = "GSW" ]; then
         install -m 0755 init_usb_gsw ${D}${datadir}/init/init_usb
     fi
+#xf.li@20230530 add for wom rndis start
+    if [ "${MOBILETEK_RNDIS_CFG}" = "WOM" ]; then
+        install -m 0755 lynq_data_recover_wom ${D}${datadir}/init/lynq_data_recover
+    else
+        install -m 0755 lynq_data_recover ${D}${datadir}/init/lynq_data_recover
+    fi
+#xf.li@20230530 add for wom rndis end
     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