代码之家  ›  专栏  ›  技术社区  ›  luiscubal

开发内核并在虚拟机中进行测试

  •  8
  • luiscubal  · 技术社区  · 17 年前

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

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

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

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

    5 回复  |  直到 17 年前
        1
  •  11
  •   NTDLS    17 年前

    当你的宠物操作系统出现严重问题时,Bochs似乎更善于让你知道…太慢了!我使用virtualpc进行通用测试,当事情变得模糊时使用bochs。

    而且,您很可能每2分钟就启动一次操作系统,因此它有助于采用某种自动方式构建启动映像并从虚拟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

        2
  •  1
  •   Tim Post Samir J M Araujo    17 年前

    你可能有兴趣看看 HelenOS . 它是一个从零开始的微内核,已经移植到许多使用Simics和QEMU等模拟器开发的体系结构(在裸机上只需很好地引导)。

    我们使用一个静态GRUB,在构建过程中复制到最终的ISO。有些事情必须这样,直到操作系统成为自我托管。我强烈建议不要实现您自己的用户空间C库,除非您真的想从头开始做所有事情。你很快就会成为自己的主人:)

    尽管simics是非免费的,但我强烈推荐它(及其内置的调试/分析工具)同时制作内核。一旦您有了某种内核控制台和记录器,QEMU就会做得非常好。

        3
  •  0
  •   Stack Overflow is garbage    17 年前

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

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

        4
  •  0
  •   Bombe    17 年前

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

    这当然意味着主机上的构建系统有一种方法可以将内核写入虚拟机的文件系统,这可能会有困难。

    随机挑选一个, bochs 似乎 support 使用诸如dd等标准工具从外部编辑引导媒体。

        5
  •  0
  •   Petey    17 年前

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

    如果您真的认真对待这项工作,那么您肯定希望针对模拟器或VM运行调试/代码/构建/部署周期。有人提到Bochs,这很流行。如果你喜欢模拟速度,还有一个叫qemu的模拟器比bochs快。

    我建议您的开发环境运行在Linux或Windows下,这同样是一个明智的选择,因为这些开发环境有可用的文档。

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