|
发表于 2011-9-24 12:29:06
|
显示全部楼层
Post by dshbusiness;2152659
最近在看Arch的启动脚本。Arch的wiki上面说当内核载入内存以后会执行init,init会解析inittab文件。我查看了系统的inittab文件,里面有类似于:
rc::sysinit:/etc/rc.sysinit
这样的字段。那个/etc/rc.sysinit是一个bash脚本,但是此时bash进程不是还没有运行吗?这个脚本是怎样被执行的呢?
谢谢
载入内核后执行的 init 是 initramfs 中的 /init。这个阶段是 early userspace,/ 分区还未挂载,更别说运行/etc/rc.sysint了。
这个阶段的 init 的内容你可以解压 /boot/initramfs-linux.img 看看,或者直接查看 /lib/initcpio/init。你会发现这个也是一个 shell 脚本,它的运行是通过 initramfs 中的 /bin/busybox 实现的。
在 early userspace 的最后阶段,/ 分区被挂载,并替换 initramfs 成为 rootfs,接着 /sbin/init 代替原来的 init 进程。这个 /sbin/init 才是你所说的解析 inittab,运行 /etc/rc.sysinit 的那个 init。 |
|