diff options
-rw-r--r-- | include/asm-generic/vmlinux.lds.h | 3 | ||||
-rw-r--r-- | init/initramfs.c | 9 | ||||
-rw-r--r-- | usr/initramfs_data.S | 16 |
3 files changed, 17 insertions, 11 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 030a954ed292..0c6387d6a6ae 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
@@ -633,7 +633,8 @@ | |||
633 | . = ALIGN(PAGE_SIZE); \ | 633 | . = ALIGN(PAGE_SIZE); \ |
634 | VMLINUX_SYMBOL(__initramfs_start) = .; \ | 634 | VMLINUX_SYMBOL(__initramfs_start) = .; \ |
635 | *(.init.ramfs) \ | 635 | *(.init.ramfs) \ |
636 | VMLINUX_SYMBOL(__initramfs_end) = .; | 636 | . = ALIGN(8); \ |
637 | *(.init.ramfs.info) | ||
637 | #else | 638 | #else |
638 | #define INIT_RAM_FS | 639 | #define INIT_RAM_FS |
639 | #endif | 640 | #endif |
diff --git a/init/initramfs.c b/init/initramfs.c index 4b9c20205092..371c3da64ad3 100644 --- a/init/initramfs.c +++ b/init/initramfs.c | |||
@@ -483,7 +483,8 @@ static int __init retain_initrd_param(char *str) | |||
483 | } | 483 | } |
484 | __setup("retain_initrd", retain_initrd_param); | 484 | __setup("retain_initrd", retain_initrd_param); |
485 | 485 | ||
486 | extern char __initramfs_start[], __initramfs_end[]; | 486 | extern char __initramfs_start[]; |
487 | extern unsigned long __initramfs_size; | ||
487 | #include <linux/initrd.h> | 488 | #include <linux/initrd.h> |
488 | #include <linux/kexec.h> | 489 | #include <linux/kexec.h> |
489 | 490 | ||
@@ -570,8 +571,7 @@ static void __init clean_rootfs(void) | |||
570 | 571 | ||
571 | static int __init populate_rootfs(void) | 572 | static int __init populate_rootfs(void) |
572 | { | 573 | { |
573 | char *err = unpack_to_rootfs(__initramfs_start, | 574 | char *err = unpack_to_rootfs(__initramfs_start, __initramfs_size); |
574 | __initramfs_end - __initramfs_start); | ||
575 | if (err) | 575 | if (err) |
576 | panic(err); /* Failed to decompress INTERNAL initramfs */ | 576 | panic(err); /* Failed to decompress INTERNAL initramfs */ |
577 | if (initrd_start) { | 577 | if (initrd_start) { |
@@ -585,8 +585,7 @@ static int __init populate_rootfs(void) | |||
585 | return 0; | 585 | return 0; |
586 | } else { | 586 | } else { |
587 | clean_rootfs(); | 587 | clean_rootfs(); |
588 | unpack_to_rootfs(__initramfs_start, | 588 | unpack_to_rootfs(__initramfs_start, __initramfs_size); |
589 | __initramfs_end - __initramfs_start); | ||
590 | } | 589 | } |
591 | printk(KERN_INFO "rootfs image is not initramfs (%s)" | 590 | printk(KERN_INFO "rootfs image is not initramfs (%s)" |
592 | "; looks like an initrd\n", err); | 591 | "; looks like an initrd\n", err); |
diff --git a/usr/initramfs_data.S b/usr/initramfs_data.S index 49a545fea120..b9efed5e35cc 100644 --- a/usr/initramfs_data.S +++ b/usr/initramfs_data.S | |||
@@ -11,11 +11,7 @@ | |||
11 | -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o | 11 | -T initramfs_data.scr initramfs_data.cpio.gz -o initramfs_data.o |
12 | ld -m elf_i386 -r -o built-in.o initramfs_data.o | 12 | ld -m elf_i386 -r -o built-in.o initramfs_data.o |
13 | 13 | ||
14 | initramfs_data.scr looks like this: | 14 | For including the .init.ramfs sections, see include/asm-generic/vmlinux.lds. |
15 | SECTIONS | ||
16 | { | ||
17 | .init.ramfs : { *(.data) } | ||
18 | } | ||
19 | 15 | ||
20 | The above example is for i386 - the parameters vary from architectures. | 16 | The above example is for i386 - the parameters vary from architectures. |
21 | Eventually look up LDFLAGS_BLOB in an older version of the | 17 | Eventually look up LDFLAGS_BLOB in an older version of the |
@@ -28,4 +24,14 @@ SECTIONS | |||
28 | #include <linux/stringify.h> | 24 | #include <linux/stringify.h> |
29 | 25 | ||
30 | .section .init.ramfs,"a" | 26 | .section .init.ramfs,"a" |
27 | __irf_start: | ||
31 | .incbin __stringify(INITRAMFS_IMAGE) | 28 | .incbin __stringify(INITRAMFS_IMAGE) |
29 | __irf_end: | ||
30 | .section .init.ramfs.info,"a" | ||
31 | .globl __initramfs_size | ||
32 | __initramfs_size: | ||
33 | #ifdef CONFIG_32BIT | ||
34 | .long __irf_end - __irf_start | ||
35 | #else | ||
36 | .quad __irf_end - __irf_start | ||
37 | #endif | ||