【问题标题】:Developing kernels and testing them in virtual machines开发内核并在虚拟机中测试它们
【发布时间】:2010-10-13 14:21:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c assembly kernel virtual-machine


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        虽然 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

        【讨论】:

        • 我的电脑中没有软盘阅读器,但我想我不需要用于软盘图像的阅读器。除了我使用 Linux 之外,您的指示似乎准确无误……该操作系统有什么特别之处吗?
        • 好吧,我的不足之处——我的 Linux 经验非常有限。据我了解:创建软盘映像并将文件复制到其中比在 Windows 中简单得多,但我在该领域的任何答案都可能只是误导。但是,请查看适用于 Linux 的 VMWare。这是好东西!
        • Linux:编译器明显是gcc,而不是djgpp(本身就是gcc的一个port)。
        【解决方案4】:

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

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

        随机选择一个,bochs 似乎是support 使用 dd 等标准工具从外部编辑启动媒体。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-25
            • 2012-08-26
            • 2021-10-29
            • 1970-01-01
            • 2010-09-28
            相关资源
            最近更新 更多