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 | ||
