4

我已经在 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:无法执行二进制文件:执行格式错误

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

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

和一个不运行的:

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

并且都适用于 32 位系统(armv7l)

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

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

4

1 回答 1

3

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

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

于 2018-08-03T09:05:04.030 回答