我对在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。

  • (虚拟磁盘中的所有二进制文件(包括busybox)都被静态编译。)

    结果:
  • “你好,世界!” AARCH64中的程序已成功执行。
  • “你好,世界!” ARM32中的程序无法运行,但显示以下消息:

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

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

    最佳答案

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

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

  • 运行make menuconfig ARCH = arm64
  • 转到选项并选择它:

  • 用户空间二进制格式
    ---> 32位EL0的内核支持
  • 通过运行make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
  • 重新编译内核
  • 使用ramdisk和qemu-system-aarch64运行重新编译的内核。
  • “您好,世界!” (ARM32和AARCH64)中的程序可以成功执行!

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

    关于linux - 旧的ARM32二进制文件可以在AARCH64内核上运行吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34648832/

    10-11 18:33