2016-01-07 6 views
5

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?

  1. ein Programm schreiben, und kompiliere es statisch mit arm-none-linux-gnueabi-gcc und aarch64-linux-gnu-gcc.
  2. statisch erstellen und erstellen Sie eine Ramdisk mit busybox und aarch64-Compiler.
  3. setzen Sie die 2 "Hallo, Welt!" Programme (in ARM32 und AARCH64) auf der Ramdisk.
  4. Erstellen Sie einen einfachen AARCH64-Linux-Kernel mit vexpress_defconfig und aarch64-Compiler.
  5. 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"

  1. Programm in AARCH64 wurde erfolgreich ausgeführt.
  2. "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?

+0

Eine interessante Frage. Aber ich bin mir ziemlich sicher, dass es ein ABI-Problem ist, kein Sprachproblem. –

+0

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

Antwort

6

Danke moonbutt74. Sie haben mir einen nützlichen Anhaltspunkt gegeben, um die Lösung für dieses Problem zu finden.

die Unterstützung der laufenden ARM32-Linux-Programme auf AARCH64 Kernel, die Option im Kernel ausgewählt Damit werden soll:

  1. Lauf machen menuconfig ARCH = arm64
  2. auf die Option und wählen sie:

Userspace Binärformaten ---> Kernel-Unterstützung für 32-Bit-EL0

  1. kompilieren Sie den Kernel durch Ausführen von make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

  2. führen Sie den neu kompilierten Kernel mit Ramdisk und qemu-system-aarch64.

  3. die "Hallo, Welt!" Programme in (ARM32 und AARCH64) können erfolgreich ausgeführt werden !!

The screenshot of "make menuconfig ARCH=arm64"

Verwandte Themen