实模式内核的 16 位 C 代码

问题描述 投票:0回答:1

我不知道如何为 16 位实模式编译我的 C 内核。我尝试过各种编译器,但没有成功。我的引导加载程序只是将原始扇区从软盘(我的内核位于磁盘上第一个扇区之后)加载到物理内存地址 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。我的目标是获得一个可以跳转到开始执行的平面二进制文件。

c kernel osdev 16-bit real-mode
1个回答
6
投票

首先,我建议您查看 OSDev Wiki,其中包含用于开发您自己的操作系统和组件的资源。

其次,您是否考虑过在汇编中编写一个引导加载程序,以实模式启动,切换到保护模式,然后然后跳转到您的(32位)编译内核?

© www.soinside.com 2019 - 2024. All rights reserved.