gpt4 book ai didi

c++ - 链接到内核

转载 作者:太空狗 更新时间:2023-10-29 20:17:20 27 4
gpt4 key购买 nike

拜托,有人知道如何将引导与内核链接起来吗?例如我有这个启动代码:

[BITS 16]   
[ORG 0x7C00]
[global start]
[extern _main]
start:
call _main
cli
hlt

这是我的 C++ 文件:

#include <iostream>
#include <string>
int main()
{
std::cout << "Hello World" << std::endl;
return 0;
}

现在我将把.cpp 文件编译成.o 文件,将.asm 文件编译成.o 文件。但是我现在如何将这些文件链接到 kernel.bin 呢?它有一些代码吗?这段代码有效吗?请帮助我。

最佳答案

首先,您不能使用 C/C++ 标准库,因为在业余操作系统中,它不存在*。

其次,您的 C++ 代码似乎是 32 位格式,而您的汇编代码是 16 位格式。这些不能链接,除非都是 16 岁或都是 32 岁。

我建议查看 OSDev Wiki (user786653 也发布了该信息)...它有许多有用的资源可以帮助您开始编写操作系统。

如果您真的想使用 16 位汇编从头开始,并且希望能够使用 32 位 C++ 代码,则必须执行以下步骤:

  1. 创建引导加载程序的第一阶段(加载引导加载程序其余部分的小文件。它必须恰好为 512 字节...
  2. 创建引导加载程序的第二阶段(此阶段设置 GDT、启用 A20 线并切换到 32 位保护模式。-它还可以设置视频模式、获取 RAM 信息并将其传递到 32 位内核..).
  3. 创建一个 32 位内核 stub (在 C/C++.. 最好是 C)。这将为操作系统的内核创建主要环境。
  4. 编写一些 C/C++ 标准库例程。 String.h 是您的首要任务(C++ 上的 CString)。此外,Stdio.h 文件会很有用(C++ 上的 CStdio)
  5. 在内核 stub 的主函数中,调用您的打印例程。

(注意,要做到这一点,您必须具备高水平的 C/C++ 知识,并且至少具备一定的汇编知识)

*如果您在自己的库中编程,请忽略第一条语句。

希望这对您有所帮助!

-阿德里安

关于c++ - 链接到内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6844788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com