自分のディストリビューション(Linux)にシェルが表示されるようにするにはどうすればよいですか? [閉鎖]

自分のディストリビューション(Linux)にシェルが表示されるようにするにはどうすればよいですか? [閉鎖]

私はLinuxに興味があり、しばらく研究してきました。ソースからLinuxカーネルをコンパイルし、カーネルシェルを提供するGrubを使用して起動する方法を学びました。

カーネルがメモリにロードされたら、initそれをロードするために検索します。私の計画はシェルを起動することです(たとえば、一般ユーザーが利用可能ですbash)。

それで、それをどのようにインポートしますか?

Bashシェルをロードするにはinitを設定する必要がありますか、それとも私ができることがありますか?

私は独自のディストリビューションを作成していますが、ディストリビューションにはシェルだけがあり、他のものは必要ありません。

答え1

よく。実装は複雑ではありませんが、非常に複雑です。 :)

単にアレキサンダーのアドバイス( )に従うとinit=/bin/bash大丈夫でしょう。

init プロセスはカーネルによって呼び出され、開始されます。みんなあなたのユーザースペース。ログイン端末を含みます。初期化がbash端末を生成しても大丈夫です。ただし、端末がクラッシュまたは終了した場合は、initをクリーンアップする必要があります。端末で開始したプロセスの一部が終了したら、それをクリーンアップする必要があります。彼らが死んだら、彼ら子には初期化される新しい親プロセスが必要です。

10分後にこの記事を読んでください。次の内容の非常にフレンドリーな概要が提供されていますinit

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

次に、独自のinitを実行するために必要なものについて詳しく学びます。

リンクの関連部分は次のとおりです。

私たちがしなければならないことは1つだけです。 /sbin/init、/etc/init、/bin/init、または /bin/sh パスのいずれかから始まる初期バイナリを提供することです。プロセス(init)はpid 1で実行されます。

init プロセスは、次の 2 つのタスクを実行する必要があります。

  • 終了しないでください(initが終了すると、カーネルはパニック状態になります)。

  • ゾンビプロセスの収穫

残りのテキストでは簡単な初期化を実装します。

答え2

「ターミナル」(物理コンピュータ)と「bash」(シェル)はまったく異なります。あなたが何を求めているのか完全にはわかりませんが、init=/bin/bashカーネルコマンドラインに追加してbashで直接起動できます。

答え3

bash端末ではなくシェルです。

initこのプロセスは、起動プロセスが完了し、システムがプレーンテキストランレベル(X Windowsなし)で実行されると最終的にgetty呼び出されますlogin。これはログインプロンプトを表示し、ユーザーがログインできるようにするプロセスです。これはすべてのLinuxディストリビューションで発生します。

あなたがしたいのは、bashユーザーのデフォルトのログインシェルを定義することだけです(マルチユーザーエクスペリエンスが欲しいとします)。

関連情報