diff -uNr kernel-adaptation-n950-n9-mer-n9-2.6.32-20121301/arch/arm/configs/rm696_nemo_defconfig n9-ubiboot-2.6.32-20121301/arch/arm/configs/rm696_nemo_defconfig
--- kernel-adaptation-n950-n9-mer-n9-2.6.32-20121301/arch/arm/configs/rm696_nemo_defconfig	2012-12-06 23:41:08.000000000 +0200
+++ n9-ubiboot-2.6.32-20121301/arch/arm/configs/rm696_nemo_defconfig	2013-02-26 21:55:38.670299285 +0200
@@ -34,7 +34,7 @@
 CONFIG_BROKEN_ON_SMP=y
 CONFIG_LOCK_KERNEL=y
 CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION="-ubiboot-01"
 CONFIG_LOCALVERSION_AUTO=y
 CONFIG_HAVE_KERNEL_GZIP=y
 CONFIG_HAVE_KERNEL_LZO=y
@@ -366,9 +366,10 @@
 #
 # Boot options
 #
+CONFIG_CMDLINE_OVERRIDE=y
 CONFIG_ZBOOT_ROM_TEXT=0x0
 CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="init=/sbin/preinit root=0xB302 rootfstype=ext4 rw console=ttyS0,115200n8 omap3_die_id"
+CONFIG_CMDLINE="init=/init ubi.mtd=4 root=ubi0:var rootfstype=ubifs rw console=tty0 mtdparts=omap2-onenand:1024k(bootloader),2816k@1024k(config),16384k@3840k(kernel),2048k@20224k(log),469248k@22272k(var),32768k@491520k(moslo) gpio=cmt_apeslpx:93:sysfs:output,cmt_en:23:sysfs:init_active:output,cmt_rst_rq:88:sysfs:init_active:output,sleep_ind:92:sysfs:output"
 # CONFIG_XIP_KERNEL is not set
 CONFIG_KEXEC=y
 CONFIG_ATAGS_PROC=y
@@ -739,8 +740,8 @@
 #
 CONFIG_MTD_CHAR=y
 CONFIG_MTD_BLKDEVS=y
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_BLOCK_RO=y
 # CONFIG_FTL is not set
 # CONFIG_NFTL is not set
 # CONFIG_INFTL is not set
@@ -779,7 +780,7 @@
 # Mapping drivers for chip access
 #
 # CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_PHYSMAP=y
 # CONFIG_MTD_ARM_INTEGRATOR is not set
 # CONFIG_MTD_OMAP_NOR is not set
 # CONFIG_MTD_PLATRAM is not set
@@ -817,7 +818,7 @@
 CONFIG_MTD_UBI=y
 CONFIG_MTD_UBI_WL_THRESHOLD=4096
 CONFIG_MTD_UBI_BEB_RESERVE=1
-# CONFIG_MTD_UBI_GLUEBI is not set
+CONFIG_MTD_UBI_GLUEBI=y
 CONFIG_MTD_UBI_DEBUG=y
 # CONFIG_PARPORT is not set
 CONFIG_BLK_DEV=y
diff -uNr kernel-adaptation-n950-n9-mer-n9-2.6.32-20121301/arch/arm/Kconfig n9-ubiboot-2.6.32-20121301/arch/arm/Kconfig
--- kernel-adaptation-n950-n9-mer-n9-2.6.32-20121301/arch/arm/Kconfig	2012-12-06 23:41:08.000000000 +0200
+++ n9-ubiboot-2.6.32-20121301/arch/arm/Kconfig	2013-02-26 21:52:20.701317609 +0200
@@ -1279,6 +1279,15 @@
 	  time by entering them here. As a minimum, you should specify the
 	  memory size and the root device (e.g., mem=64M root=/dev/nfs).
 
+config CMDLINE_OVERRIDE
+        bool "Built-in command line overrides boot loader arguments"
+        default n
+        help
+          Set this option to 'Y' to have the kernel ignore the boot loader
+          command line, and use ONLY the built-in command line.
+          This is used to work around broken boot loaders.  This should
+          be set to 'N' under normal conditions.
+
 config XIP_KERNEL
 	bool "Kernel Execute-In-Place from ROM"
 	depends on !ZBOOT_ROM
