Linux 具有自定义架构的虚拟机

Linux VM with custom architecture

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

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

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

I'm familiar with building my own kernel, gcc, glibc etc but I'm not entirely sure what actually decides those parameters (assuming it is related to the CPU somehow).

如果 "those parameters" 是指项目符号列表中的项目,是的,它们由 CPU 的指令集架构决定。在几乎任何你将 运行 宁 Linux,sizeof(int) 将是 4,即 32 位,即使在 64 位机器上,但是 sizeof(long)sizeof({something} *) 在 32 位机器上为 4,在 64 位机器上为 8。所以:

  • sizeof(long)/sizeof({pointer type}): 4 on 32-bit x86/32-bit PowerPC/32-bit SPARC/etc., 8 on 64-bit x86(x86-64) /64 位 PowerPC/64-bit SPARC/etc.
  • endianness:x86、ARM 和其他一些设备上的小端,PowerPC、SPARC 和其他一些设备上的大端(我认为 Linux 可能同时支持小端和大端模式一些双端架构)
  • 对齐规则: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 seems to support S/390 and/or z/Architecture, or you could go with Hercules 这样的机器的后代。您还可以尝试一些支持 Linux.

的附加嵌入式架构