Re: eseguire software di un'architettura hardware diversa da quella del proprio sistema (ERA: Re: Ancora CIE e middleware)
> notably 64bit kernels often support running
> 32bit software (but most probably not the converse)" che non sembra
> escludere definitivamente
Se il mondo non e` cambiato nel frattempo, mi sentirei di escluderlo.
Un eseguibile a 64 bit usa puntatori a 64 bit e vuole una memoria
virtuale a 64 bit (non ricordo quanti, ma piu` di 32). Se il kernel
e` a 32 bit, offre una memoria virtuale a 32.
> "or a qemu-user instance is configured
> to act as an on-the-fly emulation layer, see QemuUserEmulation"
Questo funziona come un gioiellino. Ma ovviamente il codice viene
interpretato (da qemu), non eseguito, quindi va piu` lento. Qemu e`
straordinariamente efficente (e` Fabrice Bellard, mica l'ultimo
pistola) ma comunque siamo circa 10x piu` lento del nativo.
> La cosa è molto interessante e, ad avere tempo, sarebbe da sperimentare
E' banale. Si prende un eseguibile arm e si esegue. E` uno dei primi
esempi che faccio ai miei studenti, partendo da PC per andare su
micretto.
Certo, se e` un eseguibile "serio" occorrono anche le librerie dinamiche
dell'architettura eccetera. Io lo faccio vedere senza libreria,
implementando le 2 chiamate di sistema che mi servono (write e exit):
laptopo% make hell-arm
arm-none-eabi-gcc -c -o syscalls-arm.o syscalls-arm.S
arm-none-eabi-gcc -Wall -static -ffreestanding -c -o hell.o hell.c
arm-none-eabi-ld -e main -o hell-arm syscalls-arm.o hell.o
laptopo% ./hell-arm
Hello
laptopo% file hell-arm
hell-arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped
laptopo% uname -m
x86_64
Il trucco sta in binfmtmisc, che definisce interpreti per vari formati
di file, in base al contenuto del file (il "magic number"):
laptopo% ls /proc/sys/fs/binfmt_misc/
cli qemu-aarch64 qemu-mips qemu-sh4
jar qemu-alpha qemu-mipsel qemu-sh4eb
llvm-3.1.binfmt qemu-arm qemu-ppc qemu-sparc
python2.6 qemu-armeb qemu-ppc64 qemu-sparc32plus
python2.7 qemu-cris qemu-ppc64abi32 qemu-sparc64
python3.2 qemu-m68k qemu-ppc64le register
python3.4 qemu-microblaze qemu-s390x status
Reply to: