Raspberry Pi 3 y kernel de 64 bits, diferencias entre armv7 y armv8

11

¿Hay algún kernel de 64 bits para Raspberry Pi 3? Miré a mi alrededor y desde las fuentes verifico la página oficial y los siguientes núcleos se enumeran allí:

  1. NOOBS: este es el instalador, no hay sistema operativo en sí mismo, ¿verdad?
  2. Rapsbian: solo una descarga, así que supongo que 32 bits es compatible con todas las versiones de Pi
  3. Ubuntu MATE - aarch32 (ARMv7)
  4. Ubuntu Ubuntu Core: parece solo 32 bits
  5. OSMC - mismas descargas para "Raspberry Pi 2/3", por lo que 32 bits
  6. LibreELEC: compilación combinada para 2 y 3, solo 32 bits
  7. PiNet: no sé qué es esto, pero duda de 64 bits
  8. RISC OS: no parece Linux
  9. Estación Meteorológica - sí, solo no

¿Entonces no parece que haya disponible un kernel oficial de 64 bits? ¿Hay alguna no oficial? ¿Puedo compilar uno y esperar que funcione (supongo que no, pero no está de más preguntar ...)? ¿Al menos alguien trabaja en eso? Me encantaría tener acceso a números nativos de 64 bits.

En otra nota, ¿qué diferencia hay entre armv7 y armv8? Gentoo ofrece tarballs de etapa 3 para armv7. ¿Funcionará en Pi 3, que es armv8?

Lobo gris
fuente
"Gentoo ofrece tarballs de etapa 3 para armv7. ¿Funcionará eso en Pi 3, que es armv8?" Una vez más, no, no sin una gran cantidad de piratería, sino porque el kernel pi no está en stock, no porque ARMv7 no funcione en ARMv8 (actualmente Pi 2 y 3 usan el mismo kernel).
Ricitos de oro
1
La guía de gentoo continúa con la compilación del código fuente del núcleo Pi de github, por lo que supongo que explican esto. Yo estaba interesado solamente si puedo usar la versión ARMv7 a bordo ARMv8, parece que sí
GrayWolf

Respuestas:

7

De lo poco que he encontrado, no hay nada estable y oficial. Algunos han conseguido uno para compilar, pero luego hay problemas con los controladores / módulos.

Estos enlaces pueden interesarle con respecto a este tema.

Entrando en el estado de ejecución aarch64

¿Raspbian Jessie (64 bits) para RPi3?

Dan V
fuente
+1. Realmente me encantaría experimentar con un sistema operativo de 64 bits. Podría intentar parchear y compilar un sistema operativo muy ligero para Pi (ligero para facilitar las cosas)
PNDA
@ PandaLion98 Estaría muy interesado en esto
Dan V
11

El consenso general es que un núcleo de 64 bits no aumentará el rendimiento en el Pi, ya que los únicos 2 beneficios reales de un núcleo de 64 bits son:

  1. valores int más grandes, que puede especificar manualmente en un núcleo de 32 bits de todos modos
  2. La posibilidad de tener más de 4 Gb de RAM, lo que es inútil en el Pi ya que la RAM está incorporada y no es expandible.

Además, 64 bits frente a 32 bits en chips ARM no es el gran salto de rendimiento que tenía en los chips x86, porque los chips x86 tenían actualizaciones de arquitectura significativas cuando llegaron a 64 bits, mientras que los chips ARM ya eran bastante sólidos en las versiones de 32 bits.

¡Siéntete libre de experimentar! :)

tlhIngan
fuente
2
OP no preguntó sobre el rendimiento, sino sobre la disponibilidad. Personalmente, estoy buscando tener una distribución de 64 bits para Pi porque la última versión de MongoDB dejó de admitir 32 bits.
Andrejs Cainikovs
Además, las compilaciones de aarch64 tienden a depender menos de las 'bibliotecas de proveedores de código cerrado' y desbloquean el potencial v8 en lugar de mantenerlo bloqueado en las capacidades v7.
earthmeLon
7

Un beneficio de 64 bits que todos parecen olvidar es que ARMv8 tiene un número significativamente mayor de registros que ARMv7. También tiene un rendimiento de punto flotante mucho mejor.

No es solo un complemento de ARMv7, es una arquitectura completamente nueva.

Chris
fuente
4

