私が理解したのは、initrd / initramfsがカーネルの初期化を支援するためにRAMにファイルシステムを設定することです。次の質問があります。
(1)initrd / initramfsはブートローダによって設定されます(例:GRUB 2)。
(2) カーネルがページテーブルを初期化する前に initrd/initramfs 設定が発生しますか?
(3) 一時的ですか?カーネルの初期化が成功した後、このファイルシステムはどうなりますか?
答え1
(1) initramfs では、通常カーネルと初期ファイルシステムが同じファイルに存在します。したがって、ブートローダがカーネルファイルの場所を知る必要がある場合は、initramfsの場所も知っています。その逆。 initramfsが別々のファイルの場合は、ブートローダが参照し、パラメータとしてカーネルに渡す必要があります。
ブートローダはカーネルに制御権を渡します。カーネルは、準備が必要なすべての項目の初期化が終わったら、initramfsを抽出し、init(initramfs内)に制御を渡します。
(2) initramfs はカーネルが仮想メモリサブシステムを準備した後に抽出されます。
(3)通常、initramfsが作業を完了した後(つまり、システムのルートファイルシステムのマウント)、新しくマウントされたルートファイルシステムに「移動」し、RAMからinitramfsの内容を削除するための一連の微妙なステップが実行されます。 (明示的に)「rm」を実行して)。
次の内容をお読みください。 https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
答え2
initrdはユーザースペースプログラムによって設定され、ファイル(フォーマット)としてcpio
ディスクにコピーされます。ブートローダは設定からこのファイルに関する情報を受け取り、ファイルをRAMにコピーし(追加設定なしで)、カーネルにRAMアドレスを通知します。
カーネルはRAMディスクを設定し、その中にinitrdを抽出します。その設定を呼び出す場合...ページテーブルの作成に関するタイミングはわかりませんが、カーネルがページテーブルを必要とするinitrdでユーザー領域プロセスを開始したときにこれがすでに発生していると想像しています。
/
このRAMディスクは、物理ルートFSがマウントされ、PID 1がそれをchrootするまでファイルシステムとして使用されます。
このRAMディスク(およびすべての内容)がマウント解除のためにルートFSからルート解除されるまで残っているかどうかは不明です。