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

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

  1. 写一个程序“Hello,World!” 并用arm-none-linux-gnueabi-gcc和aarch64-linux-gnu-gcc静态编译。
  2. 静态构build并使用busybox和aarch64编译器创build一个虚拟硬盘。
  3. 把2“你好,世界!” 程序(在ARM32和AARCH64中)到ramdisk。
  4. 用vexpress_defconfig和aarch64编译器构build一个简单的AARCH64-Linux内核。
  5. 使用qemu-system-aarch64运行内核和ramdisk。

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

结果:

  1. “你好,世界!” 程序在AARCH64被成功执行。
  2. “你好,世界!” 程序在ARM32不能运行,但显示消息:

第1行:语法错误:意外的词(期待“)”)

有解决上述问题的build议或专业知识吗?

Solutions Collecting From Web of "旧的ARM32二进制文件可以在AARCH64内核上运行吗?"

谢谢moonbutt74。 你为我提供了一个有用的线索来寻求这个问题的解决方案。

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

  1. 运行make menuconfig ARCH = arm64
  2. 去选择并选择它:

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

  1. 通过运行make ARCH = arm64重新编译内核CROSS_COMPILE = aarch64-linux-gnu-

  2. 使用ramdisk和qemu-system-aarch64运行重新编译的内核。

  3. “你好,世界!” (ARM32和AARCH64)中的程序可以成功执行!

“make menuconfig ARCH = arm64”的截图