ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/target/linux/mmp/image/Makefile b/target/linux/mmp/image/Makefile
new file mode 100644
index 0000000..bcbcf2b
--- /dev/null
+++ b/target/linux/mmp/image/Makefile
@@ -0,0 +1,831 @@
+#
+# Copyright (C) 2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/image.mk
+
+ZIMAGE:=$(BIN_DIR)/$(IMG_PREFIX)-zImage
+
+#CAUTION: be careful to modify MRVL_VERSION string, it's used in fota to compare versions
+ifneq ($(shell echo ${BUILD_NUMBER}),)
+MRVL_VERSION:=OW24.10_$(ARCH_PROFILE)_rls$(shell cat ./version.asr)_$(shell cat $(BIN_DIR)/swd/LWG_version.txt)_$(shell date +"%Y%m%d_%H_%M")_bld$(shell echo ${BUILD_NUMBER})_SDK$(shell cat ./version.ext)
+else
+MRVL_VERSION:=OW24.10_$(ARCH_PROFILE)_rls$(shell cat ./version.asr)_$(shell cat $(BIN_DIR)/swd/LWG_version.txt)_$(shell date +"%Y%m%d_%H_%M")_SDK$(shell cat ./version.ext)
+endif
+
+ifeq ($(CONFIG_AB_SYSTEM),y)
+	AB_SYSTEM:="1"
+else
+	AB_SYSTEM:="0"
+endif
+
+ifeq ($(CONFIG_DSDS), y)
+	MRVL_VERSION:=$(MRVL_VERSION)_dsds
+endif
+
+# TODO: make below variable global
+NAND_BLOCKSIZE:=131072
+NAND_PAGESIZE:=2048
+
+# MAKE ubi/uibifs for oem_data:
+# only need to change OEM_PART_SIZE
+#
+# OEM_UBIFS_BLOCKS:
+#    total amount of logical eraseblocks minus 4, two for internal Volume,
+#    one for Wear-leveling, one for Scrubbing.
+#
+# Also can add profile-specific settings here like below
+# FACT301_OEM_UBIFS_OPTS:=-m 2048 -e 126976 -c 51 -F
+# FACT301_OEM_UBI_OPTS:="-m 2048 -p 128KiB -s 2048"
+#
+ifeq ($(CONFIG_ASR_SDTIM),y)
+  # SDTIM use 7MB parition for oem_data, one block reserved for sdtim header
+  OEM_PART_SIZE:=7340032 # in bytes
+  OEM_UBIFS_BLOCKS:=$(shell echo $$(($(OEM_PART_SIZE)/$(NAND_BLOCKSIZE)-4-1)))
+else
+  # Default size of OEM data parition is 6MB.
+  OEM_PART_SIZE:=6291456 # in bytes
+  OEM_UBIFS_BLOCKS:=$(shell echo $$(($(OEM_PART_SIZE)/$(NAND_BLOCKSIZE)-4)))
+endif
+UBI_CONF_FILE:=ubinize-oem.cfg
+OEM_UBIFS_ERASE:=$(shell echo $$(($(NAND_BLOCKSIZE)-2*$(NAND_PAGESIZE))))
+OEM_UBIFS_OPTS:=-m $(NAND_PAGESIZE) -e $(OEM_UBIFS_ERASE) -c $(OEM_UBIFS_BLOCKS) -F
+OEM_UBI_OPTS:=-m $(NAND_PAGESIZE) -p $(NAND_BLOCKSIZE) -s $(NAND_PAGESIZE)
+OEM_UBI_VOL_SIZE:=$(shell echo $$(($(OEM_UBIFS_BLOCKS)*$(OEM_UBIFS_ERASE)/1024)))KiB
+
+define Image/Prepare
+# NAND and SPI-NAND use ubifs mount root,first line can't be if sentence
+ifneq  ($(PROFILE),$(filter $(PROFILE), FALCON403 LAPW503))
+	# Use symbolic permissions to avoid clobbering SUID/SGID/sticky bits
+	- $(FIND) $(TARGET_DIR) -type f -not -perm /0100 -not -name 'ssh_host*' -not -name 'shadow' -print0 | $(XARGS) -0 chmod u+rw,g+r,o+r
+	- $(FIND) $(TARGET_DIR) -type f -perm /0100 -print0 | $(XARGS) -0 chmod u+rwx,g+rx,o+rx
+	- $(FIND) $(TARGET_DIR) -type d -print0 | $(XARGS) -0 chmod u+rwx,g+rx,o+rx
+	$(INSTALL_DIR) $(TARGET_DIR)/tmp
+	chmod 1777 $(TARGET_DIR)/tmp
+
+	@if [ -e $(TARGET_DIR)/sbin/jffs2reset_mmp ]; then \
+		rm -f $(TARGET_DIR)/sbin/jffs2reset; \
+		mv $(TARGET_DIR)/sbin/jffs2reset_mmp $(TARGET_DIR)/sbin/jffs2reset; \
+	fi
+
+	mv $(TARGET_DIR)/sbin/80_mount_root $(TARGET_DIR)/lib/preinit/80_mount_root || true
+endif
+
+ifneq  ($(PROFILE),$(filter $(PROFILE), FALCON403 LAPW503))
+	mkdir -p $(TARGET_DIR)/data
+	mkdir -p $(TARGET_DIR)/log
+	mkdir -p $(TARGET_DIR)/sdcard
+	mkdir -p $(TARGET_DIR)/overlay/etc
+	mkdir -p $(TARGET_DIR)/overlay/nvm
+	mkdir -p $(TARGET_DIR)/NVM/oem_data
+	#below is to prepare the image version info.
+	mkdir -p $(TARGET_DIR)/etc
+endif
+	rm -rf $(TARGET_DIR)/usr/lib/opkg/
+ifeq  ($(PROFILE),$(filter $(PROFILE), FALCON403 LAPW503))
+	mkdir -p $(TARGET_DIR)/sysdata
+
+	rm -f $(TARGET_DIR)/usr/sbin/ubi*;
+	rm -f $(TARGET_DIR)/usr/bin/usign;
+	rm -rf $(TARGET_DIR)/lib/upgrade/
+	rm -f $(TARGET_DIR)/sbin/snapshot;
+	rm -f $(TARGET_DIR)/sbin/snapshot_tool;
+	rm -f $(TARGET_DIR)/sbin/run_ims.sh;
+	rm -f $(TARGET_DIR)/sbin/stresstest.sh;
+	rm -f $(TARGET_DIR)/sbin/switch2jffs;
+	rm -f $(TARGET_DIR)/bin/ims_test;
+	rm -f $(TARGET_DIR)/bin/aestest;
+	rm -f $(TARGET_DIR)/bin/fs_test;
+	rm -f $(TARGET_DIR)/bin/oom_kill_test;
+	rm -f $(TARGET_DIR)/bin/mipsram_extract;
+	rm -f $(TARGET_DIR)/bin/eeh_HowToConfig.txt;
+	rm -f $(TARGET_DIR)/bin/ftd;
+	rm -f $(TARGET_DIR)/bin/hwacc;
+	rm -f $(TARGET_DIR)/bin/mnv_encrypt
+	rm -f $(TARGET_DIR)/sbin/sysupgrade;
+	rm -f $(TARGET_DIR)/sbin/mrvl_init_aquila;
+	rm -rf $(TARGET_DIR)/etc/hotplug.d/ethernet;
+	rm -rf $(TARGET_DIR)/etc/opkg;
+	rm -f $(TARGET_DIR)/usr/lib/libxml2.so.2.9.14;
+	rm -f $(TARGET_DIR)/lib/libwtpsp-1.1.so;
+	rm -f $(TARGET_DIR)/lib/libwtpsp_ss.so;
+	rm -f $(TARGET_DIR)/lib/preinit/81_mount_ubifs_overlay;
+	rm -f $(TARGET_DIR)/lib/preinit/30_failsafe_wait;
+	rm -f $(TARGET_DIR)/lib/preinit/40_run_failsafe_hook;
+	rm -f $(TARGET_DIR)/lib/preinit/70_initramfs_test;
+	rm -f $(TARGET_DIR)/lib/preinit/99_10_failsafe_login;
+	rm -f $(TARGET_DIR)/sbin/80_mount_root;
+	rm -f $(TARGET_DIR)/sbin/jffs2reset_mmp;
+	rm -f $(TARGET_DIR)/etc/ssl/certs/ca-certificates.crt;
+	rm -f $(TARGET_DIR)/sbin/upgraded;
+ifeq ($(CONFIG_PACKAGE_libmbedtls),y)
+	mv $(TARGET_DIR)/usr/lib/libmbedcrypto.so.3.6.2 $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libmbedtls.so.3.6.2 $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libmbedx509.so.3.6.2 $(TARGET_DIR)/sysdata || true
+endif
+ifeq ($(CONFIG_PACKAGE_lighttpd-mod-mbedtls),y)
+	mv $(TARGET_DIR)/usr/lib/libpcre2-8.so.0.10.1 $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libhogweed.so.6.0 $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libnettle.so.8.0 $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libgmp.so.10.4.1 $(TARGET_DIR)/sysdata || true
+endif
+	mv $(TARGET_DIR)/usr/lib/libuClibc++-0.2.5.so $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libiptext.so  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libz.so.1.3.1  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libmxml.so.1.5  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libxtables.so.12.4.0  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libiptext4.so  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libiptext6.so  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libcgi.so  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libnl-tiny.so.1  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libml_utils.so  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libip4tc.so.2.0.0  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libip6tc.so.2.0.0  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/liblog.so  $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/lib/libucode.so.20230711  $(TARGET_DIR)/sysdata || true
+
+	mv $(TARGET_DIR)/usr/bin/adbd $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/bin/xml_action.cgi $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/bin/jsonfilter $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/bin/ucode $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/lighttpd $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/pppd $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/dnsmasq $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/odhcpd $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/odhcp6c $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/xtables-multi $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/iw $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/xtables-legacy-multi $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/iwconfig $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/chat $(TARGET_DIR)/sysdata || true
+
+	mv $(TARGET_DIR)/sbin/fw3 $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/sbin/netifd $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/sbin/mtd $(TARGET_DIR)/sysdata || true
+ifeq ($(CONFIG_PACKAGE_realtek-app),y)
+	mv $(TARGET_DIR)/bin/auth $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/bin/iwcontrol $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/bin/UDPserver $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/bin/iwpriv $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/bin/wscd $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/bin/webs $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/bin/flash $(TARGET_DIR)/sysdata || true
+endif
+ifeq ($(CONFIG_PACKAGE_hostapd-common),y)
+	mv $(TARGET_DIR)/usr/sbin/hostapd $(TARGET_DIR)/sysdata || true
+	mv $(TARGET_DIR)/usr/sbin/wpad $(TARGET_DIR)/sysdata || true
+endif
+	mkdir -p $(TARGET_DIR)/usr/lib; mkdir -p $(TARGET_DIR)/usr/bin; mkdir -p $(TARGET_DIR)/usr/sbin; mkdir -p $(TARGET_DIR)/sbin; mkdir -p $(TARGET_DIR)/bin;
+ifeq ($(CONFIG_PACKAGE_libmbedtls),y)
+	[ -e $(TARGET_DIR)/usr/lib/libmbedcrypto.so.3.6.2 ] || (ln -s ../../rom/sysdata/libmbedcrypto.so.3.6.2 $(TARGET_DIR)/usr/lib/libmbedcrypto.so.3.6.2)
+	[ -e $(TARGET_DIR)/usr/lib/libmbedtls.so.3.6.2 ] || (ln -s ../../rom/sysdata/libmbedtls.so.3.6.2 $(TARGET_DIR)/usr/lib/libmbedtls.so.3.6.2)
+	[ -e $(TARGET_DIR)/usr/lib/libmbedx509.so.3.6.2 ] || (ln -s ../../rom/sysdata/libmbedx509.so.3.6.2 $(TARGET_DIR)/usr/lib/libmbedx509.so.3.6.2)
+endif
+ifeq ($(CONFIG_PACKAGE_lighttpd-mod-mbedtls),y)
+	[ -e $(TARGET_DIR)/usr/lib/libpcre2-8.so.0.10.1 ] || (ln -s ../../rom/sysdata/libpcre2-8.so.0.10.1  $(TARGET_DIR)/usr/lib/libpcre2-8.so.0.10.1)
+	[ -e $(TARGET_DIR)/usr/lib/libhogweed.so.6.0 ] || (ln -s ../../rom/sysdata/libhogweed.so.6.0  $(TARGET_DIR)/usr/lib/libhogweed.so.6.0)
+	[ -e $(TARGET_DIR)/usr/lib/libnettle.so.8.0 ] || (ln -s ../../rom/sysdata/libnettle.so.8.0  $(TARGET_DIR)/usr/lib/libnettle.so.8.0)
+	[ -e $(TARGET_DIR)/usr/lib/libgmp.so.10.4.1 ] || (ln -s ../../rom/sysdata/libgmp.so.10.4.1  $(TARGET_DIR)/usr/lib/libgmp.so.10.4.1)
+endif
+	[ -e $(TARGET_DIR)/usr/lib/libuClibc++-0.2.5.so ] || (ln -s ../../rom/sysdata/libuClibc++-0.2.5.so  $(TARGET_DIR)/usr/lib/libuClibc++-0.2.5.so)
+	[ -e $(TARGET_DIR)/usr/lib/libiptext.so ] || (ln -s ../../rom/sysdata/libiptext.so  $(TARGET_DIR)/usr/lib/libiptext.so)
+	[ -e $(TARGET_DIR)/usr/lib/libz.so.1.3.1 ] || (ln -s ../../rom/sysdata/libz.so.1.3.1  $(TARGET_DIR)/usr/lib/libz.so.1.3.1)
+	[ -e $(TARGET_DIR)/usr/lib/libmxml.so.1.5] || (ln -s ../../rom/sysdata/libmxml.so.1.5  $(TARGET_DIR)/usr/lib/libmxml.so.1.5)
+	[ -e $(TARGET_DIR)/usr/lib/libxtables.so.12.4.0] || (ln -s ../../rom/sysdata/libxtables.so.12.4.0  $(TARGET_DIR)/usr/lib/libxtables.so.12.4.0)
+	[ -e $(TARGET_DIR)/usr/lib/libiptext4.so] || (ln -s ../../rom/sysdata/libiptext4.so  $(TARGET_DIR)/usr/lib/libiptext4.so)
+	[ -e $(TARGET_DIR)/usr/lib/libiptext6.so] || (ln -s ../../rom/sysdata/libiptext6.so  $(TARGET_DIR)/usr/lib/libiptext6.so)
+	[ -e $(TARGET_DIR)/usr/lib/libcgi.so] || (ln -s ../../rom/sysdata/libcgi.so  $(TARGET_DIR)/usr/lib/libcgi.so)
+	[ -e $(TARGET_DIR)/usr/lib/libnl-tiny.so.1] || (ln -s ../../rom/sysdata/libnl-tiny.so.1  $(TARGET_DIR)/usr/lib/libnl-tiny.so.1)
+	[ -e $(TARGET_DIR)/usr/lib/libml_utils.so] || (ln -s ../../rom/sysdata/libml_utils.so  $(TARGET_DIR)/usr/lib/libml_utils.so)
+	[ -e $(TARGET_DIR)/usr/lib/libip4tc.so.2.0.0] || (ln -s ../../rom/sysdata/libip4tc.so.2.0.0  $(TARGET_DIR)/usr/lib/libip4tc.so.2.0.0)
+	[ -e $(TARGET_DIR)/usr/lib/libip6tc.so.2.0.0] || (ln -s ../../rom/sysdata/libip6tc.so.2.0.0  $(TARGET_DIR)/usr/lib/libip6tc.so.2.0.0)
+	[ -e $(TARGET_DIR)/usr/lib/liblog.so] || (ln -s ../../rom/sysdata/liblog.so  $(TARGET_DIR)/usr/lib/liblog.so)
+	[ -e $(TARGET_DIR)/usr/lib/libucode.so.20230711] || (ln -s ../../rom/sysdata/libucode.so.20230711  $(TARGET_DIR)/usr/lib/libucode.so.20230711)
+
+	[ -e $(TARGET_DIR)/usr/bin/adbd ] || (ln -s ../../rom/sysdata/adbd $(TARGET_DIR)/usr/bin/adbd)
+	[ -e $(TARGET_DIR)/usr/bin/xml_action.cgi ] || (ln -s ../../rom/sysdata/xml_action.cgi $(TARGET_DIR)/usr/sbin/xml_action.cgi)
+	[ -e $(TARGET_DIR)/usr/bin/jsonfilter ] || (ln -s ../../rom/sysdata/jsonfilter $(TARGET_DIR)/usr/sbin/jsonfilter)
+	[ -e $(TARGET_DIR)/usr/bin/ucode ] || (ln -s ../../rom/sysdata/ucode $(TARGET_DIR)/usr/sbin/ucode)
+	[ -e $(TARGET_DIR)/usr/sbin/lighttpd ] || (ln -s ../../rom/sysdata/lighttpd $(TARGET_DIR)/usr/sbin/lighttpd)
+	[ -e $(TARGET_DIR)/usr/sbin/pppd ] || (ln -s ../../rom/sysdata/pppd $(TARGET_DIR)/usr/sbin/pppd)
+	[ -e $(TARGET_DIR)/usr/sbin/dnsmasq ] || (ln -s ../../rom/sysdata/dnsmasq $(TARGET_DIR)/usr/sbin/dnsmasq)
+	[ -e $(TARGET_DIR)/usr/sbin/odhcpd ] || (ln -s ../../rom/sysdata/odhcpd $(TARGET_DIR)/usr/sbin/odhcpd)
+	[ -e $(TARGET_DIR)/usr/sbin/odhcp6c ] || (ln -s ../../rom/sysdata/odhcp6c $(TARGET_DIR)/usr/sbin/odhcp6c)
+	[ -e $(TARGET_DIR)/usr/sbin/xtables-multi ] || (ln -s ../../rom/sysdata/xtables-multi $(TARGET_DIR)/usr/sbin/xtables-multi)
+	[ -e $(TARGET_DIR)/usr/sbin/iw ] || (ln -s ../../rom/sysdata/iw $(TARGET_DIR)/usr/sbin/iw)
+	[ -e $(TARGET_DIR)/usr/sbin/xtables-legacy-multi ] || (ln -s ../../rom/sysdata/xtables-legacy-multi $(TARGET_DIR)/usr/sbin/xtables-legacy-multi)
+	[ -e $(TARGET_DIR)/usr/sbin/iwconfig ] || (ln -s ../../rom/sysdata/iwconfig $(TARGET_DIR)/usr/sbin/iwconfig)
+	[ -e $(TARGET_DIR)/usr/sbin/chat ] || (ln -s ../../rom/sysdata/chat $(TARGET_DIR)/usr/sbin/chat)
+
+	[ -e $(TARGET_DIR)/sbin/fw3 ] || (ln -s ../rom/sysdata/fw3 $(TARGET_DIR)/sbin/fw3)
+	[ -e $(TARGET_DIR)/sbin/netifd ] || (ln -s ../rom/sysdata/netifd $(TARGET_DIR)/sbin/netifd)
+	[ -e $(TARGET_DIR)/sbin/mtd ] || (ln -s ../rom/sysdata/mtd $(TARGET_DIR)/sbin/mtd)
+
+ifeq ($(CONFIG_PACKAGE_realtek-app),y)
+	[ -e $(TARGET_DIR)/bin/auth ] || (ln -s ../rom/sysdata/auth $(TARGET_DIR)/bin/auth)
+	[ -e $(TARGET_DIR)/bin/iwcontrol ] || (ln -s ../rom/sysdata/iwcontrol $(TARGET_DIR)/bin/iwcontrol)
+	[ -e $(TARGET_DIR)/bin/UDPserver ] || (ln -s ../rom/sysdata/UDPserver $(TARGET_DIR)/bin/UDPserver)
+	[ -e $(TARGET_DIR)/bin/iwpriv ] || (ln -s ../rom/sysdata/iwpriv $(TARGET_DIR)/bin/iwpriv)
+	[ -e $(TARGET_DIR)/bin/wscd ] || (ln -s ../rom/sysdata/wscd $(TARGET_DIR)/bin/wscd)
+	[ -e $(TARGET_DIR)/bin/webs ] || (ln -s ../rom/sysdata/webs $(TARGET_DIR)/bin/webs)
+	[ -e $(TARGET_DIR)/bin/flash ] || (ln -s ../rom/sysdata/flash $(TARGET_DIR)/bin/flash)
+endif
+ifeq ($(CONFIG_PACKAGE_hostapd-common),y)
+	[ -e $(TARGET_DIR)/usr/sbin/hostapd ] || (ln -s ../../rom/sysdata/hostapd $(TARGET_DIR)/usr/sbin/hostapd)
+	[ -e $(TARGET_DIR)/usr/sbin/wpad ] || (ln -s ../../rom/sysdata/wpad $(TARGET_DIR)/usr/sbin/wpad)
+endif
+	@if [ -e $(BIN_DIR)/sysdata ]; then \
+		rm -rf $(BIN_DIR)/sysdata; \
+	fi
+	mv $(TARGET_DIR)/sysdata $(BIN_DIR)/sysdata
+	mkdir -p $(TARGET_DIR)/sysdata
+
+	@if [ -e $(TARGET_DIR)/userapp ]; then \
+		rm -rf $(TARGET_DIR)/userapp; \
+	fi
+	mkdir -p $(TARGET_DIR)/userapp
+	mkdir -p $(TARGET_DIR)/userapp/bin
+ifeq ($(CONFIG_PACKAGE_kmod-cfg80211),y)
+	mv $(TARGET_DIR)/lib/modules/5.4.*/mac80211.ko $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/modules/5.4.*/cfg80211.ko $(TARGET_DIR)/userapp || true
+endif
+ifeq ($(CONFIG_PACKAGE_kmod-realtek-wl),y)
+	mv $(TARGET_DIR)/lib/modules/5.4.*/rtl8192cd.ko $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/modules/5.4.*/rtl8192es.ko $(TARGET_DIR)/userapp || true
+endif
+ifeq ($(CONFIG_PACKAGE_kmod-asr-wl),y)
+	mv $(TARGET_DIR)/lib/modules/5.4.*/asr5803.ko $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/firmware/HERON_FMACFW_A0.bin $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/firmware/HERON_CALIFW_A0.bin $(TARGET_DIR)/userapp || true
+endif
+ifeq ($(CONFIG_AIC_PCIE_WIFI),y)
+	mv $(TARGET_DIR)/lib/modules/5.4.*/aic8800d.ko $(TARGET_DIR)/userapp || true
+	rm -rf $(TARGET_DIR)/lib/firmware/aic8800D80/fmacfwbt_8800D80_pcie.bin
+	rm -rf $(TARGET_DIR)/lib/firmware/aic8800D80/fw_*.bin
+	mv $(TARGET_DIR)/lib/firmware/aic8800D80/fmacfw_8800D80_pcie.bin  $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/firmware/aic8800D80/lmacfw_rf_pcie.bin  $(TARGET_DIR)/userapp || true
+endif
+ifeq ($(CONFIG_AIC_SDIO_WIFI),y)
+	mv $(TARGET_DIR)/lib/modules/5.4.*/aic8800_bsp.ko $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/modules/5.4.*/aic8800_fdrv.ko $(TARGET_DIR)/userapp || true
+ifeq ($(CONFIG_AIC_SDIO_AIC8800D80),y)
+	rm -rf $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfwbt_8800d80_u02.bin
+	rm -rf $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_8800d80_h_u02.bin
+	mv $(TARGET_DIR)/lib/firmware/aic8800_sdio/lmacfw_rf_8800d80_u02.bin  $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_8800d80_u02.bin  $(TARGET_DIR)/userapp || true
+endif
+ifeq ($(CONFIG_AIC_SDIO_AIC8800DW),y)
+	rm -f $(TARGET_DIR)/lib/firmware/aic8800_sdio/fw_*.bin
+	rm -f $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_*_hbt_u02.bin
+	rm -f $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_*_ipc_u02.bin
+	mv $(TARGET_DIR)/lib/firmware/aic8800_sdio/lmacfw_rf_8800dc.bin  $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_patch_8800dc_u02.bin  $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_calib_8800dc_h_u02.bin  $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_calib_8800dc_u02.bin  $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_patch_8800dc_h_u02.bin  $(TARGET_DIR)/userapp || true
+endif
+endif
+	mv $(TARGET_DIR)/www $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/usr/share/mgui $(TARGET_DIR)/userapp || true
+	mv $(TARGET_DIR)/usr/bin/mgui $(TARGET_DIR)/userapp/bin || true
+	mv $(TARGET_DIR)/usr/bin/imsd $(TARGET_DIR)/userapp/bin || true
+	mkdir -p $(TARGET_DIR)/usr/share;
+	ln -s ../rom/userapp/www $(TARGET_DIR)/www
+	ln -s ../../rom/userapp/mgui $(TARGET_DIR)/usr/share/mgui
+	[ -e $(TARGET_DIR)/usr/bin/mgui ] || (ln -s ../../rom/userapp/bin/mgui $(TARGET_DIR)/usr/bin/mgui)
+	[ -e $(TARGET_DIR)/usr/bin/imsd ] || (ln -s ../../rom/userapp/bin/imsd $(TARGET_DIR)/usr/bin/imsd)
+ifeq ($(CONFIG_AIC_PCIE_WIFI),y)
+	[ -e $(TARGET_DIR)/lib/firmware/aic8800D80/fmacfw_8800D80_pcie.bin ] || (ln -s /rom/userapp/fmacfw_8800D80_pcie.bin $(TARGET_DIR)/lib/firmware/aic8800D80/fmacfw_8800D80_pcie.bin)
+	[ -e $(TARGET_DIR)/lib/firmware/aic8800D80/lmacfw_rf_pcie.bin ] || (ln -s /rom/userapp/lmacfw_rf_pcie.bin $(TARGET_DIR)/lib/firmware/aic8800D80/lmacfw_rf_pcie.bin)
+endif
+ifeq ($(CONFIG_AIC_SDIO_WIFI),y)
+ifeq ($(CONFIG_AIC_SDIO_AIC8800D80),y)
+	[ -e $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_8800d80_u02.bin ] || (ln -s /rom/userapp/fmacfw_8800d80_u02.bin $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_8800d80_u02.bin)
+	[ -e $(TARGET_DIR)/lib/firmware/aic8800_sdio/lmacfw_rf_8800d80_u02.bin ] || (ln -s /rom/userapp/lmacfw_rf_8800d80_u02.bin $(TARGET_DIR)/lib/firmware/aic8800_sdio/lmacfw_rf_8800d80_u02.bin)
+endif
+ifeq ($(CONFIG_AIC_SDIO_AIC8800DW),y)
+	[ -e $(TARGET_DIR)/lib/firmware/aic8800_sdio/lmacfw_rf_8800dc.bin ] || (ln -s /rom/userapp/lmacfw_rf_8800dc.bin $(TARGET_DIR)/lib/firmware/aic8800_sdio/lmacfw_rf_8800dc.bin)
+	[ -e $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_patch_8800dc_u02.bin ] || (ln -s /rom/userapp/fmacfw_patch_8800dc_u02.bin $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_patch_8800dc_u02.bin)
+	[ -e $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_calib_8800dc_h_u02.bin ] || (ln -s /rom/userapp/fmacfw_calib_8800dc_h_u02.bin $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_calib_8800dc_h_u02.bin)
+	[ -e $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_calib_8800dc_u02.bin ] || (ln -s /rom/userapp/fmacfw_calib_8800dc_u02.bin $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_calib_8800dc_u02.bin)
+	[ -e $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_patch_8800dc_h_u02.bin ] || (ln -s /rom/userapp/fmacfw_patch_8800dc_h_u02.bin $(TARGET_DIR)/lib/firmware/aic8800_sdio/fmacfw_patch_8800dc_h_u02.bin)
+endif
+endif
+	@if [ -e $(BIN_DIR)/userapp ]; then \
+		rm -rf $(BIN_DIR)/userapp; \
+	fi
+	mv $(TARGET_DIR)/userapp $(BIN_DIR)/userapp
+	mkdir -p $(TARGET_DIR)/userapp
+endif
+
+	mkdir -p $(TARGET_DIR)/system/etc
+
+	if [ ! -L $(TARGET_DIR)/etc/board.json ]; then \
+		mv $(TARGET_DIR)/etc/board.json $(TARGET_DIR)/system/etc/board.json; \
+		$(LN) ../system/etc/board.json $(TARGET_DIR)/etc/board.json; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/config ]; then \
+		mv $(TARGET_DIR)/etc/config $(TARGET_DIR)/system/etc/config; \
+		$(LN) ../system/etc/config $(TARGET_DIR)/etc/config; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/uci-defaults ]; then \
+		mv $(TARGET_DIR)/etc/uci-defaults $(TARGET_DIR)/system/etc/uci-defaults; \
+		$(LN) ../system/etc/uci-defaults $(TARGET_DIR)/etc/uci-defaults; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/mversion ]; then \
+		mv $(TARGET_DIR)/etc/mversion $(TARGET_DIR)/system/etc/mversion; \
+		$(LN) ../system/etc/mversion $(TARGET_DIR)/etc/mversion; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/tel ]; then \
+		mv $(TARGET_DIR)/etc/tel $(TARGET_DIR)/system/etc/tel; \
+		$(LN) ../system/etc/tel $(TARGET_DIR)/etc/tel; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/mrvl_tel_diag.cfg ]; then \
+		mv $(TARGET_DIR)/etc/mrvl_tel_diag.cfg $(TARGET_DIR)/system/etc/mrvl_tel_diag.cfg; \
+		$(LN) ../system/etc/mrvl_tel_diag.cfg $(TARGET_DIR)/etc/mrvl_tel_diag.cfg; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/ethers ]; then \
+		mv $(TARGET_DIR)/etc/ethers $(TARGET_DIR)/system/etc/ethers; \
+		$(LN) ../system/etc/ethers $(TARGET_DIR)/etc/ethers; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/dnsmasq.conf ]; then \
+		mv $(TARGET_DIR)/etc/dnsmasq.conf $(TARGET_DIR)/system/etc/dnsmasq.conf; \
+		$(LN) ../system/etc/dnsmasq.conf $(TARGET_DIR)/etc/dnsmasq.conf; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/ipsec.conf ]; then \
+		mv $(TARGET_DIR)/etc/ipsec.conf $(TARGET_DIR)/system/etc/ipsec.conf; \
+		$(LN) ../system/etc/ipsec.conf $(TARGET_DIR)/etc/ipsec.conf; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/ipsec.secrets ]; then \
+		mv $(TARGET_DIR)/etc/ipsec.secrets $(TARGET_DIR)/system/etc/ipsec.secrets; \
+		$(LN) ../system/etc/ipsec.secrets $(TARGET_DIR)/etc/ipsec.secrets; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/dropbear ]; then \
+		mv $(TARGET_DIR)/etc/dropbear $(TARGET_DIR)/system/etc/dropbear; \
+		$(LN) ../system/etc/dropbear $(TARGET_DIR)/etc/dropbear; \
+	fi
+
+	# IMS
+	if [ ! -L $(TARGET_DIR)/etc/Settings_preferences.xml ]; then \
+		mv $(TARGET_DIR)/etc/Settings_preferences.xml $(TARGET_DIR)/system/etc/Settings_preferences.xml; \
+		$(LN) ../system/etc/Settings_preferences.xml $(TARGET_DIR)/etc/Settings_preferences.xml; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/nodogsplash ]; then \
+		mv $(TARGET_DIR)/etc/nodogsplash $(TARGET_DIR)/system/etc/nodogsplash; \
+		$(LN) ../system/etc/nodogsplash $(TARGET_DIR)/etc/nodogsplash; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/lighttpd ]; then \
+		mv $(TARGET_DIR)/etc/lighttpd $(TARGET_DIR)/system/etc/lighttpd; \
+		$(LN) ../system/etc/lighttpd $(TARGET_DIR)/etc/lighttpd; \
+	fi
+	if [ -e $(TARGET_DIR)/etc/keys ] && [ ! -L $(TARGET_DIR)/etc/keys ]; then \
+		mv $(TARGET_DIR)/etc/keys $(TARGET_DIR)/system/etc/keys; \
+		$(LN) ../system/etc/keys $(TARGET_DIR)/etc/keys; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/selinux ]; then \
+		mv $(TARGET_DIR)/etc/selinux $(TARGET_DIR)/system/etc/selinux; \
+		$(LN) ../system/etc/selinux $(TARGET_DIR)/etc/selinux; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/stat ]; then \
+		mv $(TARGET_DIR)/etc/stat $(TARGET_DIR)/system/etc/stat; \
+		$(LN) ../system/etc/stat $(TARGET_DIR)/etc/stat; \
+	fi
+	if [ ! -L $(TARGET_DIR)/etc/ursp.local ]; then \
+		mv $(TARGET_DIR)/etc/ursp.local $(TARGET_DIR)/system/etc/ursp.local; \
+		$(LN) ../system/etc/ursp.local $(TARGET_DIR)/etc/ursp.local; \
+	fi
+
+	# make dir www/ writable
+ifneq  ($(PROFILE),$(filter $(PROFILE), FALCON403 LAPW503))
+	if [ ! -L $(TARGET_DIR)/www ]; then \
+		mv $(TARGET_DIR)/www $(TARGET_DIR)/system/etc/www; \
+		$(LN) ./system/etc/www $(TARGET_DIR)/www; \
+	fi
+endif
+ifeq ($(CONFIG_QSPINAND_64M),y)
+	# make dir www/ writable
+	if [ ! -L $(TARGET_DIR)/NVM ]; then \
+		mv $(TARGET_DIR)/NVM $(TARGET_DIR)/system/etc/NVM; \
+		$(LN) ./system/etc/NVM $(TARGET_DIR)/NVM; \
+	fi
+	rm $(TARGET_DIR)/lib/preinit/81_mount_ubifs_overlay
+	cp ../files/81_mount_ubifs_overlay_64m $(TARGET_DIR)/lib/preinit/81_mount_ubifs_overlay
+	
+	rm $(TARGET_DIR)/sbin/jffs2reset
+	cp ../files/jffs2reset_mmp_64m $(TARGET_DIR)/sbin/jffs2reset
+endif
+
+ifeq ($(CONFIG_NOBODY_PASSWD_SHADOW),y)
+	rm -f $(TARGET_DIR)/etc/passwd
+	rm -f $(TARGET_DIR)/etc/shadow
+	mv $(TARGET_DIR)/etc/passwd_nobody $(TARGET_DIR)/etc/passwd
+else
+	rm -f $(TARGET_DIR)/etc/passwd_nobody
+endif
+	echo $(MRVL_VERSION)> $(TARGET_DIR)/system/etc/mversion || true
+endef
+
+define Image/Build/DTB
+#the first line can't be conditional expression
+	rm -rf $(ZIMAGE) || true
+ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
+	cp $(KDIR)/zImage-initramfs $(KDIR)/zImage-initramfs-dtb
+	cat $(LINUX_DIR)/arch/$(ARCH)/boot/dts/$(1).dtb >> $(KDIR)/zImage-initramfs-dtb
+	cp $(KDIR)/zImage-initramfs-dtb $(ZIMAGE)
+else
+	cp $(KDIR)/zImage $(KDIR)/zImage-dtb
+	cat $(LINUX_DIR)/arch/$(ARCH)/boot/dts/$(1).dtb >> $(KDIR)/zImage-dtb
+	cp $(KDIR)/zImage-dtb $(ZIMAGE)
+endif
+	chmod 644 $(ZIMAGE)
+endef
+
+define Image/Build/ubifs
+	# Image/Build/ubifs opts:$(OEM_UBIFS_OPTS)
+        ifneq ($($(PROFILE)_OEM_UBIFS_OPTS)$(OEM_UBIFS_OPTS),)
+		rm -rf $(KDIR)/oem_fs
+		mkdir -p  $(KDIR)/oem_fs
+		if [ -e $(PLATFORM_SUBDIR)/$(PROFILE)/oem_fs ]; then \
+			$(CP) $(PLATFORM_SUBDIR)/$(PROFILE)/oem_fs/* $(KDIR)/oem_fs/; \
+		elif [ -e $(PLATFORM_SUBDIR)/oem_fs ]; then \
+			$(CP) $(PLATFORM_SUBDIR)/oem_fs/* $(KDIR)/oem_fs/; \
+		fi
+		$(STAGING_DIR_HOST)/bin/mkfs.ubifs \
+			$(if $($(PROFILE)_OEM_UBIFS_OPTS), \
+				$($(PROFILE)_OEM_UBIFS_OPTS), \
+				$(OEM_UBIFS_OPTS) \
+			) \
+			$(if $(CONFIG_TARGET_UBIFS_FREE_SPACE_FIXUP),--space-fixup) \
+			$(if $(CONFIG_TARGET_UBIFS_COMPRESSION_NONE),--compr=none) \
+			$(if $(CONFIG_TARGET_UBIFS_COMPRESSION_LZO),--compr=lzo) \
+			$(if $(CONFIG_TARGET_UBIFS_COMPRESSION_ZLIB),--compr=zlib) \
+			-o $(KDIR)/oem_data.ubifs \
+			-d $(KDIR)/oem_fs
+        endif
+endef
+
+define Image/Build/ext4
+	rm -rf $(KDIR)/oem_fs
+	mkdir -p  $(KDIR)/oem_fs
+	if [ -e $(PLATFORM_SUBDIR)/$(PROFILE)/oem_fs ]; then \
+		$(CP) $(PLATFORM_SUBDIR)/$(PROFILE)/oem_fs/* $(KDIR)/oem_fs/; \
+	elif [ -e $(PLATFORM_SUBDIR)/oem_fs ]; then \
+		$(CP) $(PLATFORM_SUBDIR)/oem_fs/* $(KDIR)/oem_fs/; \
+	fi
+
+	rm -rf $(KDIR)/oem_data.img
+	rm -rf $(KDIR)/oem_data.simg
+	$(STAGING_DIR_HOST)/bin/make_ext4fs -L oemdata \
+		-l 6144k -b 4k -J\
+		$(if $(SOURCE_DATE_EPOCH),-T $(SOURCE_DATE_EPOCH)) \
+		$(KDIR)/oem_data.img $(KDIR)/oem_fs/
+
+	$(CP) $(KDIR)/oem_data.img $(BIN_DIR)/swd/$(IMG_PREFIX)-oem_data.img
+endef
+
+define Image/Build/ubi
+	# Image/Build/ubi opts:$(OEM_UBI_OPTS) vol_size:$(OEM_UBI_VOL_SIZE)
+        ifneq ($($(PROFILE)_OEM_UBI_OPTS)$(OEM_UBI_OPTS),)
+		mkdir -p  $(BIN_DIR)/swd/
+		if [ -e ./$(ARCH_PROFILE)-ubinize-oem.cfg ]; then \
+			$(CP) ./$(ARCH_PROFILE)-ubinize-oem.cfg $(KDIR)/ubinize-oem.cfg; \
+		else \
+			$(CP) ./$(UBI_CONF_FILE) $(KDIR)/ubinize-oem.cfg; \
+		fi; \
+		( cd $(KDIR); \
+			sed -i 's/vol_size=.*KiB/vol_size=$(OEM_UBI_VOL_SIZE)/g' ubinize-oem.cfg; \
+			$(STAGING_DIR_HOST)/bin/ubinize \
+			$(if $($(PROFILE)_OEM_UBI_OPTS), \
+				$($(PROFILE)_OEM_UBI_OPTS), \
+				$(OEM_UBI_OPTS) \
+			) \
+			-o $(KDIR)/oem_data.ubi \
+			ubinize-oem.cfg \
+		)
+		$(CP) $(KDIR)/oem_data.ubi $(BIN_DIR)/swd/$(IMG_PREFIX)-oem_data.ubi
+        endif
+endef
+
+ifeq ($(CONFIG_TARGET_mmp_asr1803),y)
+ifeq  ($(PROFILE),$(filter $(PROFILE),FALCON401))
+		Image/BuildKernel/Profile/FALCON401=$(call Image/Build/DTB,asr1803-p401)
+endif
+ifeq  ($(PROFILE),$(filter $(PROFILE),FALCON403))
+		Image/BuildKernel/Profile/FALCON403=$(call Image/Build/DTB,asr1803-p403)
+endif
+endif
+
+ifeq ($(CONFIG_TARGET_mmp_asr1828),y)
+		Image/BuildKernel/Profile/KAGU801=$(call Image/Build/DTB,asr1828-p801)
+endif
+
+ifeq ($(CONFIG_TARGET_mmp_asr1901),y)
+		Image/BuildKernel/Profile/KSTR901=$(call Image/Build/DTB,asr1901-p901)
+endif
+
+ifeq ($(CONFIG_TARGET_mmp_asr1806),y)
+ifeq ($(CONFIG_POSE),y)
+		Image/BuildKernel/Profile/FACT301=$(call Image/Build/DTB,asr1806-p301-pose)
+else ifeq ($(CONFIG_POSL),y)
+		Image/BuildKernel/Profile/FACT301=$(call Image/Build/DTB,asr1806-p301-posl)
+else
+		Image/BuildKernel/Profile/FACT301=$(call Image/Build/DTB,asr1806-p301)
+endif
+endif
+
+ifeq ($(CONFIG_TARGET_mmp_asr1806),y)
+		Image/BuildKernel/Profile/FACT306=$(call Image/Build/DTB,asr1806-p306)
+endif
+
+ifeq ($(CONFIG_TARGET_mmp_asr1906),y)
+		Image/BuildKernel/Profile/KSTRZ906=$(call Image/Build/DTB,asr1906-p906)
+endif
+
+ifeq ($(CONFIG_TARGET_mmp_asr1903),y)
+ifeq  ($(PROFILE),$(filter $(PROFILE),LAPW501))
+ifeq ($(CONFIG_PACKAGE_kmod-asr5811-wl),y)
+		Image/BuildKernel/Profile/LAPW501=$(call Image/Build/DTB,asr1903-p501-asr5811)
+else
+		Image/BuildKernel/Profile/LAPW501=$(call Image/Build/DTB,asr1903-p501)
+endif
+endif
+ifeq  ($(PROFILE),$(filter $(PROFILE),LAPW503))
+		Image/BuildKernel/Profile/LAPW503=$(call Image/Build/DTB,asr1903-p503)
+endif
+endif
+
+define Image/BuildKernel
+	$(call Image/BuildKernel/Profile/$(PROFILE))
+endef
+
+.NOTPARALLEL:
+
+# Do not place commentary inside of rule - it is present in command line
+#
+# when building partial build, we may not have all images in bin folder
+# add || true to make this not brake build.
+# for example, make target/linux/install will fail since there is no uboot image after first build.
+#
+# symbol: keep directory for partial build's update
+#      tar it "on place" but do copy to user or release-server
+#
+define BuildSwdownloader
+	mkdir -p  $(BIN_DIR)/swd/swd_extra
+	cp -fpr $(MRVLDIR)/swd/*  $(BIN_DIR)/swd/
+	rm -rf  $(BIN_DIR)/swd/swd_extra/*
+	rm -rf	$(BIN_DIR)/swd/NZA* $(BIN_DIR)/swd/FALCON* $(BIN_DIR)/swd/KAGU* $(BIN_DIR)/swd/KSTR* $(BIN_DIR)/swd/FACT* $(BIN_DIR)/swd/LAPW*
+	rm -rf  $(BIN_DIR)/swd/update_cp.bat
+	rm -rf  $(BIN_DIR)/swd/extra_blfs.sh
+	rm -rf  $(BIN_DIR)/swd/gen_pb.sh
+	rm -rf  $(BIN_DIR)/swd/winsquashfs
+	mv -f $(BIN_DIR)/swd/SWDdoc/  $(BIN_DIR)/swd/swd_extra/ || true
+	mv -f $(BIN_DIR)/swd/SWDdriver/  $(BIN_DIR)/swd/swd_extra/ || true
+	mv -f $(BIN_DIR)/swd/tools/  $(BIN_DIR)/swd/swd_extra/ || true
+	mv -f $(BIN_DIR)/$(IMG_PREFIX)-root.squashfs  $(BIN_DIR)/swd/ || true
+	mv $(ZIMAGE)  $(BIN_DIR)/swd/ || true
+	mv -f $(BIN_DIR)/$(IMG_PREFIX)-u-boot.bin  $(BIN_DIR)/swd/ || true
+	mv -f $(BIN_DIR)/$(ARCH_PACKAGES)_TLoader_*.bin  $(BIN_DIR)/swd/ || true
+ifeq  ($(PROFILE),$(filter $(PROFILE),FALCON403 FACT301 KSTR901 KSTRZ906 LAPW501 LAPW503))
+	mv -f $(BIN_DIR)/$(ARCH_PACKAGES)_TUpdater_*.bin  $(BIN_DIR)/swd/ || true
+endif
+	mv -f $(LINUX_DIR)/vmlinux  $(BIN_DIR)/symbol || true
+	rm -rf $(BIN_DIR)/swd/symbol
+	mv -f $(BIN_DIR)/symbol $(BIN_DIR)/swd/
+ifneq ($(PROFILE),$(filter $(PROFILE),NEZHA701 NEZHA702))
+	rm -rf $(BIN_DIR)/swd/pxa1826p701*.txt || true
+endif
+ifeq ($(PROFILE),$(filter $(PROFILE),KSTR901))
+	cp -fpr $(MRVLDIR)/swd/KSTR/HTFX $(BIN_DIR)/swd/KSTR || true
+endif
+ifeq ($(PROFILE),$(filter $(PROFILE),KSTRZ906))
+	cp -fpr $(MRVLDIR)/swd/KSTRZ/HTFX $(BIN_DIR)/swd/KSTRZ || true
+endif
+ifeq ($(PROFILE),$(filter $(PROFILE),FALCON401 FALCON403))
+	cp -fpr $(MRVLDIR)/swd/FALCON/HTFX $(BIN_DIR)/swd/FLCN || true
+endif
+ifeq ($(PROFILE),$(filter $(PROFILE),FACT301 FACT306))
+	cp -fpr $(MRVLDIR)/swd/FACT/HTFX $(BIN_DIR)/swd/FACT || true
+endif
+ifeq ($(PROFILE),$(filter $(PROFILE),LAPW501 LAPW503))
+	cp -fpr $(MRVLDIR)/swd/LAPW/HTFX $(BIN_DIR)/swd/LAPW || true
+endif
+ifeq ($(PROFILE),$(filter $(PROFILE),KAGU801))
+	cp -fpr $(MRVLDIR)/swd/KAGU/HTFX $(BIN_DIR)/swd/KAGU || true
+	find $(BIN_DIR)/swd/ -name "*p801_QSPINAND*.blf" | while read c; do\
+		cp "$$$$c" "$$$${c/p801_QSPINAND/p801_ARG_QSPINAND}"; \
+		cp "$$$$c" "$$$${c/p801_QSPINAND/p801_HAR_QSPINAND}"; \
+		sed -i 's/MSA.bin/MSA_ARG.bin/; s/RFPLUGIN.bin/RFPLUGIN_ARG.bin/' "$$$${c/p801_QSPINAND/p801_ARG_QSPINAND}"; \
+		sed -i 's/MSA.bin/MSA_HAR.bin/; s/RFPLUGIN.bin/RFPLUGIN_HAR.bin/' "$$$${c/p801_QSPINAND/p801_HAR_QSPINAND}"; \
+		rm -f "$$$$c"; \
+		done
+endif
+	tar -C $(BIN_DIR)/swd -zcvf - symbol|openssl des3 -salt -k asr1826 | dd of=$(BIN_DIR)/swd/symbol.bin
+	sed  's/Salted/elfaxf/g'  $(BIN_DIR)/swd/symbol.bin > $(BIN_DIR)/swd/vmlinux.bin
+	rm -rf $(BIN_DIR)/swd/symbol
+	rm -rf $(BIN_DIR)/swd/symbol.bin
+ifeq ($(CONFIG_TEE_OS),y)
+	cp -fpr $(TOPDIR)/package/services/optee_os/$(ARCH_PACKAGES)_tos.bin  $(BIN_DIR)/swd/
+endif
+ifeq ($(CONFIG_ASR_SDTIM),y)
+	sed -i '/^SDTIM =/s/0/1/' $(BIN_DIR)/swd/*.blf || true
+	find $(BIN_DIR)/swd/ ! -name "*SDTIM*.blf" -name "*.blf" -delete || true
+else
+	find $(BIN_DIR)/swd/ -name "*SDTIM*.blf" -delete || true
+endif
+#Create AP reliable data
+	chmod +x $(MRVLDIR)/lte-telephony/cp/reliabledata/RDGeneratorEx
+	[ -f $(PLATFORM_DIR)/files/mrd/$(ARCH_PROFILE)_caldata.conf ] && { \
+		cp $(PLATFORM_DIR)/files/mrd/$(ARCH_PROFILE)_caldata.conf \
+			$(BIN_DIR)/swd/WlanCalData_ext.conf; \
+		CUSTOMIZED_CMD="-c 0xAAAA0035 $(BIN_DIR)/swd/WlanCalData_ext.conf"; }; \
+	[ -f $(PLATFORM_DIR)/files/mrd/$(ARCH_PROFILE)_txpwrlimit_cfg.bin ] && { \
+		cp $(PLATFORM_DIR)/files/mrd/$(ARCH_PROFILE)_txpwrlimit_cfg.bin \
+			$(BIN_DIR)/swd/txpwrlimit_cfg.bin; \
+		CUSTOMIZED_CMD="$$$${CUSTOMIZED_CMD} -c 0xAAAA0035 $(BIN_DIR)/swd/txpwrlimit_cfg.bin"; }; \
+	mkdir -p $(BIN_DIR)/swd/nvm/
+	if [ -d $(PLATFORM_DIR)/files/mrd/$(ARCH_PROFILE) ]; then \
+		cp -fpr $(PLATFORM_DIR)/files/mrd/$(ARCH_PROFILE)/*.nvm $(BIN_DIR)/swd/nvm/; \
+	fi; \
+	if [ -f $(PLATFORM_DIR)/files/mrd/Settings_preferences.xml.lzma ]; then \
+		cp -fpr $(PLATFORM_DIR)/files/mrd/Settings_preferences.xml.lzma $(BIN_DIR)/swd/nvm/; \
+	fi; \
+	$(MRVLDIR)/lte-telephony/cp/reliabledata/RDGeneratorEx $$$${CUSTOMIZED_CMD} -n $(BIN_DIR)/swd/nvm/ \
+		-o $(BIN_DIR)/swd/$(SUBTARGET)_AP_ReliableData.bin
+	rm -rf $(BIN_DIR)/swd/txpwrlimit_cfg.bin
+	rm -rf $(BIN_DIR)/swd/WlanCalData_ext.conf
+	rm -rf $(BIN_DIR)/swd/nvm/
+	rm -f $(PLATFORM_DIR)/files/mrd/Settings_preferences.xml.lzma
+endef
+
+define BuildFota
+	mkdir -p  $(BIN_DIR)/fota
+	cp -fpr $(MRVLDIR)/fota/mkota/tim_builder $(BIN_DIR)/swd
+	cp -fpr $(MRVLDIR)/fota/mkota/mkotafbf $(BIN_DIR)/swd
+	cp -fpr $(MRVLDIR)/fota/mkota/gen_fota.sh $(BIN_DIR)/swd
+	cp -fpr $(MRVLDIR)/fota/mkota/gen_fbf.bat $(BIN_DIR)/swd
+	chmod +x $(BIN_DIR)/swd/mkotafbf $(BIN_DIR)/swd/gen_fota.sh
+
+	cp -fpr $(MRVLDIR)/fota/mkota/gen_nord.sh $(BIN_DIR)/swd
+	chmod +x $(BIN_DIR)/swd/gen_nord.sh
+ifeq ($(CONFIG_SECURE_IMA),y)
+	$(BIN_DIR)/swd/gen_nord.sh $(BIN_DIR)/swd IMA $(KEYFILE)
+else
+	$(BIN_DIR)/swd/gen_nord.sh $(BIN_DIR)/swd $(KEYFILE)
+endif
+
+	rm -rf $(BIN_DIR)/swd/gen_nord.sh
+
+	rm -rf $(BIN_DIR)/swd/*_OTA_* $(BIN_DIR)/fota/*
+	$(BIN_DIR)/swd/gen_fota.sh $(BIN_DIR)/swd $(MRVL_VERSION) $(AB_SYSTEM) $(KEYFILE)
+	mv $(BIN_DIR)/swd/*_*OTA_* $(BIN_DIR)/fota/
+	rm -rf $(BIN_DIR)/swd/tim_builder $(BIN_DIR)/swd/mkotafbf $(BIN_DIR)/swd/gen_fota.sh
+	grep -q 'SkipTimBuilder *= *1' $(BIN_DIR)/swd/*.blf || rm -rfv $(BIN_DIR)/swd/DDR_*.*
+
+endef
+
+#this one should be called after BuildSwdownloader when required.
+#oemkey can be generated by command: RSAKeyGeneratorCmd -s 2048 -f oemkey -h SHA-256
+define BuildSecureSwd
+	mkdir -p $(BIN_DIR)/swd_sec_temp
+	cp -fpr $(BIN_DIR)/swd_sec/* $(BIN_DIR)/swd_sec_temp/
+	cp -fpr $(BIN_DIR)/swd/* $(BIN_DIR)/swd_sec/
+	rm -rf $(BIN_DIR)/swd_sec/*.blf
+	rm -rf $(BIN_DIR)/swd_sec/$(ARCH_PACKAGES)_TLoader_*.bin
+	rm -rf $(BIN_DIR)/swd_sec/extra_blfs
+	cp -fpr $(BIN_DIR)/swd_sec_temp/* $(BIN_DIR)/swd_sec/
+	rm -rf $(BIN_DIR)/swd_sec_temp
+endef
+
+define BuildSecFota
+	mkdir -p  $(BIN_DIR)/fota_sec
+	cp -fpr $(MRVLDIR)/fota/mkota/tim_builder $(BIN_DIR)/swd_sec/
+	cp -fpr $(MRVLDIR)/fota/mkota/mkotafbf $(BIN_DIR)/swd_sec/
+	cp -fpr $(MRVLDIR)/fota/mkota/gen_fota.sh $(BIN_DIR)/swd_sec/
+	chmod +x $(BIN_DIR)/swd_sec/mkotafbf $(BIN_DIR)/swd_sec/gen_fota.sh
+	$(BIN_DIR)/swd_sec/gen_fota.sh $(BIN_DIR)/swd_sec $(MRVL_VERSION) $(AB_SYSTEM) $(MRVLDIR)/fota/mkota/oemkey
+	mv $(BIN_DIR)/swd_sec/*_OTA_* $(BIN_DIR)/fota_sec/
+	rm -rf $(BIN_DIR)/swd_sec/tim_builder $(BIN_DIR)/swd_sec/mkotafbf $(BIN_DIR)/swd_sec/gen_fota.sh
+endef
+
+define save_manifest
+	rm -rf $(BIN_DIR)/environment
+	mkdir -p $(BIN_DIR)/environment
+
+#this part will create a manifest of the current build
+	export TOP_DIR=$(TOPDIR);$(TOPDIR)/mgit.sh run "git log --pretty=format:\"%H - %an, %ar : %s\" -n 10 && \
+	git status -s -b" | awk '{gsub(/\033\[0;31m/,"");gsub(/\033\[0m/,"");gsub(/\?\?/," U");gsub(/##/,"\nbranch"); print}' \
+	> $(BIN_DIR)/environment/build_status_$(shell date +%m_%d_%Y__%H_%M).txt
+	export TOP_DIR=$(TOPDIR);$(TOPDIR)/mgit.sh run "git log --pretty=tformat:%H -n 1 >> $(BIN_DIR)/environment/manifest.txt"
+	echo $(shell git symbolic-ref --quiet --short HEAD) > $(BIN_DIR)/environment/Tmanifest.txt
+	cat $(BIN_DIR)/environment/manifest.txt >> $(BIN_DIR)/environment/Tmanifest.txt
+	$(TOPDIR)/scripts/env_tools/manifest_gen.bash $(BIN_DIR)/environment/Tmanifest.txt $(TOPDIR)/scripts/env_tools/manifest.xml > $(BIN_DIR)/environment/manifest.xml
+	rm -rf $(BIN_DIR)/environment/Tmanifest.txt
+	#if we have comm version file we should copy it as well here
+	cp $(TARGET_DIR)/system/etc/mversion $(BIN_DIR)/environment/ || true
+	cp $(TARGET_DIR)/system/etc/mversion $(BIN_DIR)/swd/ || true
+	cp $(BIN_DIR)/environment/manifest.txt $(BIN_DIR)/swd/
+endef
+
+define BuildDiagMdb
+	make -f $(MRVLDIR)/services/prepass/Makefile compile
+	mkdir -p $(BIN_DIR)/swd/
+	cp -rf $(MRVLDIR)/lte-telephony/cp/$(ARCH_PACKAGES)/mdb/*.txt $(BIN_DIR)/swd/
+
+ifeq ($(PROFILE),$(filter $(PROFILE),NEZHA305 NEZHA306 NEZHA601))
+	mv -f $(BIN_DIR)/swd/UNIFY_MDB.txt $(BIN_DIR)/swd/LWG_MDB.txt
+else
+	rm -rf $(BIN_DIR)/swd/UNIFY_MDB.txt
+endif
+	rm -rf $(BIN_DIR)/swd/LWG_version.txt
+	cp -rf $(BUILD_DIR)/prepass/diag_db/*.txt $(BIN_DIR)/swd/
+ifeq ($(PROFILE),$(filter $(PROFILE),FALCON403 LAPW503))
+	rm -rf $(BIN_DIR)/swd/MDB.txt
+	mv -f $(BIN_DIR)/swd/MDB_AUOFF.txt $(BIN_DIR)/swd/MDB.txt
+else
+	rm -rf $(BIN_DIR)/swd/MDB_AUOFF.txt
+endif
+endef
+
+define BuildChecksum
+	cd ${BIN_DIR}/swd; \
+	$(FIND) -maxdepth 1 -type f \! -name 'md5sums'  -printf "%P\n" | sort | xargs \
+		md5sum --binary > md5sums
+	cd $(BIN_DIR)/swd_sec; \
+	$(FIND) -maxdepth 1 -type f \! -name 'md5sums'  -printf "%P\n" | sort | xargs \
+		md5sum --binary > md5sums
+endef
+
+OBM_CONFIG=$(subst CONFIG_PACKAGE_obm-mmp-,,$(filter CONFIG_PACKAGE_obm-mmp-%,$(.VARIABLES)))
+UBOOT_CONFIG=$(subst CONFIG_PACKAGE_uboot-mmp-,,$(filter CONFIG_PACKAGE_uboot-mmp-%,$(.VARIABLES)))
+
+define CheckRootFsSize
+	A="$$$$(stat -c %s $(BIN_DIR)/$(IMG_PREFIX)-root.squashfs)"; \
+	  A="$$$$(printf "0x%X\n" $$$$A)"; \
+	  B="$$$$(strings $(firstword $(wildcard $(BIN_DIR)/$(IMG_PREFIX)-u-boot.bin $(BIN_DIR)/swd/$(IMG_PREFIX)-u-boot.bin /dev/null)) | sed 's/.*rootsize=//;t n;d;:n;s/[ \t\r].*//')"; \
+	  if [[ "$$$$B" == *%x* ]]; then \
+	  B="$$$$(awk '$$$$2 == "$(if $(CONFIG_QSPINAND_64M),SMALL,LARGE)_ROOTFS_SIZE" {print $$$$3}' $(MRVLDIR)/uboot/include/configs/$(UBOOT_CONFIG).h)"; \
+	  fi; \
+	  if [ $$$$(($$$$A <= $$$$B)) -eq 0 ]; then \
+	  echo "rootfs size exceed rootsize: $$$$A > $$$$B"; \
+	  exit 1; \
+	  else \
+	  echo "rootfs size check pass: $$$$A <= $$$$B"; \
+	  fi
+endef
+
+define Build/emmc-gpt
+	# sdtim use different partitions
+ifeq ($(CONFIG_ASR_SDTIM),y)
+	./gen_asr_emmc_gpt_sdtim.sh $(BIN_DIR)/swd/primary_gpt_sdtim
+else
+	./gen_asr_emmc_gpt.sh $(BIN_DIR)/swd/primary_gpt
+endif
+endef
+
+define Image/Build/squashfs
+	dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-root.$(1)
+ifeq  ($(PROFILE),$(filter $(PROFILE), FALCON403 LAPW503))
+	SOURCE_DATE_EPOCH=0 \
+	$(STAGING_DIR_HOST)/bin/mksquashfs4  $(BIN_DIR)/sysdata $(BIN_DIR)/$(IMG_PREFIX)-sysdata.squashfs -nopad -noappend \
+		-root-owned -comp xz -Xpreset 8 -Xe -Xlc 0 -Xlp 2 -Xpb 2 -Xbcj arm -b 64k
+	SOURCE_DATE_EPOCH=0 \
+	$(STAGING_DIR_HOST)/bin/mksquashfs4  $(BIN_DIR)/userapp $(BIN_DIR)/$(IMG_PREFIX)-user.squashfs -nopad -noappend \
+		-root-owned -comp xz -Xpreset 8 -Xe -Xlc 0 -Xlp 2 -Xpb 2 -Xbcj arm -b 64k
+	rm -rf $(BIN_DIR)/sysdata
+	rm -rf $(BIN_DIR)/userapp
+	mv $(BIN_DIR)/$(IMG_PREFIX)-sysdata.squashfs $(BIN_DIR)/swd/
+	mv $(BIN_DIR)/$(IMG_PREFIX)-user.squashfs $(BIN_DIR)/swd/
+endif
+endef
+
+define Image/Build
+	$(if $(Image/Build/$(1)), $(call Image/Build/$(1),$(1)))
+endef
+
+define Image/PostAction
+	# only falconT-p306 use ext4
+ifeq ($(PROFILE),FACT306)
+	$(call Image/Build/ext4)
+else
+	$(call Image/Build/ubifs)
+ifneq ($(PROFILE),$(filter $(PROFILE),FALCON403 LAPW503))
+	$(call Image/Build/ubi)
+endif
+endif
+	$(call CheckRootFsSize)
+	$(call BuildDiagMdb)
+	$(call BuildSwdownloader)
+ifeq ($(PROFILE),FACT306)
+	$(call Build/emmc-gpt)
+endif
+ifneq ($(PROFILE),NEZHA302)
+	$(call BuildFota)
+endif
+	$(call save_manifest)
+	$(call BuildChecksum)
+endef
+
+$(eval $(call BuildImage))
diff --git a/target/linux/mmp/image/gen_asr_emmc_gpt.sh b/target/linux/mmp/image/gen_asr_emmc_gpt.sh
new file mode 100755
index 0000000..c63a0d5
--- /dev/null
+++ b/target/linux/mmp/image/gen_asr_emmc_gpt.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+OUTPUT="$1"
+
+ptgen -g -o $OUTPUT -a 1 -l 1024 \
+        -t 0x41 -N cpmrd -r -p 128k@256k \
+        -t 0x41 -N apmrd -r -p 128k@384k \
+        -t 0x41 -N cpmrd_backup -r -p 128k@512k \
+        -t 0x41 -N apmrd_backup -r -p 128k@640k \
+        -t 0x41 -N mep -r -p 128k@768k \
+        -t 0x41 -N mep_backup -r -p 128k@896k \
+        -t 0x41 -N asr_flag -r -p 1024k@1024k \
+        -t 0x41 -N dtim-a -r -p 256k@2048k \
+        -t 0x41 -N dtim-b -r -p 256k@2304k \
+        -t 0x41 -N cpimage-a -r -p 15616k@2560k \
+        -t 0x41 -N cpimage-b -r -p 15616k@18176k \
+        -t 0x41 -N uboot-a -r -p 768k@33792k \
+        -t 0x41 -N uboot-b -r -p 768k@34560k \
+        -t 0x41 -N kernel-a -r -p 5120k@35328k \
+        -t 0x41 -N kernel-b -r -p 5120k@40448k \
+        -t 0x83 -N rootfs-a -r -p 20480k@45568k \
+        -t 0x83 -N rootfs-b -r -p 20480k@66048k \
+        -t 0x41 -N oem_data-a -r -p 8192k@86528k \
+        -t 0x41 -N oem_data-b -r -p 8192k@94720k \
+        -t 0x41 -N device_info -r -p 256k@102912k \
+        -t 0x41 -N cust_info -r -p 256k@103168k \
+        -t 0x83 -N etc -r -p 10240k@103424k \
+        -t 0x83 -N nvm -r -p 10240k@113664k \
+        -t 0x83 -N user_data -r -p 7511023k@123904k
+
diff --git a/target/linux/mmp/image/gen_asr_emmc_gpt_sdtim.sh b/target/linux/mmp/image/gen_asr_emmc_gpt_sdtim.sh
new file mode 100755
index 0000000..bdacaae
--- /dev/null
+++ b/target/linux/mmp/image/gen_asr_emmc_gpt_sdtim.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+OUTPUT="$1"
+
+ptgen -g -o $OUTPUT -a 1 -l 1024 \
+        -t 0x41 -N cpmrd -r -p 128k@256k \
+        -t 0x41 -N apmrd -r -p 128k@384k \
+        -t 0x41 -N cpmrd_backup -r -p 128k@512k \
+        -t 0x41 -N apmrd_backup -r -p 128k@640k \
+        -t 0x41 -N mep -r -p 128k@768k \
+        -t 0x41 -N mep_backup -r -p 128k@896k \
+        -t 0x41 -N asr_flag -r -p 1024k@1024k \
+        -t 0x41 -N dtim-a -r -p 256k@2048k \
+        -t 0x41 -N dtim-b -r -p 256k@2304k \
+        -t 0x41 -N cpimage-a -r -p 15616k@2560k \
+        -t 0x41 -N cpimage-b -r -p 15616k@18176k \
+        -t 0x41 -N uboot-a -r -p 768k@33792k \
+        -t 0x41 -N uboot-b -r -p 768k@34560k \
+        -t 0x41 -N kernel-a -r -p 5120k@35328k \
+        -t 0x41 -N kernel-b -r -p 5120k@40448k \
+        -t 0x41 -N rootfs-a-sdtim -r -p 128k@45568k \
+        -t 0x83 -N rootfs-a-mount -r -p 20352k@45696k \
+        -t 0x41 -N rootfs-a -r -p 20480k@45568k \
+        -t 0x41 -N rootfs-b-sdtim -r -p 128k@66048k \
+        -t 0x83 -N rootfs-b-mount -r -p 20352k@66176k \
+        -t 0x41 -N rootfs-b -r -p 20480k@66048k \
+        -t 0x41 -N oem_data-a-sdtim -r -p 128k@86528k \
+        -t 0x83 -N oem_data-a-mount -r -p 8064k@86656k \
+        -t 0x41 -N oem_data-a -r -p 8192k@86528k \
+        -t 0x41 -N oem_data-b-sdtim -r -p 128k@94720k \
+        -t 0x83 -N oem_data-b-mount -r -p 8064k@94848k \
+        -t 0x41 -N oem_data-b -r -p 8192k@94720k \
+        -t 0x41 -N device_info -r -p 256k@102912k \
+        -t 0x41 -N cust_info -r -p 256k@103168k \
+        -t 0x83 -N etc -r -p 10240k@103424k \
+        -t 0x83 -N nvm -r -p 10240k@113664k \
+        -t 0x83 -N user_data -r -p 7511023k@123904k
+
diff --git a/target/linux/mmp/image/ubinize-oem.cfg b/target/linux/mmp/image/ubinize-oem.cfg
new file mode 100644
index 0000000..7a0c13a
--- /dev/null
+++ b/target/linux/mmp/image/ubinize-oem.cfg
@@ -0,0 +1,17 @@
+[oem_data]
+# Volume mode (other option is static)
+mode=ubi
+# Source image
+image=oem_data.ubifs
+# Volume ID in UBI image
+vol_id=0
+# Allow for dynamic resize
+#vol_type=dynamic
+vol_type=static
+# Volume name
+vol_name=oem_data
+#
+# Total amount of logical eraseblocks minus 4(two for internal Volume,
+# one for Wear-leveling, one for Scrubbing), then multiplied by (block_size - 2*page_size)
+# vol size to be counted automatically in makefile
+vol_size=0KiB
diff --git a/target/linux/mmp/image/version.asr b/target/linux/mmp/image/version.asr
new file mode 100644
index 0000000..414c7cc
--- /dev/null
+++ b/target/linux/mmp/image/version.asr
@@ -0,0 +1 @@
+1453
diff --git a/target/linux/mmp/image/version.ext b/target/linux/mmp/image/version.ext
new file mode 100644
index 0000000..3a4ab2b
--- /dev/null
+++ b/target/linux/mmp/image/version.ext
@@ -0,0 +1 @@
+_FOR1806DS