He encontrado algunas mejoras significativas en el rendimiento de las compilaciones de 64 bits frente a 32 bits al ejecutar mis puntos de referencia de Android en una tableta con un ARM Cortex-A53 de 1.3 GHz. Los últimos se compilan a través de Eclipse y, en tiempo de ejecución, detectan si la CPU es ARM, Intel o MIPS, luego arquitectura de 32 bits o 64 bits.

En compilaciones anteriores de Windows para CPU de Intel, el funcionamiento de 64 bits podría ser mucho más rápido que el de 32 bits debido al uso de instrucciones SIMD de tipo SSE. Sin embargo, el compilador posterior de 32 bits, con incompatibilidad hacia atrás, produce prácticamente el mismo código y una velocidad similar.

Los detalles de los puntos de referencia de Android se muestran a continuación, mostrando resultados de 32 bits y 64 bits del A53 y a través de un Cortex-A9 de 1.2 GHz. Al final hay algunos listados de códigos de ensamblaje que identifican las diferentes instrucciones que se utilizan. A continuación se muestra un resumen de los resultados.

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

Punto de referencia de Whetstone: (bucles pequeños) rendimiento similar, con una calificación general influenciada por la compilación de la prueba con funciones EXP.

Benchmark de Dhrystone: último MIPS / MHz 1.09 32 bit, 1.96 64 bit, 1.10 A9: quizás 64 bit más optimizado.

Benchmark de Linpack - (N = 100) 64 bit DP 1.97 x más rápido, SP 2.67 x - ver código de ensamblaje.

Livermore Loops - (24 granos) promedio 1.5 veces más rápido, rango 0.8 a 7.9 veces

Pruebas de caché L1 / L2 y RAM

MemSpeed ​​- cálculos flotantes y enteros - gana cachés 2.2 x, RAM 1.5 x.

BusSpeed ​​- transmisión de datos enteros y lectura de ráfaga - transmisión 2.0 x L1, 1.5 x L2, 1.25 x RAM - ráfagas 2.6 x L1, L2 y RAM similares.

RandMem: lectura y escritura en serie y aleatoria de la misma estructura de indexación compleja, generalmente un poco más rápido en la lectura pero lectura / escritura similar / más lenta.

Luego están las versiones MP de lo anterior e intenta medir el SP MFLOPS máximo (MP-MFLOPS) con un máximo de 4 núcleos de 2.7 GFLOPS 32 bit y 5.5 GFLOPS 64 bit. También hay una versión que usa intrínsecos NEON en la que el compilador de 64 bits genera instrucciones alternativas de hasta 10.8 GFLOPS frente a 5.7 a 32 bits - vea la lista de ensamblaje. También tengo versiones de estos puntos de referencia para Windows 10 y tabletas basadas en Android Intel Atom: Windows de 64 bits y 32 bits, Android de 32 bits, 64 bits completos no implementados completamente, kernel de Linux de 64 bits pero Android de 32 bits.

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

Además, tengo versiones de 32 bits y 64 bits de Linux / Intel.

Roy Longbottom

Roy Longbottom
fuente
3

Así es como compilo el núcleo RPI3 Aarch64:

Primero, necesitará 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

Descomprima, póngalo en alguna parte, ejemplo: /opt/toolchains/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu

Aquí está mi script para descargar firmware, VC, fuente de kernel y compilar kernel con módulos. Utilizo este script para mi servidor Jenkins, así que elige lo que necesita:

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

Ahora solo descomprime BOOT.tar.gz y ponlo en tu tarjeta sd.

IMPORTANTE : debe poner arm_control = 0x200 a config.txt para que arranque el núcleo AARCH64

O simplemente puede usar mi precompilado en mi Jenkins: https://jenkins.sandpox.org/job/RPI3_KERNEL_AARCH64/

SandPox
fuente
3

A partir de hoy, parece que Fedora y Archlinux están bien soportados.

Si sigue el camino del Arco, esto lo ayudará a construir la imagen (para mí en linux / rpi3 era make linux) y esto lo ayudará a iniciar el wifi.

En caso de que necesite asegurarse de qué frambuesa tiene, use esta guía .

También arm_control=0x200está en desuso y arm_64bitdebe usarse en su lugar /boot/config.txt.

Pierre-Alexis Ciavaldini
fuente