我怎样才能让 shell 显示在我自己的发行版(linux)中?

我怎样才能让 shell 显示在我自己的发行版(linux)中?

我对 Linux 很感兴趣并且已经研究了一段时间了。我刚刚学会了从源代码编译 Linux 内核并使用 Grub 启动它,这会给你带来内核的 shell。

现在,一旦内核加载到内存中,它就会搜索来init加载它。我的议程是启动一个 shell(普通用户可以使用 - 就像bash)。

那么,如何才能将其带入呢?

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

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

答案1

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

你可以简单地按照亚历山大的建议去做(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 退出,内核会发生恐慌)

  • 收获僵尸进程

文本的其余部分将实现一个简单的 init。

答案2

“终端”(物理计算机)和“bash”(外壳)完全不同。我不完全确定你在问什么,但你可以添加init=/bin/bash到内核命令行以便直接启动到 bash。

答案3

bash不是终端,是外壳。

init一旦启动过程完成并且机器在纯文本运行级别(因此没有 X Windows)下运行,该过程将最终getty调用login.这是负责显示登录提示并允许用户登录的进程。这是所有 Linux 发行版中都会发生的情况。

您想要做的只是定义bash为用户的默认登录 shell(假设您想要一个多用户环境)。

相关内容