记录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(“.”);