如何制作一个 shell 以显示在我自己的发行版 (linux) 中?

Pan*_*der 5 linux ubuntu kernel-modules linux-kernel distributions

我对 Linux 很感兴趣,并且已经研究了一段时间。我刚刚学会了从源代码编译 Linux 内核,并使用 Grub 引导它,这会让您获得内核的 shell。

现在,一旦内核加载到内存中,它就会搜索init加载它。我的议程是调出一个外壳(普通用户可以使用 - 类似bash)。

那么,我怎样才能把它带进来?

我是否需要配置 init 来加载 bash shell 或者我可以做些什么?

我正在构建我自己的发行版,我只需要发行版有一个 shell (bash) 而没有别的。

Zla*_*tko 8

唔。这应该不难实现,但它也非常复杂:)

你可以简单地按照亚历山大的建议 ( init=/bin/bash) 去做,你会做得很好。

init 进程是内核调用的,它启动您的所有用户空间。包括登录终端。如果你的 init 只是产生那个 bash 终端,你就没事。但是,如果该终端崩溃或退出,init 应该进行清理。如果您从终端启动的某些进程死亡,则需要清理。如果他们死了,那么他们的孩子需要一个新的父进程,这将是你的 init。

我强烈建议花 10 分钟阅读本文,它非常友好地概述了以下内容init

http://tilde.town/~elly/userland.txt

然后,您将更深入地了解运行您自己的 init 需要什么。

该链接的相关部分说:

我们只需要做一件事:提供一个初始二进制文件以在以下任一路径启动:/sbin/init、/etc/init、/bin/init 或 /bin/sh。此进程 (init) 作为 pid 1 运行。

init进程需要做两件事:

  • 永不退出(如果 init 退出,内核会崩溃)

  • 收割僵尸进程

然后文本的其余部分实现了一个简单的初始化。

  • 您应该将相关信息带到这里作为报价。 (4认同)