8

我喜欢编程挑战,编写内核似乎是一个编程挑战。

不幸的是,内核特别难以测试,因为它们基本上是操作系统的核心,因此它们不能轻易地在操作系统之上运行。

但是,我知道可以模拟计算机硬件的称为虚拟机的应用程序。

使用虚拟机开发和测试内核(C+Assembly)的最简单/最好的方法是什么?

4

5 回答 5

11

虽然 BOCHS 似乎更善于在您的宠物操作系统出现严重问题时通知您……但它非常慢!当事情变得模糊时,我使用 VirtualPC 进行通用测试和 BOCHS。

此外,您很有可能每 2 分钟启动一次操作系统,因此采用某种自动化方式来构建启动映像并启动 Virtual PC 会有所帮助。

我用所有必要的东西构建了一个 GRUB 启动软盘映像,以使它从根目录启动 Kernel.Bin。我使用批处理文件将此文件复制到虚拟项目目录,使用FAT Image Generator将我的内核复制到映像。然后只需启动 VirtualPC 项目。沃拉!

摘自我的批处理文件:

COPY Images\Base.vfd Images\Boot.vfd /Y
fat_imgen.exe modify Images\Boot.vfd -f Source\Bin\KERNEL.BIN
COPY Images\Boot.vfd Emulators\VirtualPC\ /Y
START Emulators\VirtualPC\MyOS.vmc

最后一个建议:将 VirtualPC 进程优先级设置为低 - 相信我!我很乐意交换一些代码!

工具: DGJPP、NASM、GRUB。
代码: osdev.org、osdever.net

于 2009-03-16T17:06:13.460 回答
1

您可能有兴趣查看HelenOS。它是一个从头开始的微内核,已移植到使用 Simics 和 QEMU 等模拟器开发的许多架构(在裸机上启动就好了)。

我们使用在构建过程中复制到最终 ISO 的静态 grub。在操作系统变为自托管之前,有些事情必须如此。我强烈建议不要实现自己的用户空间 C 库,除非你真的想从头开始做所有事情......你会很快成为自托管 :)

尽管 Simics 不是免费的,但我强烈推荐它(以及它内置的调试/分析工具),同时制作你的内核。一旦你有了某种内核控制台和记录器,QEMU 就会做得很好。

于 2009-03-16T17:43:17.443 回答
0

可能只是设置一台机器(我猜是 x86),然后准确调查它在引导期间的行为。主机文件系统中应该有一个或多个文件充当虚拟机的文件系统,然后您需要在其中放置一些引导扇区信息,以使您的开发中的内核启动。

这当然意味着主机上的构建系统有办法将内核写入虚拟机的文件系统,这可能会有所不同。

随机选择一个,bochs似乎支持使用 dd 等标准工具从外部编辑引导媒体。

于 2009-03-16T11:50:22.470 回答
0

这很简单。设置虚拟机,编写内核,将其复制到虚拟机,启动虚拟机。

如果您需要更具体的建议,则需要更具体。

于 2009-03-16T11:50:37.383 回答
0

您需要问自己的第一个问题是您的目标硬件架构是什么?为了讨论,我假设您的目标是 IA_32 架构,这可能是一个明智的选择,因为该处理器上有大量现成的文档。

如果您真的认真对待这项工作,那么您肯定会希望针对模拟器或 VM 运行调试/代码/构建/部署周期。有人提到BOCHS,非常流行。如果您喜欢仿真速度,那么还有一个名为 Qemu 的仿真器,它比 BOCHS 更快。

我建议您的开发环境在 Linux 或 Windows 下运行,由于这些开发环境的可用文档,这可能又是一个明智的选择。

Make是你的朋友。使用它来自动化构建/执行过程。我建议您预先选择您的工具集/编译器,并花一些时间好好学习它们。从长远来看,它会拯救你。

于 2009-03-16T22:18:36.267 回答