switch_root
与run_init
之间的区别除了switch_root
busybox
run_init
klibc
来自{{1}}之外?
非常感谢
答案 0 :(得分:1)
它们都执行完全相同的功能,即从initramfs切换到“真实”根和execv(3)
“真实”init(8)
程序。他们都假设应该成为root的文件系统已经安装在某个目录上,并将它们作为参数。
(initramfs是一个(通常)临时内存文件系统,由引导加载程序加载。它的目的是在安装真实的root并切换到真正的init
程序之前进行任何可能需要的设置。)
run-init
的最新源代码可以找到here。 run_init()
是入口点(从 run-init.c 调用,它解析参数)。
switch_root
的最新源代码可以找到here。 switch_root_main()
是切入点。
这两个实现的代码都很短(虽然有点棘手),这使得通过眼睛比较它们很容易。唯一的区别似乎是他们执行略微不同的健全性检查,并且run-init
的最新版本有一个额外的选项可以在capabilities(7)
新execv()
之前删除所选的init
}。