From ff12055f9820ac8af620050f5d75e157a9a2fca3 Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Sat, 15 Dec 2018 21:24:07 +0800 Subject: [PATCH] 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 --- init/initramfs.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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 @@ -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) {