私は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
ユーザーのデフォルトのログインシェルを定義することだけです(マルチユーザーエクスペリエンスが欲しいとします)。