26

我受到了 Fabrice Bellard在 Javascript 中实现 x86 虚拟机的启发,我想尝试编写能够运行 Linux 内核的最简单的虚拟机。这是一项纯粹的教育努力,除了理解和分享使之成为可能的代码之外没有其他目的。

浏览了x86 规范后,我怀疑我可能会因为尝试编写能够模拟完整 x86 指令集的虚拟机而陷入困境。相反,我正在寻找一种可以尝试模仿的更简单的架构。

我已经阅读了这个询问如何模拟 x86 架构的问题,答案建议从更简单的东西开始,比如 ARM 架构。我的问题更具体:我可以尝试模拟能够运行 Linux 内核的最简单的可能架构是什么?

我有兴趣完全模拟整个机器,而不是简单地将指令传回主机(例如,如果我正在编写 x86 模拟器,这将是可能的)。我有相当多的 16 位汇编知识,以及一些操作系统理论背景,所以只要有足够的工作,这应该是触手可及的。

4

4 回答 4

6

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

您还必须知道,Fabrice Bellard 的 javascript 虚拟机使用 32 位 x86 兼容 CPU,这是 Linux 原生支持的。您必须自己为 ARM 或 MIPS 移植 linux 内核(使用工具链)。查看有关如何使用 linux 内核的链接

对于 MIPS:

对于 ARM:

于 2013-02-28T19:01:00.187 回答
4

Linux内核支持的架构列表:

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

“最简单的可能”有点主观,但以下是我认为该列表中不太复杂的内容:

  • MIPS
  • H8 (μClinux)
  • 68k/冷火 (μClinux)
于 2013-02-26T13:40:59.690 回答
2

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

  • 简单的指令集(指令格式少,操作码少:任何不像 x86 的东西)
  • 文档:广泛可用。这意味着可能会丢弃一些简单的架构,专注于广泛支持的架构(例如,x86 在这里获胜,但您也可以找到很多关于 RISC 的材料,尤其是来自学术界的 MIPS)。或者选择一些开放的东西,比如OpenRisc
  • 在“内核模式”中易于使用。在特权内核模式下,需要考虑一个全新的寄存器、指令和内部结构世界。并且不要忘记处理器也带有总线,简单的处理器可能有非常复杂的总线!你也需要效仿。或者,如果您对它感到满意,您可以选择用户模式 ​​Linux 。

最后,我会建议一些“旧”的东西:相当简单,尤其是在特权模式下,经过充分研究和记录。例如,原始的 MIPS、摩托罗拉 68k 系列,或接近原始 RISC ( http://en.wikipedia.org/wiki/Berkeley_RISC ) 的东西,如果有 Linux 变体的话!

于 2013-03-05T14:11:55.270 回答
0

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

Xilinx 为其 FPGA 产品线定义和支持,参考文档位于: http ://www.xilinx.com/support/documentation/sw_manuals/mb_ref_guide.pdf

于 2013-02-26T18:53:19.460 回答