我正在开发一个轻量级的 linux,没有什么特别的原因,只是想看看我能把它做得多小。我想知道 INIT 是否必要,或者我是否可以手动/bash 脚本执行所有与 INIT 相关的任务(fsck、卸载等)?
我不需要多用户功能(或大部分与此相关的功能)。我开始使用带有内核 2.6.38 的 Gentoo 基础 2.0.2 安装。
首先,你应该区分两件事:被调用的程序init
和linux在加载和基本启动后运行的init进程——它也被内核称为init。
第一个是程序,就像其他程序一样,其任务是通过运行各种其他程序来启动系统启动并控制它们的关闭。最流行的程序是sysvinit。这是“所有进程的父进程”最流行的实现,可在大多数标准 Linux 发行版中找到,通常以/sbin/init
.
第二个只是linux内核知道并在启动时自动运行的命令。因此,您可以告诉内核运行任何其他程序来代替 init。例如,进行系统恢复的一种流行方法是告诉 linux 运行/bin/bash
或一个小程序/sbin/busybox
(见下面的评论)。这可以通过提供程序名称作为引导参数(如init=/bin/bash
)来完成。
请注意,当init 进程退出时,系统停止实际上变得不可用。
除了 bash 和 busybox,还有几个 init 替代品可以或多或少地做 init 所做的事情。你可能想看看MINIT,runit,CINIT,jinit,暴发户或initng。但是如果你的目标是一个没有启动并行性或高级功能的绝对最小的解决方案,busybox可能是最好的选择。