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

时间:2016-01-07 06:41:47

标签: linux gcc arm arm64

我很想知道在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。
  6. (包括ramdisk中busybox的所有二进制文件都是静态编译的。)

    结果:

    1. “你好,世界!” AARCH64中的程序已成功执行。
    2. “你好,世界!”无法运行ARM32中的程序,但显示消息:
    3. 第1行:语法错误:意外的单词(期待“)”)

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

1 个答案:

答案 0 :(得分:8)

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

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

  1. 运行make menuconfig ARCH = arm64
  2. 转到选项并选择它:
  3. 用户空间二进制格式    --->内核支持32位EL0

    1. 运行make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

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

    4. “Hello,World!” (ARM32和AARCH64)中的程序可以成功执行!!

    5. The screenshot of "make menuconfig ARCH=arm64"