GNU/Linux >> Linux の 問題 >  >> Linux

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

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.ext2rootfs.cpio 基本的に同じルート ファイルシステムですが、形式が異なります
  • 最初のコマンドにはハードドライブがあり、-initrd はありません
  • 2 番目のコマンドは -initrd ただし、ハード ドライブはありません

どちらの場合も、-initrd を除いて、Linux は問題なく起動します。 システムでは、すべてがメモリ内にあるため、ファイルの書き込みは永続的ではありません。


Linux
  1. 初期ramdisk(initrd)でのLinuxネットワーク構成を楽しみにしています

  2. Linux –自分で起動してインストールできるイメージをリモートマウントすることは可能ですか?

  3. Linux –カーネルメーリングリストに参加していますか?

  1. CLion で Linux カーネルモジュールを開発することは可能ですか?

  2. ブート パーティションのサイズ変更

  3. 現在のブートで指定された Linux カーネルのコマンド ライン パラメータを表示するにはどうすればよいですか?

  1. なしでは生きていけないLinuxカーネルモジュール

  2. Linuxカーネルをftraceで分析する

  3. Linux – Vmlinuxヘッダーにはカーネルイメージの長さが含まれていますか?