开发内核并在虚拟机中测试它们

时间:2009-03-16 11:36:44

标签: c assembly kernel virtual-machine

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

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

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

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

5 个答案:

答案 0 :(得分:11)

虽然BOCHS似乎更善于让你知道什么时候你的宠物操作系统出现了可怕的错误......但这是非常懒散的!当事情变得模糊时,我将VirtualPC用于通用测试和BOCHS。

此外,您很可能每2分钟启动一次操作系统,因此有必要采用某种自动方式来构建启动映像&关闭Virtual PC。

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

摘自我的批处理文件:

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

可能只是设置一台机器(x86,我猜),然后确切地调查它在启动过程中的表现。主机的文件系统中应该有一个或多个文件充当虚拟机的文件系统,然后您需要在那里放置一些引导扇区信息,这会导致您的开发内核启动。

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

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

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