From e0302dc30616a8a7566344495e63703f2ca53513 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 | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/init/initramfs.c b/init/initramfs.c index cd5fb00fcb54..b2cb82ba54c5 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -513,6 +513,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 @@ -612,14 +623,19 @@ static int __init populate_rootfs(void) printk(KERN_INFO "Trying to unpack rootfs image as initramfs...\n"); err = unpack_to_rootfs((char *)initrd_start, initrd_end - initrd_start); - if (!err) + if (!err) { + if (do_dump_initrd) + goto dump; + goto done; + } clean_rootfs(); unpack_to_rootfs(__initramfs_start, __initramfs_size); printk(KERN_INFO "rootfs image is not initramfs (%s)" "; looks like an initrd\n", err); + dump: fd = ksys_open("/initrd.image", O_WRONLY|O_CREAT, 0700); if (fd >= 0) {