initrd/initramfs はオプションであり、必須ではありません。 bzImage は純粋なカーネル イメージであり、ブートローダーから直接起動できます。ただし、通常はファイルシステムとユーザー空間ツールへのアクセスを必要とするいくつかのタスク (ファイルシステムモジュールのロード、ディスクアクセス用のドライバー、交換可能なメディアからのルートファイルシステムのマウントなど) を実行する必要がある場合があります。 /P>
それがinitramfs これは、カーネル イメージ自体、またはブート時にブートローダーによってカーネル イメージにアタッチされる CPIO アーカイブです (カーネル イメージは initramfs のコンテナーであり、その逆ではありません)。
その CPIO アーカイブには、すべてのデバイスをセットアップして適切なルート ファイルシステムにアクセスするために必要なモジュールを含む初期 rootfs と、それらのデバイスを識別し、モジュールをロードし、他の起動タスクを実行して適切なルート ファイル システムを / に再マウントし、/sbin を起動するために必要なモジュールが含まれています。 /init
initrd は似ていますが、主な違いはファイルシステム イメージであり、通常は圧縮されている場合があります。カーネルは、組み込みで使用されるファイルシステムをサポートしている必要があり、このイメージを初期の / としてマウントします。
CPIO は桁違いに単純であるため、initrd よりも initramfs が好まれます。これにより、組み込まれているファイルシステム モジュールの要件が節約され、initramfs の作成も容易になります。 ext2 イメージを作成し、loopdevice をマウントしてデータを取り込む代わりに、tar を使用するのと同じように単純なアーカイブを作成します。
ただし、必要なすべてのドライバーとモジュールをカーネル イメージに組み込んでカーネルをコンパイルし、システム内でルート ファイル システム デバイスの名前が固定されている場合は、カーネルがそれ自体で処理を実行できるため、initramfs は必要ありません。
最小限の QEMU + Buildroot の例
initrd が必須ではないことを示す最小限の具体的な例を次に示します。
この設定により、次のタイプの 2 つの動作する QEMU コマンドを簡単に実行できます。
qemu-system-x86_64 -drive file=rootfs.ext2
そして:
qemu-system-x86_64 -initrd rootfs.cpio
場所:
rootfs.ext2
とrootfs.cpio
基本的に同じルート ファイルシステムですが、形式が異なります- 最初のコマンドにはハードドライブがあり、
-initrd
はありません - 2 番目のコマンドは
-initrd
ただし、ハード ドライブはありません
どちらの場合も、-initrd
を除いて、Linux は問題なく起動します。 システムでは、すべてがメモリ内にあるため、ファイルの書き込みは永続的ではありません。