首页 文章

最简单的架构,可以虚拟化并运行Linux内核

提问于
浏览
26

我've been inspired by Fabrice Bellard'的x86 virtual machine in Javascript的实现,我想尝试编写能够运行Linux内核的最简单的虚拟机 . 这是纯粹的教育努力,除了理解和分享使这成为可能的代码之外没有其他目的 .

浏览了x86 specification后,我怀疑通过尝试编写能够模拟完整x86指令集的虚拟机,我可能会把自己投入到深层 . 相反,我正在寻找一种可以尝试模拟的更简单的架构 .

我已经阅读了this question,它询问如何模拟x86架构,答案建议从更简单的东西开始,比如ARM架构 . 我的问题更具体: what is the simplest possible architecture that I can attempt to emulate which will be able to run the Linux kernel?

我对完全模拟整个机器感兴趣,而不是简单地将指令传递回主机(例如,如果我正在编写x86模拟器,则可以这样做) . 我有相当数量的16位汇编知识,以及一些操作系统理论背景,所以这应该是足够的工作范围 .

4 回答

  • 0

    Linux内核支持的体系结构列表:

    http://en.wikipedia.org/wiki/List_of_Linux_supported_architectures

    “最简单的可能”在某种程度上是主观的,但我认为这个列表中不那么复杂:

    • MIPS

    • H8(μClinux)

    • 68k / Coldfire(μClinux)

  • 6

    从易于实现的角度来看,最简单的架构将是最简单的 . 由于您正在构建一个完全模拟机器的仿真器,因此最简单的指令集设计/架构将是合适的 . RISC架构无疑更好 . 但是选择一个没有广泛使用的架构也不好,如果你需要支持,很少有人能够帮助你 . 编写模拟器绝非易事 . 我会说要么选择ARM还是MIPS,两者都很受欢迎:

    此外,您必须知道Fabrice Bellard的javascript虚拟机使用32位x86兼容CPU,这本身就是Linux支持的 . 你必须自己为Linux或MIPS移植linux内核(使用工具链) . 请参阅有关如何使用Linux内核的链接

    对于MIPS:

    对于ARM:

  • 4

    正如我在评论中所说,我会 balancer 三个方面:

    • 简单指令集(几种指令格式,少数操作码:任何不像x86的东西)

    • 文档:广泛可用 . 这意味着可能会丢弃一些简单的体系结构,专注于广泛支持的体系结构(例如,x86在这里获胜,但您也可以在RISC上找到很多材料,特别是学术界的MIPS) . 或者去打开一些东西,比如OpenRisc

    • 易于使用"kernel mode" . 在特权内核模式中,需要考虑一个全新的寄存器,指令和内部世界 . 不要忘记处理器也带有总线,简单的处理器可能有非常复杂的总线!你也需要效仿它 . 或者,你可以去User mode Linux,如果你对它感到满意的话 .

    最后,我会建议"old":相当简单,特别是在特权模式下,经过充分研究和记录 . 例如,最初的MIPS,Motorola 68k系列,或者接近原始RISC(http://en.wikipedia.org/wiki/Berkeley_RISC)的东西,如果有Linux版本的话!

  • 2

    您可以查看microBlaze,这是一款专为在FPGA上实现高效实现而设计的处理器 . 它只有两种指令格式和32种主要操作码值 .

    它由Xilinx定义并支持其FPGA系列,参考文档位于:http://www.xilinx.com/support/documentation/sw_manuals/mb_ref_guide.pdf

相关问题