diff -uNr kernel-adaptation-n950-n9-mer-n9-2.6.32-20121301/arch/arm/kernel/setup.c n9-ubiboot-2.6.32-20121301/arch/arm/kernel/setup.c
--- kernel-adaptation-n950-n9-mer-n9-2.6.32-20121301/arch/arm/kernel/setup.c	2012-12-06 23:41:08.000000000 +0200
+++ n9-ubiboot-2.6.32-20121301/arch/arm/kernel/setup.c	2013-02-26 22:00:03.843614216 +0200
@@ -126,6 +126,8 @@
 static char __initdata command_line[COMMAND_LINE_SIZE];
 
 static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
+static char overriden_command_line[COMMAND_LINE_SIZE];
+char *original_command_line;
 static union { char c[4]; unsigned long l; } endian_test __initdata = { { 'l', '?', '?', 'b' } };
 #define ENDIANNESS ((char)endian_test.l)
 
@@ -632,11 +634,24 @@
 
 __tagtable(ATAG_REVISION, parse_tag_revision);
 
+#ifdef CONFIG_CMDLINE_OVERRIDE
+static inline int __init parse_tag_cmdline(const struct tag *tag)
+{
+	printk("Overriding kernel command line\n");
+	strlcpy(overriden_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
+	overriden_command_line[COMMAND_LINE_SIZE-1] = '\0';
+	printk("Original command line: %s\n", tag->u.cmdline.cmdline);
+	original_command_line = (char *)overriden_command_line;
+	return 0;
+}
+#else
 static int __init parse_tag_cmdline(const struct tag *tag)
 {
+	printk("Using the given kernel command line\n");
 	strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
 	return 0;
 }
+#endif
 
 __tagtable(ATAG_CMDLINE, parse_tag_cmdline);
 
diff -uNr kernel-adaptation-n950-n9-mer-n9-2.6.32-20121301/fs/proc/cmdline.c n9-ubiboot-2.6.32-20121301/fs/proc/cmdline.c
--- kernel-adaptation-n950-n9-mer-n9-2.6.32-20121301/fs/proc/cmdline.c	2012-12-06 23:41:08.000000000 +0200
+++ n9-ubiboot-2.6.32-20121301/fs/proc/cmdline.c	2013-02-26 21:52:20.701317609 +0200
@@ -27,3 +27,30 @@
 	return 0;
 }
 module_init(proc_cmdline_init);
+
+#ifdef CONFIG_CMDLINE_OVERRIDE
+static int original_cmdline_proc_show(struct seq_file *m, void *v)
+{
+	seq_printf(m, "%s\n", original_command_line);
+	return 0;
+}
+
+static int original_cmdline_proc_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, original_cmdline_proc_show, NULL);
+}
+
+static const struct file_operations original_cmdline_proc_fops = {
+	.open		= original_cmdline_proc_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
+static int __init proc_original_cmdline_init(void)
+{
+	proc_create("original_cmdline", 0, NULL, &original_cmdline_proc_fops);
+	return 0;
+}
+module_init(proc_original_cmdline_init);
+#endif
diff -uNr kernel-adaptation-n950-n9-mer-n9-2.6.32-20121301/include/linux/init.h n9-ubiboot-2.6.32-20121301/include/linux/init.h
--- kernel-adaptation-n950-n9-mer-n9-2.6.32-20121301/include/linux/init.h	2012-12-06 23:41:08.000000000 +0200
+++ n9-ubiboot-2.6.32-20121301/include/linux/init.h	2013-02-26 21:52:20.701317609 +0200
@@ -141,6 +141,7 @@
 extern int do_one_initcall(initcall_t fn);
 extern char __initdata boot_command_line[];
 extern char *saved_command_line;
+extern char *original_command_line;
 extern unsigned int reset_devices;
 
 /* used by init/main.c */
