【问题标题】:Can old ARM32 binary files be run on AARCH64 kernel?旧的 ARM32 二进制文件可以在 AARCH64 内核上运行吗?
【发布时间】:2016-04-11 11:17:31
【问题描述】:

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

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

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

结果:

  1. “你好,世界!” AARCH64 中的程序已成功执行。
  2. “你好,世界!” ARM32 中的程序无法运行,但显示消息:

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

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

【问题讨论】:

  • 一个有趣的问题。但我很确定这是 ABI 问题,而不是语言问题。
  • 您使用的是非标准内核吗?主线 arm64 doesn't have a vexpress_defconfig,而您不会使用 arm64 defconfig 来解决这个问题(默认情况下启用必要的位)。

标签: linux gcc arm arm64


【解决方案1】:

谢谢你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)中的程序可以成功执行!!

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 2022-09-29
    • 2010-09-08
    • 2021-09-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多