
全体を再コンパイルせずに、initramfs イメージを既存のカーネルに埋め込むことは可能ですか? そのためのリソースがありません。
答え1
initramfs は、ビルド時にカーネルに埋め込むことができます (もちろん、これは menuconfig から rootfs ツリーを選択することで許可されます)。また、特定の状況では役立つことがあります。ただし、一度埋め込むと、最終バイナリ内の任意の固有の rootfs ツールが GPL に違反する可能性があることに注意してください。ただし、initramfs に busybox のものが含まれるまでは、問題は発生しないはずです。
答え2
通常、initramfs イメージをカーネルに統合する人はいません。私の知る限り、それは不可能です (概念に反してコードを書き直さない限り)、少なくとも意図されていません。
initrd は常にカーネルと一緒にロードされ、起動を支援する分離されたデータ ストリーム (ファイル) です。これはオプションですが、最近の gnu/linux ディストリビューションにはほとんど含まれています。
そのため、どのように埋め込むかではなく、どのように変更するかを自問する必要があります。ブートローダの設定を確認してください。通常は、次の 3 つの点を特定する必要があります (ほとんどの場合、この順序です)。
- カーネルイメージ(ブートローダをカーネルイメージ(ほとんどの場合はファイル)に誘導してRAMにロードするもの)
- コマンドライン(カーネルがアクセスして使用できるようにRAMに書き込まれる文字列(OS内でパラメータを与えるようなものですが、OS外では書き込みと呼び出し(アセンブラコード)だけです))(これにはほとんどの場合、root=/dev/xy roオプションがあります)
- initrd イメージ (カーネルが RAM にロードされた後に読み込まれる初期 RAM ディスクのオプション イメージ。カーネルはそれを仮想ディスクとして使用します。主に (ただし、たとえば、その内部で完全に実行されるライブ システムもあります)、ルート ファイルシステムが見つかりマウントされる前にブートを支援するために使用されます (ディスクが遅く流動的であるように (ディスクの順序、SCSI のもの、ネットワークからのブート、ファイル システムの暗号化、fsck が失敗した場合の回復緊急シェルなど))
したがって、あなたの質問に答えると、ブートローダが initrd を直接使用できず、それを置き換えることもできない場合は、別のブートローダをロードするだけです (たとえば、非常に古いものでも grub をカーネルとしてロードできます)。それ以外の場合は、ブートローダ構成で別の initrd ファイルへのパスを更新するだけです。
ちなみに、grub2 を使用している場合は、設定を直接編集しないでください。設定は、/etc/default/grub および /etc/default/grub.d/ 内のデータを使用して update-grub によって生成されます。grub legacy では、ブート パーティションの menu.lst を直接編集しますが、grub2 はこれを行うには複雑すぎます。直接編集することはできますが、後で上書きされる可能性が高いため、これは良い考えではありません...