问题
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?
回答1:
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