私はDで独自のブートローダーとカーネルの作成に取り組んでいますが、つまずきに遭遇しました。
バックグラウンド:
- 私はすべてを一から書いています。したがって、ブートセクターは組み立て中です。そして、私はGRUBを使用していません。
- テストにはQemuを使用しています。
- ブートセクターは、「ディスク」(現在はフラットバイナリファイルであり、最初のセクターはブートローダーで、残りはカーネルコード)から仮想アドレス0xC0000000にカーネルを読み取り
kmain()
、私のエントリポイントであるを呼び出します。カーネル。 - カーネルにPEファイル形式を使用しています。(Elfを使用するように言わないでください。私の選択はPEです。)
問題
PEファイルをロードできるようにすることはカーネルの仕事の一部です。では、最初にカーネル自体をメモリにロードして、実際に正しく実行できるようにするにはどうすればよいでしょうか。
(1)512バイトに収まらない、(2)アセンブリで行うのが面倒なので、ブートセクタからこれを行うことはできません。もちろん、カーネル自体でもそれを行うことはできません。では、これをどのように行う必要がありますか?