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

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

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

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

有帮助吗?

解决方案

虽然 BOCHS 似乎更擅长在您的宠物操作系统出现严重问题时让您知道......太慢了!我使用 VirtualPC 进行通用测试,并在情况变得不明朗时使用 BOCHS。

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

我构建了一个 GRUB 启动软盘映像,其中包含所有必要的内容,以使其从根目录启动 Kernel.Bin。我使用批处理文件将此文件复制到虚拟项目目录中,使用 FAT 图像生成器 将我的内核复制到映像中。然后启动 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

其他提示

您可能会感兴趣的看着 HELENOS 。其从头微内核一个已被移植到许多架构(靴上裸露的金属就好)开发了使用仿真器,如的Simics和QEMU。

我们使用被在生成过程中复制到最终ISO静态蛴螬。有些东西只是要这样,直到操作系统变得自我托管。我强烈建议不要实现自己的用户空间的C库,除非你真的想要做的一切从头开始..你会成为自主办更快:)

虽然Simics中是不自由的,我强烈推荐它(和它的内置调试/分析工具),同时使你的内核。一旦你有某种内核控制台和记录器的到位,QEMU做了非常好的工作。

这是简单的。建立一个虚拟机,写你的内核,将其复制到虚拟机,启动虚拟机。

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

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

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

随机挑选一个, 博克斯 好像 支持 使用 dd 等标准工具从外部编辑启动介质。

这是你需要问自己的第一个问题就是硬件体系结构,你定位?我假设此讨论你的目标IA_32架构,这可能会是一个明智的选择,因为有很多在该处理器上随时可用的文档的缘故。

如果你对这项工作真正严肃的,那么你一定要运行您的调试/代码/构建/部署反周期的仿真器或VM。有人提到BOCHS,这是非常受欢迎的。如果仿真速度是你的事,也有称为Qemu中的模拟器比BOCHS更快。

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

请为你的朋友。用它来自动生成/执行过程。我建议你挑选你的工具箱/编译了前面,并且花一些时间学习他们。这将节省您在长期运行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top