【问题标题】:How do I build a kernel image using Visual Studio?如何使用 Visual Studio 构建内核映像?
【发布时间】:2010-10-14 16:05:09
【问题描述】:

我想使用 Visual C++ 为 x86 机器构建嵌入式内核。我有一些 C 和汇编代码文件要编译,我想以一种与 GRUB 等 Multiboot 引导加载程序兼容的方式将它们链接在一起。

【问题讨论】:

  • 您确定要走 MSVC 路径吗?这是一个很棒的编译器,但我认为使用 GCC/MingW 会更容易
  • 我认为 GCC/MinGW 也会生成 PE 可执行文件。在任一环境中,我都必须对 ELF 到 PE 进行必要的更改。 VS 使用起来非常愉快,我想我会更喜欢它。

标签: visual-studio kernel osdev multiboot


【解决方案1】:

OSDev 有一个wiki entry on Visual Studio,它可能会提供一些见解,尤其是与 Kaushik Srenevasan 的 blog entries 的链接,主题是设计为由基于多引导的引导加载程序(如 GRUB)加载的 PE 内核。

你应该知道的一些大而广泛的事情:

  • 在 multiboot 标头中,您需要使用 AOUT kludge。
  • 您需要为链接器指定 /BASE:0x100000 参数,因此最终的二进制代码基于引导加载程序将其放置的位置。
  • 您的内核入口点(通常称为“kmain”)需要有__declspec(noreturn),并且您需要执行__asm { hlt } 而不是返回。

【讨论】:

  • 复制粘贴在这里也不起作用,但指出了错误:它看起来像“...kernels-using%5F03.html”,但应该是“... kernels-using_03.html"。
  • 我不知道为什么,但我将它从地址栏复制并粘贴到这里,当我编辑时它有一个文字“_”——所以似乎正在替换它不管什么原因。
  • 好的,我向 SO 团队发送了一封电子邮件,他们指出还有其他方法可以建立链接,所以我将其切换为有效的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
相关资源
最近更新 更多