开发内核并在虚拟机中测试它们
-
19-08-2019 - |
题
我喜欢编程挑战,编写内核似乎是一个编程挑战。
不幸的是,内核特别难以测试,因为它们基本上是操作系统的核心,因此它们不能轻松地在操作系统之上运行。
但是,我知道称为虚拟机的应用程序可以模拟计算机硬件。
使用虚拟机开发和测试内核(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做了非常好的工作。
这是简单的。建立一个虚拟机,写你的内核,将其复制到虚拟机,启动虚拟机。
您需要,如果你想更具体的建议更具体。
这是你需要问自己的第一个问题就是硬件体系结构,你定位?我假设此讨论你的目标IA_32架构,这可能会是一个明智的选择,因为有很多在该处理器上随时可用的文档的缘故。
如果你对这项工作真正严肃的,那么你一定要运行您的调试/代码/构建/部署反周期的仿真器或VM。有人提到BOCHS,这是非常受欢迎的。如果仿真速度是你的事,也有称为Qemu中的模拟器比BOCHS更快。
我建议你的开发环境,Linux或Windows,而这又可能会是一个明智的选择下运行,由于这些开发环境上可用的文档。
请为你的朋友。用它来自动生成/执行过程。我建议你挑选你的工具箱/编译了前面,并且花一些时间学习他们。这将节省您在长期运行。