diff options
author | Jeffy Chen <jeffy.chen@rock-chips.com> | 2018-12-15 21:24:07 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2018-12-18 14:50:55 +0800 |
commit | ff12055f9820ac8af620050f5d75e157a9a2fca3 (patch) | |
tree | 256376285ccda3954bdf7375b8736ee56ab124fa /init | |
parent | b41c3c70fb533e1602d65c851af2b606be7523e9 (diff) |
init/initramfs: Add dump_initrd command line option
Add a dump_initrd option to allow dumping /initrd.image after successful
unpack.
Require BLK_DEV_RAM=y.
Change-Id: I77a41867afa7b4a51604a5153792a49efbab6189
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Diffstat (limited to 'init')
-rw-r--r-- | init/initramfs.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/init/initramfs.c b/init/initramfs.c index 3340bf219a20..d53138c40639 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -525,6 +525,17 @@ static int __init retain_initrd_param(char *str) } __setup("retain_initrd", retain_initrd_param); +static int __initdata do_dump_initrd; + +static int __init dump_initrd_param(char *str) +{ + if (*str) + return 0; + do_dump_initrd = 1; + return 1; +} +__setup("dump_initrd", dump_initrd_param); + extern char __initramfs_start[]; extern unsigned long __initramfs_size; #include <linux/initrd.h> @@ -642,6 +653,9 @@ static int __init populate_rootfs(void) err = unpack_to_rootfs((char *)initrd_start, initrd_end - initrd_start); if (!err) { + if (do_dump_initrd) + goto dump; + free_initrd(); goto done; } else { @@ -650,6 +664,7 @@ static int __init populate_rootfs(void) } printk(KERN_INFO "rootfs image is not initramfs (%s)" "; looks like an initrd\n", err); + dump: fd = sys_open("/initrd.image", O_WRONLY|O_CREAT, 0700); if (fd >= 0) { |