カーネルイメージ間の制御転送

カーネルイメージ間の制御転送

タイトルからわかるように、現在マルチブートとGRUBを利用する既存のブートローダ/カーネルイメージがあります。私のカスタムカーネルイメージの最後にはLinux bzImageバイナリが添付されています。

起動プロセス中に、まずカスタムブートローダ/カーネルに関連するタスクを実行してから、Linux起動のために実行をbzImageに転送したいと思います。いいえシステムを再起動するか、GRUBメニューに戻ります。

トピックに関する情報はほとんどまたはまったくなく、すべてのリソースでデュアルブート方法を説明していますが、これは私の目標ではありません。代わりに、2つのカーネルを一緒にジャム(1つは私のカスタムカーネルイメージ、非常に基本的)で、順番に実行してLinuxカーネルイメージをロードしますが、私のカスタムカーネル/プログラムが以前にロードされたときにはそうではありません。

このトピックに関する資料や情報があれば教えてください。ありがとうございます。

編集:目標のもう1つの部分は、2つのカーネルを別々のエンティティにロードするのではなく、Linux bzImageをカスタムカーネル/プログラムの最後に追加してから、eipbzImageの開始アドレスに移動して制御を送信することです。

答え1

次のようなプロセスを使用すると、目標を達成できるようです。kexecシステムコール。最新のコンピュータには複数の独立したCPUコアがある傾向があるため、このプロセスは思ったよりも複雑になる可能性があります。

初期カーネルが単一のCPUコアのみを使用することを制限しない限り、カスタムカーネルは新しいコアにジャンプする前に他のコアが停止していることを確認する必要があります。そうしないと、互いに干渉する異なるコアを実行する異なるコアが発生する可能性があります。

Arch Wikiには使用方法に関する情報がありますkexec

関連情報