私はおもちゃのオペレーティング システムとブートローダーに取り組んでいます。カーネルを C で記述し、ブートローダーから直接ジャンプできるようにバイナリに変換しようとしています (つまり、ELF などをロードしていません)。
適切なオリジンを使用してリンカー ファイルをセットアップし (アドレス 0xC0000000 にカーネルをロードしています)、objdumpそれが正しく使用されていることを確認しました。ただし、私が望んでいたように、エントリポイントを開始 (0xC0000000) に配置していません。ENTRYそれはディレクティブの目的ではないと思います。
kernel_main私の問題は、特定の関数をアドレス 0xC0000000に配置したいということです。コンパイルとリンクに gcc を使用してこれを達成する方法はありますか?
私のリンカーファイルの関連部分は次のようになります。
ENTRY(kernel_main)
SECTIONS
{
   /* Origin */
   . = 0xC0000000;
   .text BLOCK(4K) : ALIGN(4K)
   {
       *(.text)
   }
   /* etc. */
}