Re: eseguire software di un'architettura hardware diversa da quella del proprio sistema (ERA: Re: Ancora CIE e middleware)
On Tue, Oct 19, 2021 at 11:03:09PM +0200, Alessandro Rubini wrote:
> > 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
Alex al solito sei stellare, questa mail me la salvo...
Si lo so, dirai, banale, ok ... per te, e una volta che l'ho letta,
anche per me. È questo il punto: è tutto semplice _dopo_ che lo sai.
GRAZIE
--
Saluton,
Marco Ciampa
Reply to: