switch_root和run_init之间的区别是什么?

时间:2015-03-26 03:32:10

标签: c linux embedded-linux busybox

switch_rootrun_init之间的区别除了switch_root busybox run_init klibc来自{{1}}之外?

非常感谢

1 个答案:

答案 0 :(得分:1)

它们都执行完全相同的功能,即从initramfs切换到“真实”根和execv(3)“真实”init(8)程序。他们都假设应该成为root的文件系统已经安装在某个目录上,并将它们作为参数。

(initramfs是一个(通常)临时内存文件系统,由引导加载程序加载。它的目的是在安装真实的root并切换到真正的init程序之前进行任何可能需要的设置。)

run-init的最新源代码可以找到hererun_init()是入口点(从 run-init.c 调用,它解析参数)。

switch_root的最新源代码可以找到hereswitch_root_main()是切入点。

这两个实现的代码都很短(虽然有点棘手),这使得通过眼睛比较它们很容易。唯一的区别似乎是他们执行略微不同的健全性检查,并且run-init的最新版本有一个额外的选项可以在capabilities(7)execv()之前删除所选的init }。