RFC [PATCH] 1/2 disable initramfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The file init/initramfs.c is always compiled and linked in the kernel 
vmlinux even when BLK_DEV_RAM and BLK_DEV_INITRD are disabled and the 
system isn't using any form of an initramfs or initrd. In this situation 
the code is only used to unpack a (static) default initial rootfilesystem. 
The init/initramfs.c code compiles to a size of 60 kbytes.

This patch makes it configurable (CONFIG_BLK_DEV_INITRAMFS) to disable the 
use of a initramfs (60 kbytes of code). Instead of the init/initramfs.c 
code it uses a small routine in init/main.c to setup an initial static 
environment for mounting a rootfilesystem later on in the kernel 
initialisation process.

Signed-off-by: Jean-Paul Saman <[email protected]>

Index: linux-2.6.git/drivers/block/Kconfig
===================================================================
--- linux-2.6.git.orig/drivers/block/Kconfig    2006-12-06 
15:27:51.000000000 +0100
+++ linux-2.6.git/drivers/block/Kconfig 2006-12-06 16:35:40.000000000 
+0100
@@ -411,19 +411,32 @@ config BLK_DEV_RAM_BLOCKSIZE
          setups function - apparently needed by the rd_load_image routine
          that supposes the filesystem in the image uses a 1024 blocksize.
 
+config BLK_DEV_INITRAMFS
+       bool "Enable RAM filesystem (initramfs) support"
+       default y
+       help
+         The initial RAM filesystem is a ramfs filesystem which can be
+         linked in the kernel and that is mounted as root before the 
normal
+         boot procedure. It is typically used to load modules needed to 
mount
+         the "real" root file system, etc. See 
<file:Documentation/initrd.txt>
+         for details.
+
+         Enabling BLK_DEV_RAM and BLK_DEV_INITRD adds 60 kbytes size to 
your kernel.
+
+         If unsure say Y.
+
 config BLK_DEV_INITRD
-       bool "Initial RAM filesystem and RAM disk (initramfs/initrd) 
support"
-       depends on BROKEN || !FRV
+       bool "Check for Initial RAM disk (initrd/initramfs) on kernel 
boot"
+       depends on BLK_DEV_INITRAMFS && ( BROKEN || !FRV )
        help
-         The initial RAM filesystem is a ramfs which is loaded by the
+         The initial RAM disk is a ramfs filesystem which is loaded by 
the
          boot loader (loadlin or lilo) and that is mounted as root
          before the normal boot procedure. It is typically used to
          load modules needed to mount the "real" root file system,
          etc. See <file:Documentation/initrd.txt> for details.
 
          If RAM disk support (BLK_DEV_RAM) is also included, this
-         also enables initial RAM disk (initrd) support.
-
+         also enable initial RAM filesystem disk support as initrd.
 
 config CDROM_PKTCDVD
        tristate "Packet writing on CD/DVD media"
Index: linux-2.6.git/init/Makefile
===================================================================
--- linux-2.6.git.orig/init/Makefile    2006-12-06 15:27:51.000000000 
+0100
+++ linux-2.6.git/init/Makefile 2006-12-06 15:27:54.000000000 +0100
@@ -2,7 +2,8 @@
 # Makefile for the linux kernel.
 #
 
-obj-y                          := main.o version.o mounts.o initramfs.o
+obj-y                          := main.o version.o mounts.o
+obj-$(CONFIG_BLK_DEV_INITRAMFS) := initramfs.o
 obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o
 
 mounts-y                       := do_mounts.o
Index: linux-2.6.git/init/main.c
===================================================================
--- linux-2.6.git.orig/init/main.c      2006-12-06 15:27:51.000000000 
+0100
+++ linux-2.6.git/init/main.c   2006-12-06 15:27:54.000000000 +0100
@@ -86,7 +86,9 @@ extern void pidmap_init(void);
 extern void prio_tree_init(void);
 extern void radix_tree_init(void);
 extern void free_initmem(void);
+#ifdef CONFIG_BLK_DEV_INITRAMFS
 extern void populate_rootfs(void);
+#endif
 extern void driver_init(void);
 extern void prepare_namespace(void);
 #ifdef CONFIG_ACPI
@@ -705,6 +707,22 @@ static void run_init_process(char *init_
        kernel_execve(init_filename, argv_init, envp_init);
 }
 
+#ifndef CONFIG_BLK_DEV_INITRAMFS
+/*
+ * Create a simple rootfs that is similar to the default initramfs
+ */
+static void populate_rootfs(void)
+{
+        int mkdir_err = sys_mkdir("/dev", 0755);
+        int err = sys_mknod((const char __user *) "/dev/console",
+                                S_IFCHR | S_IRUSR | S_IWUSR,
+                                new_encode_dev(MKDEV(5, 1)));
+        if (err == -EROFS )
+               printk( "Warning: Failed to create a rootfs\n" );
+        mkdir_err = sys_mkdir("/root", 0700);
+}
+#endif
+
 static int init(void * unused)
 {
        lock_kernel();
@@ -741,6 +759,7 @@ static int init(void * unused)
 
        do_basic_setup();
 
+#ifdef CONFIG_BLK_DEV_INITRAMFS
        /*
         * check if there is an early userspace init.  If yes, let it do 
all
         * the work
@@ -753,7 +772,10 @@ static int init(void * unused)
                ramdisk_execute_command = NULL;
                prepare_namespace();
        }
-
+#else
+       ramdisk_execute_command = NULL;
+       prepare_namespace();
+#endif
        /*
         * Ok, we have completed the initial bootup, and
         * we're essentially up and running. Get rid of the
Index: linux-2.6.git/usr/Makefile
===================================================================
--- linux-2.6.git.orig/usr/Makefile     2006-12-06 15:27:51.000000000 
+0100
+++ linux-2.6.git/usr/Makefile  2006-12-06 15:27:54.000000000 +0100
@@ -7,7 +7,7 @@ PHONY += klibcdirs
 
 
 # Generate builtin.o based on initramfs_data.o
-obj-y := initramfs_data.o
+obj-$(CONFIG_BLK_DEV_INITRAMFS) := initramfs_data.o
 
 # initramfs_data.o contains the initramfs_data.cpio.gz image.
 # The image is included using .incbin, a dependency which is not
Index: linux-2.6.git/init/Kconfig
===================================================================
--- linux-2.6.git.orig/init/Kconfig     2006-12-06 15:27:51.000000000 
+0100
+++ linux-2.6.git/init/Kconfig  2006-12-06 15:27:54.000000000 +0100
@@ -280,8 +280,12 @@ config RELAY
 
          If unsure, say N.
 
+if CONFIG_BLK_DEV_INITRAMFS
+
 source "usr/Kconfig"
 
+endif
+
 config CC_OPTIMIZE_FOR_SIZE
        bool "Optimize for size (Look out for broken compilers!)"
        default y

--------
Kind greetings,

Jean-Paul Saman

NXP Semiconductors CTO/RTG DesignIP
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux