阅读ARMv8手册时,我有以下问题帮助理解整体情况。
传统的32位应用程序(ARMv7或更早版本)能否在ARMv8操作系统上直接运行?
如果需要为ARMv8重新构建传统应用程序,并假设我将应用程序重新构建为32位(Aarch32),这是否需要32位操作系统的底层支持?(了解寻址机制如何工作很有趣。)
请尽可能提供参考资料。
附注:我正在针对具备Aarch64支持的Linux操作系统进行开发(3.7及更高版本)。
阅读ARMv8手册时,我有以下问题帮助理解整体情况。
传统的32位应用程序(ARMv7或更早版本)能否在ARMv8操作系统上直接运行?
如果需要为ARMv8重新构建传统应用程序,并假设我将应用程序重新构建为32位(Aarch32),这是否需要32位操作系统的底层支持?(了解寻址机制如何工作很有趣。)
请尽可能提供参考资料。
附注:我正在针对具备Aarch64支持的Linux操作系统进行开发(3.7及更高版本)。
Aarch64平台可以运行32位的ARM,但这种兼容性是可选的。
要运行AArch32二进制文件,您需要使用所有应用程序在32位版本中使用的库。与x86-64系统上的i686二进制文件相同。
CONFIG_COMPAT
,在 https://github.com/torvalds/linux/blob/v4.17/arch/arm64/Kconfig#L1274 中,它的意思是: 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-linux-gcc -static hello_world.c
a.out: line 1: syntax error: unexpected word (expecting ")")
/proc/config.gz
显示CONFIG_COMPAT
已设置,但似乎Linux内核没有将其识别为ELF文件,而是退回到了/bin/sh
,如果我执行以下命令,会得到相同的错误提示:sh /mnt/9p/a.out