带有内核和BusyBox的最小Linux:/ etc / inittab被忽略,仅执行/ init


12

我设法创建了一个小型且功能齐全的实时Linux CD,其中仅包含内核(使用默认选项编译)和BusyBox(使用默认选项+静态编译,所有小程序都包括在内/sbin/init)。我没有问题,建立initrd和填充/dev/proc并且/sys也是我在所有与我没有任何问题/initshell脚本。

最近,我读到BusyBox支持/etc/inittab配置(至少在某种程度上),我非常想执行以下任一操作:

  • 忘记我的/initshell脚本,完全依靠/etc/inittab配置。
  • 同时使用/initShell脚本和/etc/inittab配置。

现在是实际问题- /etc/inittab当我的发行版启动时,似乎完全被忽略了。症状是:

  • 当我删除/init并离开时,/etc/inittab我最终会陷入内核崩溃。我的假设是内核根本不执行/sbin/init,或者/sbin/init根本找不到(或读取)/etc/inittab
  • 我读到即使没有,BusyBox也应该可以正常工作/etc/inittab。因此,我同时删除了两者/init/etc/inittab然后猜测是什么-再次出现内核恐慌。
  • 我试图执行/sbin/init从我的外壳经过几次猜测,其中包括exec /sbin/initsetsid /sbin/initexec setsid /sbin/init我结束了内核崩溃。文件系统上同时存在和不存在/ etc / inittab。

这是我的/initshell脚本的内容:

#!/bin/sh
dmesg -n 1
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
setsid cttyhack /bin/sh

在这一点上,我不在乎它的内容/etc/inittab,只要我有办法知道那里的配置确实有效。我尝试了几种/etc/inittab配置,所有这些配置都是基于在这里找到的信息。

作为最低要求,我的/ etc / inittab仅包含以下这一行:

::sysinit:/bin/sh

再次-我最终陷入内核恐慌,似乎/etc/inittab被忽略了。

/etc/inittab非常感谢任何有关如何强制我的小型现场发行版与BusyBox配合使用的建议!

更新:

  • 为了清楚起见,使用和不使用当前的shell脚本,我都不会遇到内核崩溃的麻烦。一切正常,我的控制台运行良好,没有任何意外的麻烦。唯一的问题是,正如我上面所述,它被完全忽略了。/init/etc/inittab/bin/ash/etc/inittab
  • 我检查了3种不同的实时Linux发行版:Slax,Finnix和SysResCD。他们都有/init,没有一个/etc/inittab。另外,这篇Wiki文章总结了我的怀疑,/sbin/init根本没有引起我的怀疑。


啊,OP写了Minimal Linux Live!伙计,你摇滚。
Ciro Santilli冠状病毒审查六四事件法轮功

Answers:


11

好的,我做了很多广泛的研究,发现了什么地方出了问题。让我们一一开始:

  • 当我们使用initramfs启动方案时,内核调用的第一个过程就是/init脚本。内核永远不会尝试/sbin/init直接执行。
  • /init 被分配了进程标识符1.这非常重要!
  • 现在的问题是/sbin/init只能以PID 1 启动,PID 1而我们已经/init以PID 1 运行。
  • 解决方案是exec /sbin/init在我们仍在里面时执行命令行/init。这样,新进程(即/sbin/init)将从其父级(/init具有PID 1)继承PID ,这就是我们要做的全部。

我的初始配置遇到的问题(请参阅问题)是由于以下事实:我的/init脚本所做的最后一件事是生成/bin/sh分配了全新PID的新进程。从这一点出发,不可能/sbin/init直接从交互式控制台运行,因为即使执行命令行exec /sbin/init,我们实现的最佳效果是分配已经分配给外壳的相同PID,并且该PID绝对不是PID 1。

长话短说- exec /sbin/init直接从命令行执行命令行即可/init

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.