Ich bin neugierig über die Machbarkeit der laufenden alte ARM32-Linux-Programme auf AARCH64-Linux-Maschinen und führte ich einige Experimente: „Hallo, Welt“Können alte ARM32-Binärdateien auf dem AARCH64-Kernel ausgeführt werden?
- ein Programm schreiben, und kompiliere es statisch mit arm-none-linux-gnueabi-gcc und aarch64-linux-gnu-gcc.
- statisch erstellen und erstellen Sie eine Ramdisk mit busybox und aarch64-Compiler.
- setzen Sie die 2 "Hallo, Welt!" Programme (in ARM32 und AARCH64) auf der Ramdisk.
- Erstellen Sie einen einfachen AARCH64-Linux-Kernel mit vexpress_defconfig und aarch64-Compiler.
- den Kernel und die Ramdisk mit qemu-system-aarch64 ausführen.
(Alle Binärdateien einschließlich Busybox in der Ramdisk werden statisch kompilierten.)
Ergebnis: "Hallo, Welt"
- Programm in AARCH64 wurde erfolgreich ausgeführt.
- "Hallo Welt!" Programm in ARM32 kann nicht ausgeführt werden, sondern zeigt die Meldungen:
Linie 1: Syntaxfehler: unerwartetes Wort (erwartet „)“)
Gibt es Verbesserungsvorschlag oder Know-how, das Problem oben zu lösen?
Eine interessante Frage. Aber ich bin mir ziemlich sicher, dass es ein ABI-Problem ist, kein Sprachproblem. –
Verwenden Sie einen nicht standardmäßigen Kernel? Mainline arm64 [hat kein vexpress_defconfig] (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/configs), und das hättest du nicht Treffen Sie dies mit dem arm64 Defconfig (wobei die notwendigen Bits standardmäßig aktiviert sind). – Notlikethat