diff --git a/mcu/tools/ckMemLayout.pl b/mcu/tools/ckMemLayout.pl
new file mode 100644
index 0000000..7c3c7d7
--- /dev/null
+++ b/mcu/tools/ckMemLayout.pl
@@ -0,0 +1,152 @@
+#!/usr/bin/perl
+#
+#  Copyright Statement:
+#  --------------------
+#  This software is protected by Copyright and the information contained
+#  herein is confidential. The software may not be copied and the information
+#  contained herein may not be used or disclosed except with the written
+#  permission of MediaTek Inc. (C) 2006
+#
+#  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+#  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+#  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+#  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+#  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+#  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+#  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+#  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+#  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+#  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+#  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+#  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+#
+#  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+#  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+#  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+#  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+#  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+#
+#  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+#  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+#  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+#  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+#  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+#
+#*****************************************************************************
+#*
+#* Filename:
+#* ---------
+#*   ckMemLayout.pl
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#*   This script is to check memory layout
+#*
+#* Author:
+#* -------
+#*   Qmei Yang (mtk03726)
+#*
+#****************************************************************************/
+
+#****************************************************************************
+# Included Modules
+#****************************************************************************
+BEGIN { push @INC , './tools/' }  # add additional library path
+use sysGenUtility;                 #pm file name without case sensitivity
+use strict;
+use FileInfoParser;
+
+#****************************************************************************
+# Constants
+#****************************************************************************
+my $CKMEMLAYOUT_VERNO = " m0.04";
+                        # m0.04 by Tero, ckregion added
+                        # m0.03 by mei, Support infomake.log input
+                        # m0.02 by mei, support ckLDS
+                        # m0.01 by mei, Fix error message
+                        # v0.02 by mei, Support path and filename case sensitive on Linux
+                        # v0.01 by mei, initial version
+
+#****************************************************************************
+# Global Variables
+#****************************************************************************
+my $g_exit = 0;
+my %g_MAKEFILE_OPTIONS;
+my $b_debug = 0;
+
+#****************************************************************************
+# Input Parameters
+#****************************************************************************
+my $phase            = $ARGV[0];
+my $stop_build       = $ARGV[1];
+my $IMAGELAYOUT      = $ARGV[2];
+my $LIS_TEMP         = $ARGV[3];
+my $FLASH_CFG_TMP    = $ARGV[4];
+my $themf            = $ARGV[5];
+my $BB_FOLDER        = $ARGV[6];
+my $DUMMY_IMAGELAYOUT_ALLOW = $ARGV[7];
+my $INFOMAKE_PATH    = $ARGV[8];
+
+print "[ckMemLayout.pl][Input]\nPhase=".$ARGV[0].
+      "\nstop_build=".$ARGV[1].
+      "\nIMAGELAYOUT=".$ARGV[2].
+      "\nMap=".$ARGV[3].
+      "\nFLASH_CFG_TMP=".$ARGV[4].
+      "\nMakeFile=".$ARGV[5].
+      "\nBBFolder=".$ARGV[6].
+      "\nDUMMY_IMAGELAYOUT_ALLOW=".$ARGV[7].
+      "\nINFOMAKE_PATH=".$ARGV[8].
+      "\n\n\n" if($b_debug);
+
+
+#****************************************************************************
+# 1 >>> ParseMakeFile to get GCC/RVCT
+#****************************************************************************
+if(1!= &FileInfo::Parse_MAKEFILE($themf, \%g_MAKEFILE_OPTIONS))
+{
+    &sysUtil::sysgen_die("Parse MakeFile failed");
+}
+
+#****************************************************************************
+# 2 >>> Run tool
+#****************************************************************************
+my $strCompiler = &FileInfo::GetCompiler();
+if("GCC" eq $strCompiler)
+{
+    $g_exit |= &SendCommand("perl tools/ckLDS.pl $ARGV[0] $ARGV[1] $ARGV[2] $ARGV[3] $ARGV[4] \"$ARGV[5]\" $ARGV[6] $ARGV[7] $ARGV[8]");
+    if ($ARGV[0] == 2) {
+      my $sym_file = $ARGV[3];
+      $sym_file =~ s/map/sym/;
+      $g_exit |= &SendCommand("perl tools/AutoGen/postBuild/ckRegion.pl $sym_file") if -e $sym_file or die "No $sym_file found\n";
+      my ($tempdir) = ($IMAGELAYOUT =~ /^(.*)custom/);
+      $tempdir .= "tmp/";
+      $g_exit |= &SendCommand("perl tools/AutoGen/postBuild/ckL2CacheSection.pl $ARGV[3] $tempdir");
+    }
+}
+elsif("RVCT" eq $strCompiler)
+{
+    $g_exit = &SendCommand("perl tools/ckScatter.pl $ARGV[0] $ARGV[1] $ARGV[2] $ARGV[3] $ARGV[4] \"$ARGV[5]\" $ARGV[6] $ARGV[7] $ARGV[8]");
+}
+
+#****************************************************************************
+# 3 >>> exit - no error: 0, error code: > 0
+#****************************************************************************
+exit $g_exit;
+
+#****************************************************************************
+# subroutines
+#****************************************************************************
+sub SendCommand
+{
+    my ($strCommand) = @_;
+    my $nRet;
+    print "cmd=$strCommand\n";
+    print "======================================================================\n";
+    $nRet = system($strCommand);
+    print "==============================$nRet=====================================\n";
+    return ($nRet>>8);
+}
