首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARMv8 -在64位操作系统上运行遗留32位应用程序

ARMv8 -在64位操作系统上运行遗留32位应用程序
EN

Stack Overflow用户
提问于 2014-03-17 17:00:50
回答 2查看 12K关注 0票数 5

在阅读ARMv8手册时,我有以下几个问题来帮助理解全局。

  1. 可以遗留32位应用程序。(ARMv7或更早版本)在ARMv8操作系统上运行?
  2. 如果需要为ARMv8重新构建遗留应用程序,并假设我将应用程序重新构建为32位(Aarch32),这是否需要32位操作系统底层支持?(在这里了解寻址机制是如何工作的是很有趣的。)

请尽可能提供参考资料。

PS:我以Linux为目标,支持Aarch64 (3.7及更高版本)

EN

回答 2

Stack Overflow用户

发布于 2014-04-12 09:15:25

Aarch64平台可以运行32位ARM,但这种兼容性是可选的。

要运行AArch32二进制文件,您需要在32位版本中使用所有库应用程序。与x86-64系统上的i686二进制文件相同。

票数 5
EN

Stack Overflow用户

发布于 2018-07-22 15:42:37

还有一个Linux arm64 CONFIG_COMPAT at:https://github.com/torvalds/linux/blob/v4.17/arch/arm64/Kconfig#L1274,上面写着:

代码语言:javascript
复制
  This option enables support for a 32-bit EL0 running under a 64-bit
  kernel at EL1. AArch32-specific components such as system calls,
  the user helper functions, VFP support and the ptrace interface are
  handled appropriately by the kernel.

这很可能是必需的,并且在这个线程上提到的ARM员工:https://community.arm.com/processors/f/discussions/5535/running-armv7-binaries-on-armv8用户土地指令基本上是相同的,除了一些例外:

对于像Linux应用程序这样的东西,那么是的。ARMv8-A包括AArch32,它提供了与ARMv7-A的向后兼容性。有一些限制,例如不再支持SWP指令。但这些是应用程序不太可能使用的东西类型(在ARMv7中被废弃)。 对于裸金属来说,在另一个平台上使用二进制文件有所有常见的问题。因此,在大多数情况下,您需要进行某种程度的移植。

然后,我用这个QEMU完整的系统设置自己尝试了一下,但失败了:我用armv7编译器编译了一个C hello世界,如:

代码语言:javascript
复制
arm-linux-gcc -static hello_world.c

并将构建的文件放入aarch64目标,但当我尝试运行它时,它失败了:

代码语言:javascript
复制
a.out: line 1: syntax error: unexpected word (expecting ")")     

尽管/proc/config.gzCONFIG_COMPAT已经设置好了。

似乎Linux内核不是将其标识为ELF文件,而是返回到/bin/sh,如果我这样做的话,我会得到同样的错误:

代码语言:javascript
复制
sh /mnt/9p/a.out

试着用弹壳代替ELF。

尤其是,我知道Linux内核可以从binfmt签名中选择archs,因为qemu-user这样做:https://unix.stackexchange.com/questions/41889/how-can-i-chroot-into-a-filesystem-with-a-different-architechture

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22460589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档