papulate_rootfs则对过渡根文件系统进行解析,如果过渡根文件系统是cpio格式的initramfs和initrd,则直接解压并释放到“/”目录中,以initramfs或initrd中的内容对“/”进行初始化,而如果是image格式的initrd则需要通过创建虚拟的ramdisk对过渡根文件系统进行挂载才能访问,具体过程如下: staticint__initpopulate_rootfs(void){...
if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) { sys_unlink("/initrd.image"); handle_initrd(); return 1; } } sys_unlink("/initrd.image"); return 0; } 建立一个ROOT_RAM)的设备节点,并将/initrd/.image释放到这个节点中,/initrd.image的内容,就是我们之前分析的image-in...
加载过渡根文件系统(如果有):如果配置了initrd/initramfs,内核会加载并解压这些过渡根文件系统,然后执行其中的初始化脚本。 挂载实际根文件系统:过渡根文件系统中的脚本会挂载实际的根文件系统,并切换到该文件系统上。 执行init程序:最后,内核会执行根文件系统中的init程序,从而完成从内核空间到用户空间的跳转。 3. 配...
所以需要initramfs或者initrd等,另外我们的root设备都是以设备文件的方式指定的, 如果没有虚拟根文件系统,设备文件也就不存在了 */// 如果有initramfs,则将内存中的initramfs 解压到虚拟根文件系统中,并执行 /init; 否则直接挂载真正根文件系统,并寻找尝试执行:/sbin/init;/etc/init;/bin/init;/bin/sh ,如果失败...
--->mount_root //将/dev/ram0设备中的跟文件系统挂载到/root目录,进入该目录并将/root设置为当前目录。 image-initrd &cpio-initrd 处理流程描述 initrd的解释是initialized RAM disk,就是启动的时候由uboot来初始化内存,当做disk来使用。 uboot启动
--->mount_root //将/dev/ram0设备中的跟文件系统挂载到/root目录,进入该目录并将/root设置为当前目录。 image-initrd &cpio-initrd 处理流程描述 initrd的解释是initialized RAM disk,就是启动的时候由uboot来初始化内存,当做disk来使用。 uboot启动
initrd/path/to/initrd.img 添加以下选项,将root设备指定为要挂载的设备: root=/dev/sdXN 这里的/dev/sdXN是你要作为根文件系统挂载的设备路径。例如,如果你要挂载/dev/sda1作为根文件系统,则填写root=/dev/sda1。 按下回车键执行启动操作。 当内核启动后,会尝试自动挂载根文件系统。如果没有成功自动挂载,则...
2、过渡根文件系统:为了适应不同的存储介质和减少内核大小,Linux使用过渡根文件系统技术,如initramfs或initrd,这些文件系统在内核启动初期被加载到内存中,并包含必要的驱动程序和工具,以便挂载实际的根文件系统。 3、实际根文件系统的挂载:一旦过渡根文件系统完成其任务,内核会根据启动参数(如root=/dev/sda1)挂载实际的...
过渡的根文件系统根据是否直接编译进内核分为initramfs和initrd,而initrd根据文件系统的打包格式又分为cpio-initrd和image-initrd,通过cpio打包的文件系统可以直接释放到“/”,而无需挂载过程,initramfs也是cpio的打包格式。 根文件系统的整体挂载流程如下图所示: ...
当内核不支持 initrd 时,rootfs_initcall 调用 noinitramfs.c 中的 default_rootfs() 函数。default_rootfs() 主要往 rootfs 中生成两个目录 /dev 和 /root 以及一个设备文件 /dev/console 。下面是default_rootfs() 精简过的流程: static int __init default_rootfs(void)...