linux根文件系统挂载过程
记录rootfs的初始化流程
配置
cmdline中添加root的配置,比如root=ubi0:rootfs
root_dev_setup函数中使用root的配置,暂存到saved_root_name中
__setup(“root=”, root_dev_setup);
cmdline中添加rootfs的可读写属性
只读:ro
可读写:rw
__setup(“ro”, readonly);
__setup(“rw”, readwrite);
流程
第一阶段
start_kernel
vfs_caches_init
mnt_init
init_rootfs:注册rootfs
第二阶段
populate_rootfs
default_rootfs:创建/dev/console和/root节点
rootfs_initcall(populate_rootfs);
调用流程
start_kernel->kernel_init
kernel_init_freeable
do_basic_setup
do_initcalls->rootfs_initcall
注:此时rootfs还没有挂载,现在的根目录是ramfs
第三阶段
start_kernel->kernel_init
prepare_namespace
mount_block_root(mtd或ubi类型则在些阶段挂载)
mount_root:挂载
注:此时挂载的路径是ramfs的/root
第四阶段
把ramfs的/root切换到/
sys_mount(“.”, “/“, NULL, MS_MOVE, NULL);
sys_chroot(“.”);