我喜欢编程挑战,编写内核似乎是一项挑战。
不幸的是,内核特别难以测试,因为它们基本上是操作系统的核心,所以不能轻易地在操作系统之上运行。
然而,我知道有一种叫做虚拟机的应用程序,可以模拟计算机硬件。
使用虚拟机开发和测试内核(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等模拟器进行开发。
我们使用静态grub,在构建过程中将其复制到最终的ISO中。有些事情必须这样做,直到操作系统变得自主托管。我强烈建议不要实现自己的用户空间C库,除非你真的想从头开始做所有事情..这样你会更快地成为自主托管 :)
虽然Simics是非免费的,但我强烈推荐它(以及其内置的调试/分析工具)来制作你的内核。一旦你有了某种内核控制台和记录器,QEMU就可以很好地完成工作。
这很简单。设置一个虚拟机,编写你的内核,将其复制到虚拟机中,启动虚拟机。
如果您想要更具体的建议,您需要提供更多详细信息。