Index: src/blob/Makefile.in
===================================================================
--- src/blob/Makefile.in	(revision 2422)
+++ src/blob/Makefile.in	(working copy)
@@ -117,7 +117,8 @@
 	blob \
 	blob-chain \
 	blob-a780 \
-	blob-a1200
+	blob-a1200 \
+	blob-gen2-kernel
 
 
 INCLUDES =  \
@@ -586,6 +587,10 @@
 blob-a1200: blob
 	dd if=blob of=$@ bs=1k seek=2 conv=sync
 
+blob-gen2-kernel: blob
+	dd if=blob-a1200 of=$@ conv=sync
+	dd if=zImage of=$@ bs=1k seek=130 conv=sync
+
 blob-chain: blob-start-chain blob-rest
 	rm -f $@
 	dd if=blob-start-chain of=$@ bs=1k conv=sync
Index: src/blob/start.S
===================================================================
--- src/blob/start.S	(revision 2422)
+++ src/blob/start.S	(working copy)
@@ -69,7 +69,7 @@
 	/* relocate the second stage loader */
 	add	r2, r0, #(128 * 1024)	/* blob maximum size is 128kB */
 	add	r0, r0, #0x1000		/* skip first 4*1024 bytes */
-	ldr	r1, =0xa1200000
+	ldr	r1, =(BLOB_ABS_BASE_ADDR - 0x1000)
 	add	r1, r1, #0x1000		/* skip over here as well */
 
 	cmp	r0, r1
@@ -87,7 +87,7 @@
 
 stack:
 	/* set up the stack pointer */
-	ldr	r0, =0xa1200000
+	ldr	r0, =(BLOB_ABS_BASE_ADDR - 0x1000)
 	add	r1, r0, #(1024 * 1024)
 	sub	sp, r1, #0x04
 	
Index: src/blob/boot_modes.c
===================================================================
--- src/blob/boot_modes.c	(revision 2422)
+++ src/blob/boot_modes.c	(working copy)
@@ -39,6 +39,7 @@
 #include <common.h>
 #include <part.h>
 #include <mmc.h>
+#include <linux.h>
 
 /* check BP_WDI flag */
 #define bp_flag_not_set()	(*(unsigned long *)(BPSIG_ADDR) == NO_FLAG)
@@ -165,6 +166,13 @@
 	return 0;
 }
 
+void boot_orignal_kernel(unsigned long *orikernel, unsigned long size)
+{	
+	memcpy(KERNEL_RAM_BASE, orikernel, size);
+	void (*theKernel) (int zero, int arch) =
+	    (void (*)(int, int))KERNEL_RAM_BASE;
+	theKernel(0,ARCH_NUMBER);
+}
 
 /* 
  * add enter_simple_pass_through_mode 
@@ -192,7 +200,14 @@
 			printf("key = %02x\n", key);
 		}
 	}
+	
+	/* turn on the power */
+	pcap_mmc_power_on(1);
+	udelay(1000);
 
+	if (is_key_press_down(0x04000021, 0))
+	    boot_orignal_kernel( 0xa0800 + 0x20000, 0x100000 - 0x20800);
+	
 
 	if (*(unsigned long *)(0xa1000000) == USBMODE_FLAG ||
 	    is_key_press_down(0x04000031, 0) ||
@@ -224,9 +239,6 @@
 		}
 	}
 
-	/* turn on the power */
-	pcap_mmc_power_on(1);
-	udelay(1000);
 //	EnableLCD_8bit_active();
 	ret = mmc_init(0);
 //	printlcd("mmc ok\n"); while(1);

