我喜欢编程挑战,编写内核似乎是一个编程挑战。
不幸的是,内核特别难以测试,因为它们基本上是操作系统的核心,因此它们不能轻易地在操作系统之上运行。
但是,我知道可以模拟计算机硬件的称为虚拟机的应用程序。
使用虚拟机开发和测试内核(C+Assembly)的最简单/最好的方法是什么?
我喜欢编程挑战,编写内核似乎是一个编程挑战。
不幸的是,内核特别难以测试,因为它们基本上是操作系统的核心,因此它们不能轻易地在操作系统之上运行。
但是,我知道可以模拟计算机硬件的称为虚拟机的应用程序。
使用虚拟机开发和测试内核(C+Assembly)的最简单/最好的方法是什么?
虽然 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
您可能有兴趣查看HelenOS。它是一个从头开始的微内核,已移植到使用 Simics 和 QEMU 等模拟器开发的许多架构(在裸机上启动就好了)。
我们使用在构建过程中复制到最终 ISO 的静态 grub。在操作系统变为自托管之前,有些事情必须如此。我强烈建议不要实现自己的用户空间 C 库,除非你真的想从头开始做所有事情......你会很快成为自托管 :)
尽管 Simics 不是免费的,但我强烈推荐它(以及它内置的调试/分析工具),同时制作你的内核。一旦你有了某种内核控制台和记录器,QEMU 就会做得很好。
这很简单。设置虚拟机,编写内核,将其复制到虚拟机,启动虚拟机。
如果您需要更具体的建议,则需要更具体。
您需要问自己的第一个问题是您的目标硬件架构是什么?为了讨论,我假设您的目标是 IA_32 架构,这可能是一个明智的选择,因为该处理器上有大量现成的文档。
如果您真的认真对待这项工作,那么您肯定会希望针对模拟器或 VM 运行调试/代码/构建/部署周期。有人提到BOCHS,非常流行。如果您喜欢仿真速度,那么还有一个名为 Qemu 的仿真器,它比 BOCHS 更快。
我建议您的开发环境在 Linux 或 Windows 下运行,由于这些开发环境的可用文档,这可能又是一个明智的选择。
Make是你的朋友。使用它来自动化构建/执行过程。我建议您预先选择您的工具集/编译器,并花一些时间好好学习它们。从长远来看,它会拯救你。