I am curious about the feasibility of running old ARM32-Linux programs on AARCH64-Linux machines and I conducted some experiments:
- write a program "Hello, World!" and compile it statically with arm-none-linux-gnueabi-gcc and aarch64-linux-gnu-gcc.
- statically build and create a ramdisk using busybox and aarch64 compiler.
- put the 2 "Hello, World!" programs (in ARM32 and AARCH64) to the ramdisk.
- build a simple AARCH64-Linux kernel with vexpress_defconfig and aarch64 compiler.
- run the kernel and ramdisk using qemu-system-aarch64.
(All binary files including busybox in the ramdisk are statically compiled.)
Result:
- "Hello, World!" program in AARCH64 was successfully executed.
- "Hello, World!" program in ARM32 cannot be run but shows the messages:
line 1: syntax error: unexpected word (expecting ")")
Is there suggestion or expertise to solve the issue above?
Thank you moonbutt74. You had provided an useful clue for me to seek the solution to that issue.
To enable the support of running ARM32-Linux programs on AARCH64 kernel, the option in the kernel should be selected:
- run make menuconfig ARCH=arm64
- go to the option and select it:
Userspace binary formats ---> Kernel support for 32-bit EL0
recompile the kernel by running
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
run the recompiled kernel with ramdisk and qemu-system-aarch64.
the "Hello, World!" programs in (ARM32 and AARCH64) can be executed successfully !!
来源:https://stackoverflow.com/questions/34648832/can-old-arm32-binary-files-be-run-on-aarch64-kernel