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]