在 Intel x86 处理器上运行带有 Solaris OS(Sparc 体系结构)的 VM 将小字节序解析为大字节序?
Posted
技术标签:
【中文标题】在 Intel x86 处理器上运行带有 Solaris OS(Sparc 体系结构)的 VM 将小字节序解析为大字节序?【英文标题】:Running a VM with Solaris OS (Sparc Architecture) on a Intel x86 Processor resolve little Endian to big Endian? 【发布时间】:2017-03-03 06:42:15 【问题描述】:我目前正在使用基于 Sparc V8 架构 Atmel 的开发板。因此,对于单元级测试,我正在我的 linux 机器(Intel x86)上进行。因为,x86 是一个小端机器,而 Atmel 处理器是一个大端处理器,我所有的内存指针都在折腾。使用 Solaris(Sparc-Big endian OS)移植 VM 并运行测试有帮助吗?
【问题讨论】:
SPARC 系统上的内存和 Intel 系统上的内存在不同的计算机上,所以我不明白为什么这是个问题。您是否尝试在一个系统上打印内存地址并想象相应的内容将存储在另一个系统上?情况极不可能。使用字节序转换宏进行调试。 【参考方案1】:你为什么不在你的 sparc 机器上安装 linux 呢? Linux 已经为 sparc 提供了一个端口,它应该仍然可以在 v8 cpu 上工作,因为维护人员非常小心地保持旧的东西正常工作。
【讨论】:
那会解决什么问题?硬件仍然是大端的。 Sparc Machine 只不过是一个 Atmel ATF69 处理器,目前用作裸机,因此移植 linux 对我没有帮助。我的大部分测试(尤其是单元测试)都将在我的桌面上进行,即 Intel x86。问题是字节顺序的不同,所以我所有的内存操作都需要折腾。 猜我不明白你想做什么,因为你的问题很混乱。您是什么意思“将使用solaris移植VM”?你的意思是在英特尔的虚拟机中运行solaris?那么你的目标是在 sparc 上运行还是在 intel 上运行?或者你只是想在英特尔上测试?你能澄清一下吗?我也不明白“去折腾”这个表达。实际问题是什么?如果您编写的代码是字节序中性的,那么它应该适用于两种架构,并且您应该能够在 intel 上测试您的代码,然后稍后在 sparc 上运行它。提供更多信息,我会尽力提供帮助。 不幸的是,由于 x86 是小端,所以你在虚拟机中运行的任何东西也都是小端,所以我不认为这是一个选项。到目前为止,最容易做的事情是付出更大的努力使您的代码字节序中立。 @camelcc,确实 x86 具有宽松的对齐规则,这使得程序员可以摆脱错误代码,然后在 sparc 上运行时崩溃。如果您坚持将指针转换为其他类型(即指向不同大小对象的指针),那么您将遇到问题。但是根据 C 规范,这样的代码具有未定义的行为。请参阅open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf 中的第 6.3.2.3 节第 7 段【参考方案2】:您无法在 Intel VM 中运行 SPARC 版本的 Solaris,它只是无法启动。
唯一的例外是 QEMU 模拟器,但它可能会很慢
【讨论】:
“慢”可能无关紧要,在某些情况下可能是有益的。例如。我经常使用 Bochs 的原因之一是因为我想知道我的代码足够快,可以在古代 ( @Brendan,您可能正在其中运行 DOS。我在某处读到过,Windows XP(比 DOS 更现代)只需要一天时间就可以在 Bochs 中启动。我怀疑这是可以接受的时间 我正在运行我的代码(它是操作系统代码,有时包括完整的 3D 软件渲染之类的东西)。 “减速因素”约为 80(例如,使用 3000 MHz 主机 CPU,您将模拟 37.5 MHz 来宾 CPU)。不要相信任何你认为你可能读过的东西。如果在现代 3 GHz 机器上在 Bochs 中启动 Windows XP 需要 1 天,那么在最初设计为能够在其上运行的 ~350 MHz 机器上启动 Windows XP 需要几个小时。然而,很多“启动期间消耗的时间”是不受“减速因素”影响的磁盘 IO。以上是关于在 Intel x86 处理器上运行带有 Solaris OS(Sparc 体系结构)的 VM 将小字节序解析为大字节序?的主要内容,如果未能解决你的问题,请参考以下文章