do_mounts_initrd.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // SPDX-License-Identifier: GPL-2.0
  2. #include <linux/unistd.h>
  3. #include <linux/kernel.h>
  4. #include <linux/fs.h>
  5. #include <linux/initrd.h>
  6. #include "do_mounts.h"
  7. unsigned long initrd_start, initrd_end;
  8. int initrd_below_start_ok;
  9. static int __initdata mount_initrd = 1;
  10. phys_addr_t phys_initrd_start __initdata;
  11. unsigned long phys_initrd_size __initdata;
  12. static int __init no_initrd(char *str)
  13. {
  14. pr_warn("noinitrd option is deprecated and will be removed soon\n");
  15. mount_initrd = 0;
  16. return 1;
  17. }
  18. __setup("noinitrd", no_initrd);
  19. static int __init early_initrdmem(char *p)
  20. {
  21. phys_addr_t start;
  22. unsigned long size;
  23. char *endp;
  24. start = memparse(p, &endp);
  25. if (*endp == ',') {
  26. size = memparse(endp + 1, NULL);
  27. phys_initrd_start = start;
  28. phys_initrd_size = size;
  29. }
  30. return 0;
  31. }
  32. early_param("initrdmem", early_initrdmem);
  33. static int __init early_initrd(char *p)
  34. {
  35. return early_initrdmem(p);
  36. }
  37. early_param("initrd", early_initrd);
  38. void __init initrd_load(void)
  39. {
  40. if (mount_initrd) {
  41. create_dev("/dev/ram", Root_RAM0);
  42. /*
  43. * Load the initrd data into /dev/ram0.
  44. */
  45. if (rd_load_image()) {
  46. pr_warn("using deprecated initrd support, will be removed in January 2027; "
  47. "use initramfs instead or (as a last resort) /sys/firmware/initrd; "
  48. "see section \"Workaround\" in "
  49. "https://lore.kernel.org/lkml/20251010094047.3111495-1-safinaskar@gmail.com\n");
  50. }
  51. }
  52. init_unlink("/initrd.image");
  53. }