19

私が理解しているように、initrdはRAMにロード可能な小さなイメージです。これは、すべてのロード可能なモジュールを含む完全なカーネルを起動するために使用されます。プロセスの一部として、bzImageの名前が変更されたバージョンであるvmlinuzカーネルイメージが必要です。

initrdイメージを作成せずにカーネルを起動することは可能ですか?

4

5 に答える 5

26

initrd/initramfs はオプションであり、必須ではありません。bzImage は純粋なカーネル イメージであり、ブートローダーから直接起動できます。ただし、通常はファイルシステムおよびユーザー空間ツールへのアクセスを必要とするいくつかのタスク (ファイルシステムモジュールのロード、ディスクアクセス用のドライバー、交換可能なメディアからのルートファイルシステムのマウントなど) を実行する必要がある場合があります。

それがinitramfsの目的です。これは、カーネル イメージ自体、またはブート時にブートローダーによってカーネル イメージにアタッチされる CPIO アーカイブです (カーネル イメージは initramfs のコンテナーであり、その逆ではありません)。

その CPIO アーカイブには、すべてのデバイスをセットアップして適切なルート ファイルシステムにアクセスするために必要なモジュールを含む初期 rootfs と、それらのデバイスを識別し、モジュールをロードし、他の起動タスクを実行して適切なルート ファイル システムを / に再マウントし、/sbin を起動するために必要なモジュールが含まれています。 /初期化

initrdも同様ですが、主な違いはファイルシステム イメージであり、通常は圧縮されている場合があります。カーネルは、組み込みで使用されるファイルシステムをサポートしている必要があり、このイメージを最初の / としてマウントします。

CPIO は桁違いに単純であるため、initrd よりも initramfs が好まれます。これにより、組み込まれているファイルシステム モジュールの要件が節約され、initramfs の作成も容易になります。ext2 イメージを作成し、loopdevice をマウントしてデータを取り込む代わりに、tar を使用するのと同じように単純なアーカイブを作成します。

ただし、必要なすべてのドライバーとモジュールをカーネル イメージに組み込んでカーネルをコンパイルし、システム内でルート ファイル システム デバイスの名前が固定されている場合は、カーネルがそれ自体で処理できるため、initramfs は必要ありません。

于 2011-06-19T21:16:38.687 に答える
5

initrd には、ルート ファイルシステムを理解するために必要なモジュールが含まれているため、カーネル モジュールの通常のストアにアクセスできます。

モジュールとしてではなく、すべてのコードが組み込まれた状態でカーネルがコンパイルされている場合、initrd は必要ありません。

于 2011-06-19T21:14:33.520 に答える
3

はい、initrd イメージなしでシステムを起動できます。

initrd イメージは、gzip された ramdisc イメージ、または (最近ではより一般的に) gzip された .cpio イメージのいずれかです。

後者の場合、.cpio は initramfs と呼ばれるファイルシステムに展開されます。

.cpio イメージが存在しない場合、カーネルは代わりに組み込みイメージを使用します。このイメージには、少数の特殊ファイル (/dev/console、/dev/null、およびいくつかのディレクトリなど) のみが含まれますが、バイナリは含まれません。

次に、カーネルはいくつかの組み込みロジックとコマンドライン オプションを使用して、initramfs の「上」にマウントされているため、それを隠している「実際の」ルート ファイルシステムを見つけてマウントしようとします。

この「レガシー」ブート システムは、最近のディストリビューションではほとんど使用されていません。

于 2011-06-20T09:06:39.933 に答える