5

C カーネルを 16 ビット リアル モード用にコンパイルする方法がわかりません。さまざまなコンパイラを試しましたが、うまくいきませんでした。私のブートローダーは、フロッピー (私のカーネルはディスクの最初のセクターの直後に存在します) から生のセクターを物理メモリ アドレス 1000h:0000h にロードし、そこにジャンプします。C カーネルを 16 ビット リアル モードで動作するようにコンパイルするにはどうすればよいですか?

私の基本的なカーネル:

void OSmain()
{
    unsigned char *videoram = (unsigned char *) 0xb8000;
    videoram[0] = 65;                                     /* character 'A' */
    videoram[1] = 0x07;                                   /* forground, background color. */

    while( 0 )
    {

    }
}

私が試したコンパイラは、GCC、tinyCC、および DMC です。私の目標は、ジャンプして実行を開始できるフラット バイナリ ファイルを取得することです。

4

1 に答える 1

6

まず、独自の OS とコンポーネントを開発するためのリソースに関するリソースがあるOSDev Wikiを確認することをお勧めします。

次に、リアル モードで開始し、プロテクト モードに切り替えてから(32 ビット) コンパイル済みカーネルにジャンプするアセンブリでブートローダーを作成することを検討しましたか?

于 2011-07-16T22:31:45.790 に答える