我已经在qemu 64位ARM(followed this tutorial)上安装了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格式错误
在运行的文件上运行文件命令,我得到:
文件_1:ELF 32位LSB可执行文件,ARM,EABI4版本1(SYSV),静态链接,未剥离
和不运行的那个:
文件_2:ELF 32位LSB可执行文件,ARM,版本1(ARM),静态 链接,已剥离
都可以在32位系统(armv7l)上工作
唯一的区别是SYSV / ARM版本。
是否可以解决而不重新编译内核?(read this post)
答案 0 :(得分:3)
如链接文章所建议,这要求在内核中启用CONFIG_COMPAT。另一方面,如果您的内核没有它,我会感到惊讶-我从该教程中学到的Debian 4.9.0-4内核确实设置了CONFIG_COMPAT。您可以通过查看客户机的/ boot /中的配置文件来检查内核是否启用了它。如果缺少它,那么您需要一个新的内核,而没有其他帮助。
但是,在您的情况下,您确实拥有CONFIG_COMPAT,并且某些可执行文件可以工作。有效和无效的区别在于,有效的是EABI,无效的是OABI。 OABI是32位Arm Linux二进制文件的旧的且过时的ABI(“ O”表示“ old”,并且十年来一直是一个不好的选择...),并且它不受64位支持内核的CONFIG_COMPAT。如果要在64位内核下运行这些二进制文件,则需要从源文件中将这些二进制文件重建为EABI二进制文件。