initrd kexecリンクを使用して別のカーネルをロードする簡単な方法

initrd kexecリンクを使用して別のカーネルをロードする簡単な方法

ここには64ビットカーネルを起動できないマシンがあります(efi32といくつか…珍しいファームウェアがあります)。

現在64ビットLinuxシステムを起動する唯一の方法は次のとおりです。

  1. ブート/ライブCDから32ビットディストリビューションを起動します。
  2. kexec私自身の64ビットカーネルを起動することです。

もちろん、32ビットディストリビューションを再インストールすることもできますが、いいえ私が望むもの。私は実際の64ビットカーネル/ initrdのブートローダーとして機能する32ビットカーネル/ initrdコンボが欲しいです。

これは私自身のセカンダリカーネルをロードして起動できる最小のinitrdシステムです。これには既存のソリューションがありますか?

答え1

32ビットgrubブートローダは、「linux」および「initrd」コマンドを使用して、CONFIG_EFI_MIXEDオプションでコンパイルされた64ビットLinuxイメージを起動します。

これらのGrubコマンドは、カーネルを起動する前にEFIのExitBootServices()を実行します。したがって、カーネルはセキュアブートを使用できず、PCIスロットのROM(特にグラフィックカードのBIOS)にアクセスできません。

別の方法は、「shim」ブートローダを実行してからGrubを実行し、Grubのlinuxefiおよびlinuxrdefiコマンドを使用することです。 ExitBootServices() を実行する代わりに、カーネルから EFI スタブを呼び出して ROM などをコピーし、カーネルを正しく起動する前に ExitBootServices() 自体を呼び出します。シムブートローダなしでGrubの「linuxefi」コマンドを実行しようとすると、セキュアブートがあるかどうかにかかわらず、「チェックサムエラー」エラーが発生します。残念ながら、このアプローチには2つの問題があります。 (1)カーネルは32ビットでなければならず、(2)現在32ビットEFIスタブにはカーネルの起動を妨げるバグがあります(出力なしで中断) 。

この間違いは悪名高いです。さらに、一部の64ビットLinuxイメージは失敗し、これはいくつかのソートまたはデータの上書きの問題を強く示しています。

必要な結果を得る唯一の方法は、32ビットEFIスタブで起動できるようにカーネルを変更し、正しい64ビットカーネルに変換することです。 CONFIG_EFI_MIXEDの作成者はこの問題を解決しています。電子メールを送信することもできます。

答え2

CONFIG_EFI_HYBRIDたぶんそれはあなたに必要なものかもしれません。

関連情報