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