在aarch64上运行32位精灵



我已经在qemu 64位ARM上安装了Debian(遵循本教程(

uname -a

Linux测试4.9.0-7-arm64#1 SMP Debian 4.9.110-1(2018-07-05(aarch64 GNU/Linux

我正试图在上面运行32位的elf文件,但有些文件能正常工作,有些则不能:

bash:/file_2:无法执行二进制文件:Exec格式错误

在运行的文件上运行file命令,我得到:

file_1:ELF 32位LSB可执行文件,ARM,EABI4版本1(SYSV(,静态链接,未剥离

和不运行的:

file_2:ELF 32位LSB可执行文件,ARM,版本1(ARM(,静态链接、剥离

并且两者都在32位系统(armv7l(上工作

唯一的区别是SYSV/ARM版本。

在不重新编译内核的情况下有什么解决办法吗?(阅读本文(

正如链接的帖子所建议的,这需要在内核中启用CONFIG_COMPAT。另一方面,如果你的内核没有它,我会感到惊讶——我在做该教程时得到的Debian 4.9.0-4内核确实设置了CONFIG_COMPAT。您可以通过查看将在guest的/boot/中的配置文件来检查内核是否启用了它。如果它丢失了,那么您需要一个新的内核,其他任何东西都无济于事。

然而,在您的情况下,您确实有CONFIG_COMPAT,并且一些可执行文件可以工作。工作的和不工作的区别在于,工作的是EABI,不工作的是OABI。OABI是一个用于32位Arm Linux二进制文件的陈旧ABI("O"代表"旧",十多年来一直是个糟糕的选择…(,64位内核的CONFIG_COMPAT不支持它。如果您想在64位内核下运行这些二进制文件,则需要将这些二进制文件从源代码重建为EABI二进制文件。

最新更新