この質問を改善したいですか? 質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てるようにします。
4年前に閉鎖されました。
この質問を改善する
私はLinuxに興味があり、しばらくの間それを掘り下げてきました。 Linuxカーネルをソースからコンパイルし、Grubで起動して、カーネルのシェルを使用する方法を学びました。
これで、カーネルがメモリにロードされるとすぐに、init
が検索されます。 それをロードします。私の議題は、シェル(通常のユーザーが使用できるシェル(bash
など)を起動することです。 。
では、どうすればそれを持ち込むことができますか?
bashシェルをロードするようにinitを構成する必要がありますか、それとも何かできることはありますか?
私は自分のディストリビューションを構築していますが、ディストリビューションにはシェル(bash)だけが必要です。
承認された回答:
うーん。これを達成するのは複雑ではありませんが、非常に複雑でもあります🙂
アレクサンダーが提案したことを簡単に行うことができます(init=/bin/bash
)、そしてあなたはうまくいくでしょう。
initプロセスはカーネルが呼び出すものであり、すべてを開始します。 あなたのユーザーランドの。ログイン端末が含まれています。あなたのinitがそのbashターミナルをスポーンするだけなら、あなたは大丈夫です。ただし、その端末がクラッシュまたは終了した場合、initはクリーンアップすることになっています。ターミナルから起動するプロセスの一部が停止した場合は、クリーンアップする必要があります。彼らが死んだら、彼ら 子供たちは新しい親のプロセスを必要とします、それはあなたの初期化になります。
これを読むのに10分を費やすことを強くお勧めします。これは、init
の概要を非常にわかりやすく説明しています。 する:
http://tilde.town/~elly/userland.txt
次に、独自のinitを実行するために必要なことをより深く理解できるようになります。
そのリンクの関連部分は次のように述べています:
実行する必要があるのは、/ sbin / init、/ etc / init、/ bin / init、または/ bin/shのいずれかのパスで起動する初期バイナリを提供することだけです。このプロセス(init)はpid1として実行されます。initプロセスは2つのことを行う必要があります:
決して終了しないでください(initが終了すると、カーネルはパニックになります)
ゾンビプロセスを刈り取る
その後、残りのテキストは単純なinitを実装します。