第16章 挂载根文件系统与执行/sbin/init
内核版本:Linux 7.1.3
架构:x86_64
核心源码路径:
init/do_mounts.cinit/do_mounts_initrd.cinit/do_mounts_rd.cfs/exec.cfs/binfmt_elf.cfs/open.cblock/blk-core.c
内核启动主线的终点不是start_kernel()返回,而是 PID 1 成功执行用户态 init。直到kernel_execve("/sbin/init", ...)成功前,系统仍然处在“内核替用户态铺路”的阶段:根设备要找到,根文件系统要挂上,/dev要有,initramfs 或真实根要切换完成,最后 ELF 加载器把用户态程序映射进 PID 1 的地址空间。
这一步可以看作启动流程的惊险一跃:PID 1 从一个内核函数kernel_init(),变成第一个真正运行用户态代码的进程。
16.1root=如何进入内核
init