root/init/do_mounts_initrd.c
// SPDX-License-Identifier: GPL-2.0
#include <linux/unistd.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/initrd.h>

#include "do_mounts.h"

unsigned long initrd_start, initrd_end;
int initrd_below_start_ok;
static int __initdata mount_initrd = 1;

phys_addr_t phys_initrd_start __initdata;
unsigned long phys_initrd_size __initdata;

static int __init no_initrd(char *str)
{
        pr_warn("noinitrd option is deprecated and will be removed soon\n");
        mount_initrd = 0;
        return 1;
}

__setup("noinitrd", no_initrd);

static int __init early_initrdmem(char *p)
{
        phys_addr_t start;
        unsigned long size;
        char *endp;

        start = memparse(p, &endp);
        if (*endp == ',') {
                size = memparse(endp + 1, NULL);

                phys_initrd_start = start;
                phys_initrd_size = size;
        }
        return 0;
}
early_param("initrdmem", early_initrdmem);

static int __init early_initrd(char *p)
{
        return early_initrdmem(p);
}
early_param("initrd", early_initrd);

void __init initrd_load(void)
{
        if (mount_initrd) {
                create_dev("/dev/ram", Root_RAM0);
                /*
                 * Load the initrd data into /dev/ram0.
                 */
                if (rd_load_image()) {
                        pr_warn("using deprecated initrd support, will be removed in January 2027; "
                                "use initramfs instead or (as a last resort) /sys/firmware/initrd; "
                                "see section \"Workaround\" in "
                                "https://lore.kernel.org/lkml/20251010094047.3111495-1-safinaskar@gmail.com\n");
                }
        }
        init_unlink("/initrd.image");
}