旧的 ARM32 二进制文件可以在 AARCH64 内核上 运行 吗?

Can old ARM32 binary files be run on AARCH64 kernel?

我很好奇 运行在 AARCH64-Linux 机器上运行旧的 ARM32-Linux 程序的可行性,我进行了一些实验:

  1. 写一个程序"Hello, World!"然后用arm-none-linux-gnueabi-gcc和aarch64-linux-gnu-gcc静态编译。
  2. 使用 busybox 和 aarch64 编译器静态构建和创建 ramdisk。
  3. 将 2 "Hello, World!" 个程序(在 ARM32 和 AARCH64 中)放入 ramdisk。
  4. 使用 vexpress_defconfig 和 aarch64 编译器构建一个简单的 AARCH64-Linux 内核。
  5. 运行 使用 qemu-system-aarch64 的内核和 ramdisk。

(ramdisk中包括busybox在内的所有二进制文件都是静态编译的。)

结果:

  1. "Hello, World!" AARCH64 程序执行成功
  2. "Hello, World!" ARM32 中的程序不能是 运行 但显示消息:

第 1 行:语法错误:意外单词(应为“)”)

是否有解决上述问题的建议或专业知识?

谢谢 moonbutt74。您为我寻求解决该问题提供了有用的线索。

要在 AARCH64 内核上启用 运行ning ARM32-Linux 程序的支持,内核中的选项应该是 selected:

  1. 运行 make menuconfig ARCH=arm64
  2. 转到选项并select它:

用户空间二进制格式 ---> 内核支持 32 位 EL0

  1. 通过运行ningmake ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

  2. 重新编译内核
  3. 运行 带有 ramdisk 和 qemu-system-aarch64.

  4. 的重新编译内核
  5. (ARM32和AARCH64)中的"Hello, World!"个程序可以执行成功!!