我正在学习操作系统教程。我创建了2个文件。
- boot.asm
- kernel.c
kernel.c 的内容如下:
int main()
{
char *src = (char *)0xB8000000L;
*src = 'M';
src += 2;
*src = 'D';
return 0;
}
内核用于将字符写入文本模式视频显示区域。该内核是使用Windows版本的GCC编译的,具体编译选项如下:
gcc -ffreestanding -c -m16 kernel.c -o kernel.o
我使用LD将内核对象链接到二进制文件:
ld -Ttext 0x10000 --oformat binary -o kernel.bin kernel.o
我收到的错误信息如下:
请问有谁能解决这个错误呢?ld : 无法链接非 PE 可执行文件类型的文件
以下是一些相关信息:
- 操作系统:Windows
- 编译器:GCC
- 链接器:ld
(char *)0xB8000000L
很可疑。如果它是一个真正的16位C编译器,如果它是(char far *)0xB8000000L
,那么可能还好。_GCC_不是一个真正的16位C编译器,也没有旧式far
指针的概念。所以即使你让这段代码编译通过,它也可能不会做你想做的事情。我假设从_GCC_的-m16
选项中,你正在尝试创建一个实模式的16位内核(而不是保护模式)。 - Michael Petchkernel.bin
的文件? - Michael Petch