这里开始看rootfs的挂载流程,也就是root="/dev/xxxxxx"这样的指示,如何让内核启动rootfs。
常常看到 root=/dev/sd1 root=/dev/mmcblk01这样的
在内核中有很多 __setup定义的宏。主要用来处理commdline启动项参数
在init/do_mount.s中
static int __init root_dev_setup(char *line)
{
strlcpy(saved_root_name, line, sizeof(saved_root_name));
return 1;
}
__setup("root=", root_dev_setup);
表示命令行中如果遇到了root=xxxxx那么就调用root_dev_setup。主要是将字符串拷贝到saved_root_name当中
在rest_init中 启动kernel_init线程以后,kernel_init第一步就是调用kernel_init_freeable
在kernel_init_freeable中检查ramdisk_execute_command有没有。如果没有的话就会调用prepare_namespace
if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) {
ramdisk_execute_command = NULL;
prepare_namespace();
}