Raspberry Pi 3 e kernel a 64 bit, differenze tra armv7 e armv8


11

Esiste un kernel a 64 bit per Raspberry Pi 3? Mi sono guardato intorno e da fonti controllo la pagina ufficiale e qui sono elencati i seguenti kernel:

  1. NOOBS: questo è installer, nessun sistema operativo da solo, giusto?
  2. Rapsbian - solo un download, quindi presumo 32 bit compatibile con tutte le versioni di Pi
  3. Ubuntu MATE - aarch32 (ARMv7)
  4. Ubuntu Ubuntu Core: sembra solo a 32 bit
  5. OSMC - stessi download per "Raspberry Pi 2/3", quindi a 32 bit
  6. LibreELEC - build combinata per 2 e 3, quindi solo a 32 bit
  7. PiNet - non so cosa sia, ma dubita a 64 bit
  8. Sistema operativo RISC - non sembra Linux
  9. Stazione meteorologica - sì, proprio no

Quindi non sembra che ci sia un kernel ufficiale a 64 bit disponibile? Ce n'è uno non ufficiale? Posso semplicemente compilarne uno e mi aspetto che funzioni (suppongo di no, ma non fa male chiedere ...)? Qualcuno ci lavora almeno? Mi piacerebbe avere accesso ai numeri nativi a 64 bit.

D'altra parte, che differenza c'è tra armv7 e armv8? Gentoo offre tarball di livello 3 per armv7. Funzionerà su Pi 3 che è armv8?


"Gentoo offre tarball di livello 3 per armv7. Funzionerà su Pi 3 che è armv8?" Ancora una volta, no, non senza molto hacking, ma perché il kernel pi non è stock, non perché ARMv7 non funziona su ARMv8 (attualmente Pi 2 e 3 usano lo stesso kernel).
Riccioli d'oro

1
La guida di gentoo continua con la compilazione del codice sorgente del kernel Pi da github, quindi suppongo che spieghino questo. Ero solo interessato se posso usare la versione ARMv7 sulla scheda ARMv8, sembra che sì
graywolf

Risposte:


7

Da quel poco che ho trovato non c'è nulla di stabile e ufficiale. Alcuni ne hanno ottenuto uno da compilare, ma poi ci sono problemi con i driver / moduli.

Questi collegamenti potrebbero interessarti in merito a questo argomento.

Immissione dello stato di esecuzione aarch64

Raspbian Jessie (64 bit) per RPi3?


+1. Mi piacerebbe davvero sperimentare un sistema operativo a 64 bit. Potrei provare a rattoppare e compilare un sistema operativo molto leggero per il Pi (leggero per semplificare le cose)
PNDA

@ PandaLion98 Sarei molto interessato a questo
Dan V

11

Il consenso generale è che un kernel a 64 bit non aumenterà le prestazioni sul Pi, poiché gli unici 2 vantaggi reali di un kernel a 64 bit sono:

  1. valori int più grandi, che è comunque possibile specificare manualmente in un kernel a 32 bit
  2. la possibilità di avere più di 4 Gb di RAM, che è inutile sul Pi in quanto la RAM è integrata e non espandibile.

Inoltre, 64 bit contro 32 bit sui chip ARM non sono il grande salto di prestazioni rispetto ai chip x86, perché i chip x86 hanno avuto significativi aggiornamenti dell'architettura quando sono passati a 64 bit, mentre i chip ARM erano già piuttosto solidi nelle versioni a 32 bit.

Sentiti libero di sperimentare però! :)


2
OP non ha chiesto informazioni sulle prestazioni, ma sulla disponibilità. Personalmente, sto cercando di avere una distribuzione a 64 bit per Pi è perché l'ultimo MongoDB ha perso il supporto a 32 bit.
Andrejs Cainikovs,

Inoltre, le build di aarch64 tendono a dipendere meno dalle "librerie di fornitori di sorgenti chiuse" e sbloccano il potenziale v8 invece di tenerti bloccato nelle funzionalità v7.
earthmeLon

7

Un vantaggio di 64 bit che tutti sembrano dimenticare è che ARMv8 ha un numero di registri significativamente maggiore rispetto a ARMv7, ma ha anche prestazioni molto migliori in virgola mobile.

Non è solo un componente aggiuntivo di ARMv7, è un'architettura completamente nuova.



4

Ho riscontrato alcuni significativi miglioramenti delle prestazioni delle compilazioni a 64 bit contro 32 bit eseguendo i miei benchmark Android su un tablet utilizzando un ARM Cortex-A53 da 1,3 GHz. Le ultime vengono compilate tramite Eclipse e, in fase di esecuzione, rilevano se la CPU è ARM, Intel o MIPS, quindi l'architettura a 32 o 64 bit.

Nelle precedenti compilazioni di Windows per CPU Intel, il funzionamento a 64 bit poteva essere molto più veloce di 32 bit a causa dell'utilizzo delle istruzioni SIMD di tipo SSE. Tuttavia, il compilatore successivo a 32 bit, con incompatibilità all'indietro, produce praticamente lo stesso codice e una velocità simile.

I dettagli dei benchmark Android sono i seguenti, mostrando i risultati a 32 e 64 bit dell'A53 e tramite un Cortex-A9 a 1,2 GHz. Alla fine sono presenti alcuni elenchi di codici assembly che identificano le diverse istruzioni utilizzate. Di seguito è riportato un riepilogo dei risultati.

http://www.roylongbottom.org.uk/android%2064%20bit%20benchmarks.htm#anchorStart

