Raspberry Pi 3 und 64-Bit-Kernel, Unterschiede zwischen armv7 und armv8


11

Gibt es einen 64-Bit-Kernel für Raspberry Pi 3? Ich habe mich umgesehen und aus Quellen überprüfe ich die offizielle Seite und die folgenden Kernel sind dort aufgelistet:

  1. NOOBS - das ist Installer, kein Betriebssystem für sich, oder?
  2. Rapsbian - nur ein Download, daher gehe ich davon aus, dass 32 Bit mit allen Pi-Versionen kompatibel sind
  3. Ubuntu MATE - aarch32 (ARMv7)
  4. Ubuntu Ubuntu Core - scheint nur 32bit zu sein
  5. OSMC - gleiche Downloads für "Raspberry Pi 2/3", also 32 Bit
  6. LibreELEC - kombinierter Build für 2 & 3, also nur 32 Bit
  7. PiNet - weiß nicht was das ist, aber bezweifle 64 Bit
  8. RISC OS - scheint nicht wie Linux
  9. Wetterstation - ja, nur nein

Es scheint also nicht, dass es einen offiziellen 64-Bit-Kernel gibt? Gibt es eine inoffizielle? Kann ich einfach eine kompilieren und erwarten, dass sie funktioniert (ich denke nicht, aber es tut nicht weh zu fragen ..)? Arbeitet jemand wenigstens daran? Ich hätte gerne Zugriff auf native 64-Bit-Nummern.

Wie groß ist der Unterschied zwischen armv7 und armv8? Gentoo bietet Tarballs der Stufe 3 für armv7 an. Funktioniert das auf Pi 3, das armv8 ist?


"Gentoo bietet Tarballs der Stufe 3 für armv7 an. Funktioniert das auf Pi 3, das armv8 ist?" Nein, nicht ohne viel Hacking, sondern weil der Pi-Kernel nicht auf Lager ist, nicht weil ARMv7 auf ARMv8 nicht funktioniert (derzeit verwenden Pi 2 und 3 denselben Kernel).
Goldlöckchen

1
Der Gentoo-Leitfaden kompiliert weiterhin den Pi-Kernel-Quellcode aus Github, daher würde ich davon ausgehen, dass dies der Fall ist. Ich war nur interessiert, ob ich die ARMv7-Version auf ARMv8-Board verwenden kann, scheint ja
Graywolf

Antworten:


7

Von dem Wenigen, das ich gefunden habe, gibt es nichts Stabiles und Offizielles. Einige haben einen zum Kompilieren bekommen, aber dann gibt es Probleme mit Treibern / Modulen.

Diese Links könnten Sie zu diesem Thema interessieren.

Eingabe des Ausführungsstatus von aarch64

Raspbian Jessie (64bit) für RPi3?


+1. Würde wirklich gerne mit einem 64-Bit-Betriebssystem experimentieren. Ich könnte versuchen, ein sehr leichtes Betriebssystem für den Pi zu patchen und zu kompilieren (leicht, um die Dinge einfacher zu machen)
PNDA

@ PandaLion98 Das würde mich sehr interessieren
Dan V

11

Die allgemeine Übereinstimmung ist, dass ein 64-Bit-Kernel die Leistung auf dem Pi nicht erhöht, da die einzigen 2 wirklichen Vorteile eines 64-Bit-Kernels sind:

  1. größere int-Werte, die Sie in einem 32-Bit-Kernel sowieso manuell angeben können
  2. Die Möglichkeit, mehr als 4 GB RAM zu haben, ist auf dem Pi nutzlos, da der RAM eingebaut und nicht erweiterbar ist.

Darüber hinaus ist 64-Bit gegenüber 32-Bit auf ARM-Chips nicht der große Leistungssprung, den es auf x86-Chips gab, da die x86-Chips bei 64-Bit-Architekturen erhebliche Architektur-Upgrades aufwiesen, während die ARM-Chips in 32-Bit-Versionen bereits ziemlich solide waren.

Fühlen Sie sich frei zu experimentieren! :) :)


2
OP fragte nicht nach der Leistung, sondern nach der Verfügbarkeit. Persönlich möchte ich eine 64-Bit-Distribution für Pi haben, weil die neueste MongoDB die 32-Bit-Unterstützung eingestellt hat.
Andrejs Cainikovs

Darüber hinaus hängen die aarch64-Builds in der Regel weniger von "Closed Source Vendor Libraries" ab und setzen das v8-Potenzial frei, anstatt Sie an die v7-Funktionen zu binden.
EarthmeLon

7

Ein Vorteil von 64-Bit, den jeder zu vergessen scheint, ist, dass ARMv8 deutlich mehr Register als ARMv7 hat. Es hat auch eine viel bessere Gleitkomma-Leistung.

Es ist nicht nur ein Add-On zu ARMv7, es ist eine völlig neue Architektur.



4

