首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忽略内核和BusyBox: /etc/inittab的最小Linux,只执行/init

忽略内核和BusyBox: /etc/inittab的最小Linux,只执行/init
EN

Unix & Linux用户
提问于 2014-07-24 07:26:52
回答 1查看 14.2K关注 0票数 13

我成功地创建了一个小型的、功能齐全的Linux,它只包含内核(用默认选项编译)和BusyBox (使用默认选项+静态编译,所有的applets都存在,包括/sbin/init)。我没有创建initrd和填充/dev/proc/sys的问题,我的/init shell脚本也没有任何问题。

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

  • 忘记我的/init shell脚本,完全依赖/etc/inittab配置。
  • 同时使用/init shell脚本和/etc/inittab配置。

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

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

下面是我的/init shell脚本的内容:

代码语言:javascript
复制
#!/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配置,所有这些都是基于我找到这里的信息。

作为最低限度,my /etc/inittab只包含以下一行:

代码语言:javascript
复制
::sysinit:/bin/sh

再一次--我以内核恐慌告终,/etc/inittab似乎被忽略了。

任何建议,如何强迫我的小生活发行版工作良好与BusyBox的/etc/inittab是高度赞赏!

更新:

  • 为了说明这一点--我现在的/init shell脚本和不带/etc/inittab的脚本都没有内核恐慌的麻烦。一切都很好,我的/bin/ash控制台运行得很好,而且我没有遇到任何意外的麻烦。唯一的问题是,正如我前面所描述的,/etc/inittab被完全忽略了。
  • 我检查了3种不同的Linux发行版: Slax、Finnix和SysResCD。他们都有/init,没有一个有/etc/inittab。此外,这篇Wiki文章总结了我对根本没有调用/sbin/init的怀疑。
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2014-07-31 15:36:16

好吧,我做了大量的调查,我发现了问题所在。让我们一个一个地开始:

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

我在初始配置中遇到的问题(请参阅问题)是因为,我的/init脚本所做的最后一件事就是产生新的/bin/sh进程,该进程被分配给全新的PID。从这里开始,不可能从交互式控制台直接运行/sbin/init,因为即使在执行命令行exec /sbin/init时,我们实现的最佳方法是分配已经分配给shell的相同PID,而这个PID绝对不是PID 1。

长话短说-直接从exec /sbin/init执行命令行/init,仅此而已。

票数 13
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/146284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档