staticvoid __init do_populate_rootfs(void *unused, async_cookie_t cookie) { /* Load the built in initramfs *///先尝试initramfs文件是否直接编译进了内核,CONFIG_INITRAMFS_SOURCE char *err = unpack_to_rootfs(__initramfs_start, __initramfs_size); if (err) panic_show_mem("%s", err); /* Failed to decompress INTERNAL initramfs */
if (!initrd_start || IS_ENABLED(CONFIG_INITRAMFS_FORCE)) goto done;
if (IS_ENABLED(CONFIG_BLK_DEV_RAM)) printk(KERN_INFO "Trying to unpack rootfs image as initramfs...\n"); else printk(KERN_INFO "Unpacking initramfs...\n");
done: /* * If the initrd region is overlapped with crashkernel reserved region, * free only memory that is not part of crashkernel region. */ if (!do_retain_initrd && initrd_start && !kexec_free_initrd()) free_initrd_mem(initrd_start, initrd_end); //释放这部分保留内存 initrd_start = 0; initrd_end = 0;