【问题标题】:Linux VM with custom architecture具有自定义架构的 Linux VM
【发布时间】:2015-06-06 20:44:59
【问题描述】:

我正在考虑创建几个具有不同参数/架构的 VM(可能但不一定使用 QEMU)。

  • 大小不同(int)
  • 不同的字节序
  • 不同的对齐规则(例如 int 必须在 4 字节边界上对齐)
  • 等等……

我熟悉构建自己的内核、gcc、glibc 等,但我不完全确定这些参数的实际决定因素(假设它以某种方式与 CPU 相关)。在我的情况下,性能无关紧要,目的只是在不同环境下测试构建(主要是网络相关)。

这可能吗?有人可以将我推向正确的方向吗?我很乐意阅读文档,但我不确定从哪里开始。

【问题讨论】:

  • 所以“自定义”是指您想要实现您的自己的指令集设计,具有各种宽度/字节序/对齐规则/等。通过将它们添加到您的 QEMU 版本,并将 Linux 移植到它们,或者您的意思是您想为现有的指令集(例如 ARM、SPARC、MIPS、PowerPC 等)设置一组虚拟 Linux 机器?跨度>
  • 现有指令集。

标签: linux gcc glibc qemu


【解决方案1】:

我熟悉构建自己的内核、gcc、glibc 等,但我不完全确定这些参数的实际决定因素(假设它以某种方式与 CPU 相关)。

如果“那些参数”是指项目符号列表中的项目,是的,它们是由 CPU 的指令集架构决定的。在几乎所有运行 Linux 的设备上,sizeof(int) 将是 4,即 32 位,即使在 64 位机器上也是如此,但 sizeof(long)sizeof({something} *) 在 32 位机器上将是 4,而在 8 64 位机器。所以:

  • sizeof(long)/sizeof({pointer type}):32 位 x86/32 位 PowerPC/32 位 SPARC/等上 4 个,64 位 x86(x86-64)/64 位 PowerPC/64 位 SPARC/上 8 个等
  • endianness:x86、ARM 和其他一些设备上的 little-endian,PowerPC、SPARC 和其他一些设备上的 big-endian(我认为 Linux 在某些双端架构上可能同时支持 little-endian 和 big-endian 模式)
  • 对齐规则:x86 不需要对齐,但某些处理器可能运行得更快,对齐更好,我认为 PowerPC 并不完全需要它,尽管它可能有问题未对齐的操作数跨越页面边界 - SPARC 是我所知道的一种架构,需要严格对齐。

所以我猜测主机可能是 x86 的一些风格,所以可能不需要模拟它。

从查看源代码到 QEMU 2.3.0 版本,QEMU 似乎可以模拟 32 位和 64 位 SPARC;如果可以的话,我建议拥有一个 SPARC 虚拟机,以捕获字节顺序和对齐问题。如果可能,您应该同时拥有 32 位和 64 位 x86 和 SPARC。

在那之后,我会看看 ARM(从源代码来看,如果 64 位 ARM 正在开发中,如果还没有的话),然后是 PowerPC(32 位和 64 位;我是但是不确定它们是否模拟任何 64 位平台)和 MIPS(32 位和 64 位,以及两种字节顺序,如果可能的话)。

在那之后,如果你真的有野心,你可以建立一个Linux机器来模拟像this one这样的机器的后代; QEMU 似乎支持 S/390 和/或 z/Architecture,或者您可以使用 Hercules。您还可以尝试一些支持 Linux 的其他嵌入式架构。

【讨论】:

    猜你喜欢
    • 2020-01-07
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2010-09-07
    • 2014-12-30
    相关资源
    最近更新 更多