首页 文章

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

提问于
浏览
7

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

  • 编写程序"Hello, World!"并使用arm-none-linux-gnueabi-gcc和aarch64-linux-gnu-gcc静态编译 .

  • 使用busybox和aarch64编译器静态构建并创建ramdisk .

  • 将2个"Hello, World!"程序(在ARM32和AARCH64中)放到ramdisk中 .

  • 使用vexpress_defconfig和aarch64编译器构建一个简单的AARCH64-Linux内核 .

  • 使用qemu-system-aarch64运行内核和ramdisk .

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

结果:

AARCH64中的

  • "Hello, World!"程序已成功执行 .
    ARM32中的
  • "Hello, World!"程序无法运行但显示消息:

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

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

1 回答

  • 6

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

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

    • 运行make menuconfig ARCH = arm64

    • 转到该选项并选择它:

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

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

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

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

    The screenshot of "make menuconfig ARCH=arm64"

相关问题