int __init initrd_load(void)
{
if (mount_initrd) {
create_dev("/dev/ram", Root_RAM0);
/*
* Load the initrd data into /dev/ram0. Execute it as initrd
* unless /dev/ram0 is supposed to be our actual root device,
* in that case the ram disk is just set up here, and gets
* mounted in the normal path.
*/
下面在rd_load_image之后是直接退出,因为我们将RAM0当做根文件系统挂载的。
if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) {
sys_unlink("/initrd.image");
handle_initrd();
return 1;
}
}
sys_unlink("/initrd.image");
return 0;
}
下面看看挂载/dev/ram0 的过程
void __init mount_root(void)
{
看一种情况就可
#ifdef CONFIG_BLOCK
create_dev("/dev/root", ROOT_DEV); 创建/dev/rma0 一样的设备文件
mount_block_root("/dev/root", root_mountflags);
上面的这行就是将我们的Intird镜像真正的挂载成根文件系统,这样就完成了根文件系统的挂载,然后就会启动文件系统里面的初始化文件,/linuxrc或者/init 等。
#endif
}
其中做一些说明其实rootfs 和 ramfs 一样是同一种基于内存的文件系统
static struct file_system_type ramfs_fs_type = {
.name = "ramfs",
.get_sb = ramfs_get_sb,
.kill_sb = ramfs_kill_sb,
};
static struct file_system_type rootfs_fs_type = {
.name = "rootfs",
.get_sb = rootfs_get_sb,
.kill_sb = kill_litter_super,
};