Whetstone Benchmark - (piccoli loop) prestazioni simili, con valutazione complessiva influenzata dalla compilazione del test utilizzando le funzioni EXP.

Dhrystone Benchmark - ultimo MIPS / MHz 1,09 32 bit, 1,96 64 bit, 1,10 A9 - forse ottimizzato a 64 bit.

Linpack Benchmark - (N = 100) 64 bit DP 1,97 x più veloce, SP 2,67 x - vedi codice assembly.

Livermore Loops - (24 kernel) in media 1,5 volte più veloce, intervallo da 0,8 a 7,9 volte

Test cache e RAM L1 / L2

MemSpeed ​​- calcoli float e interi - guadagna cache 2,2 x, RAM 1,5 x.

BusSpeed ​​- streaming di dati interi e lettura a raffica - streaming 2,0 x L1, 1,5 x L2, 1,25 x RAM - scoppi 2,6 x L1, L2 e RAM simili.

RandMem - lettura e lettura / scrittura seriale e casuale dalla stessa struttura di indicizzazione complessa - in genere un po 'più veloce in lettura ma lettura / scrittura simile / più lenta.

Esistono poi versioni MP di quanto sopra e tenta di misurare il massimo SP MFLOPS (MP-MFLOPS) con un massimo di 4 core da 2,7 GFLOPS a 32 bit e 5,5 GFLOPS a 64 bit. Esiste anche una versione che utilizza NEON intrinsics in cui il compilatore a 64 bit genera istruzioni alternative fino a 10,8 GFLOPS contro 5,7 a 32 bit - consultare l'elenco dell'assemblaggio. Ho anche versioni di questi benchmark per tablet Windows 10 e Android basati su Intel Atom - Windows 64 bit e 32 bit, Android 32 bit - 64 bit completo non completamente implementato - kernel Linux 64 bit ma Android 32 bit.

http://www.roylongbottom.org.uk/android%20benchmarks.htm

Inoltre, ho versioni Linux / Intel a 32 e 64 bit.

Roy Paciock


3

Ecco come compilo il kernel RPI3 Aarch64:

Innanzitutto, avrai bisogno di Linaro aarch64: https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu.tar .xz

Decomprimilo, mettilo da qualche parte, esempio: /opt/toolchains/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu

Ecco il mio script per scaricare firmware, VC, sorgente del kernel e compilare il kernel con i moduli, io uso questo script per il mio server Jenkins, quindi scelgo ciò di cui hai bisogno:

git clone https://github.com/raspberrypi/linux.git -b rpi-4.8.y --depth=1
cd linux
export CROSS_COMPILE=/opt/toolchains/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
export ARCH=arm64
export INSTALL_MOD_PATH=MODULES/
export KERNEL=kernel8

rm -rf BOOT
rm -rf MODULES
rm -rf rpi-proprietary/

mkdir -p BOOT/overlays
mkdir MODULES

git clone https://github.com/Hexxeh/rpi-firmware.git --depth=1 rpi-proprietary/

cp ./rpi-proprietary/COPYING.linux ./BOOT/
cp ./rpi-proprietary/LICENCE.broadcom ./BOOT/
cp ./rpi-proprietary/bootcode.bin ./BOOT/
cp ./rpi-proprietary/fixup.dat ./BOOT/
cp ./rpi-proprietary/fixup_cd.dat ./BOOT/
cp ./rpi-proprietary/fixup_db.dat ./BOOT/
cp ./rpi-proprietary/fixup_x.dat ./BOOT/
cp ./rpi-proprietary/start.elf ./BOOT/
cp ./rpi-proprietary/start_cd.elf ./BOOT/
cp ./rpi-proprietary/start_db.elf ./BOOT/
cp ./rpi-proprietary/start_x.elf ./BOOT/

cd ./rpi-proprietary/vc/hardfp/opt/

tar -cvzf VC.tar.gz vc/

cd ../../../../
mv ./rpi-proprietary/vc/hardfp/opt/VC.tar.gz ./
rm -rf rpi-proprietary/

make bcmrpi3_defconfig
make modules
make module_install
make -j10

rm -rf MODULES/lib/modules/*v8*/build MODULES/lib/modules/*v8*/source

cp ./arch/arm64/boot/Image ./BOOT/kernel8.img
cp ./arch/arm64/boot/dts/broadcom/*.dtb ./BOOT/
cp ./arch/arm64/boot/dts/overlays/*.dtbo ./BOOT/overlays/
cp ./arch/arm64/boot/dts/overlays/README ./BOOT/overlays/

tar -cvzf MODULES.tar.gz MODULES/
tar -cvzf BOOT.tar.gz BOOT/

make mrproper

Ora basta decomprimere BOOT.tar.gz e metterlo sulla tua sdcard.

IMPORTANTE : è necessario inserire arm_control = 0x200 in config.txt per avviare il kernel AARCH64

Oppure puoi semplicemente usare il mio prefabbricato sul mio Jenkins: https://jenkins.sandpox.org/job/RPI3_KERNEL_AARCH64/


3

Ad oggi, sembra che Fedora e Archlinux siano ben supportati.

Se vai in Arch, questo ti aiuterà a costruire l'immagine (per me su linux / rpi3 lo era make linux) e questo ti aiuterà ad avviare il wifi.

Se hai bisogno di essere sicuro di quale lampone hai, usa questa guida .

Inoltre arm_control=0x200è deprecato e arm_64bitdovrebbe essere utilizzato invece in /boot/config.txt.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.