Ich habe beim Ausführen meiner Android-Benchmarks auf einem Tablet mit einem 1,3-GHz-ARM-Cortex-A53 einige signifikante Leistungssteigerungen bei 64-Bit-Kompilierungen gegenüber 32-Bit festgestellt. Die neuesten werden über Eclipse kompiliert und erkennen zur Laufzeit, ob es sich bei der CPU um ARM, Intel oder MIPS handelt, und dann um eine 32-Bit- oder 64-Bit-Architektur.

Bei früheren Windows-Kompilierungen für Intel-CPUs konnte die 64-Bit-Arbeit aufgrund der Verwendung von SIMD-Anweisungen vom Typ SSE viel schneller als 32-Bit sein. Der spätere 32-Bit-Compiler mit Abwärtsinkompatibilität erzeugt jedoch praktisch den gleichen Code und eine ähnliche Geschwindigkeit.

Details zu den Android-Benchmarks finden Sie im Folgenden. Sie zeigen 32-Bit- und 64-Bit-Ergebnisse vom A53 und über einen 1,2-GHz-Cortex-A9. Am Ende finden Sie einige Assemblycode-Listen, die verschiedene verwendete Anweisungen identifizieren. Unten finden Sie eine Zusammenfassung der Ergebnisse.

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

Whetstone Benchmark - (winzige Schleifen) ähnliche Leistung, wobei die Gesamtbewertung durch die Zusammenstellung des Tests mit EXP-Funktionen beeinflusst wird.

Dhrystone Benchmark - neueste MIPS / MHz 1,09 32 Bit, 1,96 64 Bit, 1,10 A9 - möglicherweise 64 Bit überoptimiert.

Linpack Benchmark - (N = 100) 64-Bit-DP 1,97 x schneller, SP 2,67 x - siehe Baugruppencode.

Livermore Loops - (24 Kernel) durchschnittlich 1,5-mal schneller, Bereich 0,8 bis 7,9-mal

L1 / L2-Cache- und RAM-Tests

MemSpeed ​​- Float- und Integer-Berechnungen - erhält Caches 2,2 x, RAM 1,5 x.

BusSpeed ​​- Integer-Daten-Streaming und Burst-Lesen - Streaming 2,0 x L1, 1,5 x L2, 1,25 x RAM - Bursts 2,6 x L1, ähnlich L2 und RAM.

RandMem - serielles und zufälliges Lesen und Lesen / Schreiben aus derselben komplexen Indexierungsstruktur - im Allgemeinen etwas schneller beim Lesen, aber ähnlich / langsamer beim Lesen / Schreiben.

Dann gibt es MP-Versionen der oben genannten und Versuche, maximale SP-MFLOPS (MP-MFLOPS) mit maximal 4 Kernen von 2,7 GFLOPS 32 Bit und 5,5 GFLOPS 64 Bit zu messen. Es gibt auch eine Version mit NEON-Intrinsics, bei der der 64-Bit-Compiler alternative Anweisungen mit bis zu 10,8 GFLOPS gegenüber 5,7 mit 32 Bit generiert - siehe Assembly-Liste. Ich habe auch Versionen dieser Benchmarks für Windows 10 und Android Intel Atom-basierte Tablets - 64-Bit- und 32-Bit-Windows, 32-Bit-Android - Voll 64-Bit nicht vollständig implementiert - 64-Bit-Linux-Kernel, aber 32-Bit-Android.

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

Außerdem habe ich 32-Bit- und 64-Bit-Linux / Intel-Versionen.

Roy Longbottom


3

So kompiliere ich den RPI3 Aarch64-Kernel:

Zunächst benötigen Sie 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

Dekomprimieren, irgendwo platzieren, Beispiel: /opt/toolchains/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu

Hier ist mein Skript zum Herunterladen von Firmware, VC, Kernelquelle und zum Kompilieren des Kernels mit Modulen. Ich verwende dieses Skript für meinen Jenkins-Server, um auszuwählen, was Sie benötigen:

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

Jetzt entpacken Sie einfach die BOOT.tar.gz und legen Sie sie auf Ihre SD-Karte.

WICHTIG : Sie müssen setzen arm_control = 0x200 in config.txt setzen, damit der AARCH64-Kernel gestartet wird

Oder Sie können einfach mein vorgefertigtes auf meinen Jenkins verwenden: https://jenkins.sandpox.org/job/RPI3_KERNEL_AARCH64/


3

Bis heute scheinen Fedora und Archlinux gut unterstützt zu werden.

Wenn Sie den Arch-Weg gehen, wird dies Ihnen helfen, das Image zu erstellen (für mich unter Linux / RPI3 war es das make linux) und dies wird Ihnen helfen, WLAN zu starten.

Wenn Sie sicher sein müssen, welche Himbeere Sie haben, verwenden Sie diese Anleitung .

Auch arm_control=0x200ist veraltet und arm_64bitsollte stattdessen in verwendet werden /boot/config.txt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.