2016-01-07 39 views
5

Sono curioso circa la fattibilità di esecuzione vecchi programmi ARM32-Linux su macchine AARCH64-Linux e ho condotto alcuni esperimenti: "Ciao, mondo!"I vecchi file binari ARM32 possono essere eseguiti sul kernel AARCH64?

  1. scrivere un programma e compilarlo staticamente con arm-none-linux-gnueabi-gcc e aarch64-linux-gnu-gcc.
  2. crea e crea un disco RAM in modo statico utilizzando il compilatore busybox e aarch64.
  3. inserire il 2 "Hello, World!" programmi (in ARM32 e AARCH64) nel ramdisk.
  4. crea un semplice kernel AARCH64-Linux con il compilatore vexpress_defconfig e aarch64.
  5. esegue il kernel e ramdisk utilizzando qemu-system-aarch64.

(Tutti i file binari tra busybox nel ramdisk sono compilati staticamente.)

Risultato: "Ciao, mondo"

  1. il programma in AARCH64 è stato eseguito con successo.
  2. "Ciao, mondo!" programma nel ARM32 non può essere eseguito, ma mostra i messaggi:

linea 1: errore di sintassi: parola inaspettata (aspettano ")")

C'è suggerimento o le competenze per risolvere il problema di cui sopra?

+0

Una domanda interessante. Ma sono abbastanza sicuro che si tratti di un problema ABI, non di un problema linguistico. –

+0

Stai usando un kernel non standard? Mainline arm64 [non ha un vexpress_defconfig] (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/configs), e non avresti colpiscilo con l'arm64 defconfig (dove i bit necessari sono abilitati di default). – Notlikethat

risposta

6

Grazie moonbutt74. Mi hai fornito un utile indizio per cercare la soluzione a questo problema.

Per abilitare il supporto dei programmi in esecuzione ARM32-Linux su kernel AARCH64, l'opzione nel kernel dovrebbero essere selezionati:

  1. eseguire make menuconfig ARCH = arm64
  2. passare all'opzione e selezionarlo:

userspace formati binari ---> supporto del kernel per 32 bit EL0

  1. ricompilare il kernel eseguendo make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

  2. eseguire il kernel ricompilato con ramdisk e qemu-system-aarch64.

  3. "Ciao, mondo!" i programmi in (ARM32 e AARCH64) possono essere eseguiti con successo !!

The screenshot of "make menuconfig ARCH=arm64"