Il 18/10/2021 22:21, Davide Prina ha scritto:
On 18/10/21 08:49, Diego Zuccato wrote:
Ovviamente: un sistema a 64 bit può gestire una lib a 32 bit ma non
viceversa.
in teoria, con Debian, puoi creare un sistema a più architetture
hardware e quindi avere un sistema 64-32 bit... e probabilmente lo
puoi ottenere sia partendo da un sistema a 32 che da uno a 64 (ho
provato solo da amd64 aggiungere i386)
Si, puoi forse partire da uno a 32 bit, ma se il kernel non è a 64 bit,
il processore girerà solo a 32. In pratica il processore in modalità 64 bit riconosce il codice a 32 bit e va in modalità compatibile (sto semplificando al massimo). Ma se il processore è in modalità 32 bit, non sa nulla del codice a 64 bit e se va bene si blocca su un illegal opcode.
notably 64bit kernels often support running
32bit software (but most probably not the converse)" che non sembra escludere definitivamente
"or a qemu-user instance is configured
to act as an on-the-fly emulation layer, see QemuUserEmulation"
La cosa è molto interessante e, ad avere tempo, sarebbe da sperimentare
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
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
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 296 |
Nodes: | 16 (2 / 14) |
Uptime: | 57:18:27 |
Calls: | 6,652 |
Calls today: | 4 |
Files: | 12,200 |
Messages: | 5,331,018 |