aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Paul Saman <jean-paul.saman@nxp.com>2007-02-10 04:44:43 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-11 13:51:25 -0500
commitc33df4eaaf41fd3e34837a6ae9a5f9970c393d9f (patch)
treeb53498e6cd10a6da004b1835f285ed64493abdf2
parentdd65aa6690e30fdad84a62191c7ab37da89d9865 (diff)
[PATCH] disable init/initramfs.c
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 current init/initramfs.c code. usr/initramfs_data.o compiles to a size of ~15 kbytes. Disabling BLK_DEV_RAM and BLK_DEV_INTRD shrinks the kernel code size with ~60 Kbytes. This patch avoids compiling in the code and data for initramfs support if CONFIG_BLK_DEV_INITRD is not defined. Instead of the initramfs code and data it uses a small routine in init/noinitramfs.c to setup an initial static default environment for mounting a rootfilesystem later on in the kernel initialisation process. The new code is: 164 bytes of size. The patch is separated in two parts: 1) doesn't compile initramfs code when CONFIG_BLK_DEV_INITRD is not set 2) changing all plaforms vmlinux.lds.S files to not reserve an area of PAGE_SIZE when CONFIG_BLK_DEV_INITRD is not set. [deweerdt@free.fr: warning fix] Signed-off-by: Jean-Paul Saman <jean-paul.saman@nxp.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: <linux-arch@vger.kernel.org> Signed-off-by: Frederik Deweerdt <frederik.deweerdt@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/block/Kconfig4
-rw-r--r--init/Kconfig4
-rw-r--r--init/Makefile7
-rw-r--r--init/noinitramfs.c52
-rw-r--r--usr/Makefile2
5 files changed, 66 insertions, 3 deletions
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index 58c1debf86f1..cacb1c816e35 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -417,8 +417,10 @@ config BLK_DEV_INITRD
417 etc. See <file:Documentation/initrd.txt> for details. 417 etc. See <file:Documentation/initrd.txt> for details.
418 418
419 If RAM disk support (BLK_DEV_RAM) is also included, this 419 If RAM disk support (BLK_DEV_RAM) is also included, this
420 also enables initial RAM disk (initrd) support. 420 also enables initial RAM disk (initrd) support and adds
421 15 Kbytes (more on some other architectures) to the kernel size.
421 422
423 If unsure say Y.
422 424
423config CDROM_PKTCDVD 425config CDROM_PKTCDVD
424 tristate "Packet writing on CD/DVD media" 426 tristate "Packet writing on CD/DVD media"
diff --git a/init/Kconfig b/init/Kconfig
index a3f83e2c8250..ab6942231045 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -280,8 +280,12 @@ config RELAY
280 280
281 If unsure, say N. 281 If unsure, say N.
282 282
283if BLK_DEV_INITRD
284
283source "usr/Kconfig" 285source "usr/Kconfig"
284 286
287endif
288
285config CC_OPTIMIZE_FOR_SIZE 289config CC_OPTIMIZE_FOR_SIZE
286 bool "Optimize for size (Look out for broken compilers!)" 290 bool "Optimize for size (Look out for broken compilers!)"
287 default y 291 default y
diff --git a/init/Makefile b/init/Makefile
index 633a268d270d..0154aea1e52d 100644
--- a/init/Makefile
+++ b/init/Makefile
@@ -2,7 +2,12 @@
2# Makefile for the linux kernel. 2# Makefile for the linux kernel.
3# 3#
4 4
5obj-y := main.o version.o mounts.o initramfs.o 5obj-y := main.o version.o mounts.o
6ifneq ($(CONFIG_BLK_DEV_INITRD),y)
7obj-y += noinitramfs.o
8else
9obj-$(CONFIG_BLK_DEV_INITRD) += initramfs.o
10endif
6obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o 11obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o
7 12
8mounts-y := do_mounts.o 13mounts-y := do_mounts.o
diff --git a/init/noinitramfs.c b/init/noinitramfs.c
new file mode 100644
index 000000000000..f4c1a3a1b8c5
--- /dev/null
+++ b/init/noinitramfs.c
@@ -0,0 +1,52 @@
1/*
2 * init/noinitramfs.c
3 *
4 * Copyright (C) 2006, NXP Semiconductors, All Rights Reserved
5 * Author: Jean-Paul Saman <jean-paul.saman@nxp.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; version 2 of the License.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20#include <linux/init.h>
21#include <linux/stat.h>
22#include <linux/kdev_t.h>
23#include <linux/syscalls.h>
24
25/*
26 * Create a simple rootfs that is similar to the default initramfs
27 */
28static int __init default_rootfs(void)
29{
30 int err;
31
32 err = sys_mkdir("/dev", 0755);
33 if (err < 0)
34 goto out;
35
36 err = sys_mknod((const char __user *) "/dev/console",
37 S_IFCHR | S_IRUSR | S_IWUSR,
38 new_encode_dev(MKDEV(5, 1)));
39 if (err < 0)
40 goto out;
41
42 err = sys_mkdir("/root", 0700);
43 if (err < 0)
44 goto out;
45
46 return 0;
47
48out:
49 printk(KERN_WARNING "Failed to create a rootfs\n");
50 return err;
51}
52rootfs_initcall(default_rootfs);
diff --git a/usr/Makefile b/usr/Makefile
index 382702ad663b..201f27f8cbaf 100644
--- a/usr/Makefile
+++ b/usr/Makefile
@@ -7,7 +7,7 @@ PHONY += klibcdirs
7 7
8 8
9# Generate builtin.o based on initramfs_data.o 9# Generate builtin.o based on initramfs_data.o
10obj-y := initramfs_data.o 10obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o
11 11
12# initramfs_data.o contains the initramfs_data.cpio.gz image. 12# initramfs_data.o contains the initramfs_data.cpio.gz image.
13# The image is included using .incbin, a dependency which is not 13# The image is included using .incbin, a dependency which is not