Startseite>Den Raspberry Pi 3 im 64-Bit-Modus betreiben
Aus Raspberry Pi Geek 04/2017

Den Raspberry Pi 3 im 64-Bit-Modus betreiben

© Scanrail, 123RF

Double Action

Eva-Katharina Kunst

Auf dem Raspberry Pi 3 läuft normalerweise ein 32-Bit-Linux – und das, obwohl er eine waschechte 64-Bit-CPU besitzt. Mit etwas Mühe lässt sich die angezogene Handbremse aber durchaus lösen.

Als die Raspberry Pi Foundation Ende Februar 2016 das Modell 3 ihres so erfolgreichen Mini-Computers vorstellte, war die Freude groß: Der neue RasPi brachte eine schnelle 64-Bit-ARMv8-CPU mit, ein Wechsel von 32- auf 64-Bit-Betriebssysteme und entsprechende Anwendungen schien eingeleitet. Doch weit gefehlt: Zur großen Überraschung der meisten Fans und Entwickler reizt die neue 64-Bit-Hardware ihre Möglichkeiten überhaupt nicht aus und arbeitet rein 32-bittig (siehe Kasten “Die CPU des Raspberry Pi 3”).

Die Zurückhaltung geht so weit, dass ein Raspberry Pi 3 im vorgesehenen 32-Bit-Modus vorgibt, auf der ARMv7-Architektur zu basieren, obwohl auf ihm ein ARMv8 sitzt (Abbildung 1): Egal ob in den Bootmeldungen oder in der Ausgabe von cat /proc/cpuinfo, Kernel und Betriebssystem geben sich als Teil der BCM2709-Familie aus. Tatsächlich gehören sie jedoch zum BCM2710-Ökosystem.

Abbildung 1: Der Raspberry Pi 3 verleugnet seine moderne Architektur und tarnt sich als 32-Bit-SoC.

Abbildung 1: Der Raspberry Pi 3 verleugnet seine moderne Architektur und tarnt sich als 32-Bit-SoC.

Mit etwas Abstand betrachtet, ergibt die auf den ersten Blick ein wenig überraschende technologische Verzagtheit der Raspberry Pi Foundation allerdings durchaus einen Sinn:

  • Der Raspberry Pi 3 ist mit “nur” 1 GByte RAM bestückt – zu wenig, um vom erweiterten Adressbereich des ARMv8 zu profitieren.
  • Ein spürbarer Gewinn an Performance durch 64-Bit-Instruktionen ist nicht zu erwarten.
  • Die neue CPU erweist sich selbst im 32-Bit-Modus als der ARMv7-Architektur des alten Raspberry Pi deutlich überlegen.
  • Das mit der neuen Architektur einhergehende Fertigungsverfahren erlaubt höhere Taktfrequenzen.

Der gravierende Vorteil des 32-Bit-Betriebs ergibt sich beim Raspberry Pi schlicht aus dem Umstand, dass die Besitzer der Platinen ihr vorhandenes Raspbian-Userland unverändert weiterverwenden dürfen.

Die CPU des Raspberry Pi 3

Auf dem Raspberry Pi 3 sitzt als System-on-Chip ein Broadcom BCM2837, der zur BCM2710-Familie gehört. Es handelt sich um eine Weiterentwicklung des BCM2836 (BCM2709) des Raspberry Pi 2, bei dem die ARMv7-CPU durch eine Quadcore-ARMv8-CPU vom Typ Cortex-A53 ersetzt wurde. Sie kann sowohl im 32- (“AArch32”) als auch im 64-Bit-Modus (“AArch64”) arbeiten, wobei der RasPi 3 in der Vorgabe die 32-Bit-Variante wählt.

Hardware-technisch trumpft der Raspberry Pi 3 mit einem Bluetooth- und einem WLAN-Modul auf. Allerdings koppelt er den serienmäßigen Bluetooth-Baustein mit dem ersten seriellen Port, sodass es bei Nutzung der seriellen Schnittstelle – zum Beispiel als Konsole – zu Kompatibilitätsproblemen kommt.

Die CPU verwendet einen modernisierten Befehlssatz. Sie besitzt 31 Register mit jeweils 64 Bit Breite, während der Vorgänger nur mit 15 halb so großen Pendants aufwarten konnte. Das Register 31 (“Program Counter”) liefert beim Lesen grundsätzlich eine Null. In der 64-Bit-Variante erfolgen Gleitkommaoperationen in jedem Fall mit 128 Bit Breite (Datentyp long double).

Des Weiteren unterstützt die CPU standardmäßig ARMs Multimedia- und Signalverarbeitungserweiterung Neon sowie eine 128-Bit-SIMD-Architektur. Außerdem verarbeitet der Prozessor diverse Verschlüsselungsalgorithmen direkt im Silizium, darunter AES, SHA-1 und SHA-256.

Technik muss begeistern

Auch wenn die 64 Bit beim RasPi 3 bestenfalls marginale Geschwindigkeitsvorteile bringen, kann es einen technikbegeisterten Entwickler nicht auf Dauer zufriedenstellen, bei den Hardware-Meldungen einen Wolf im Schafspelz zu halten und einen 64-Bit-Controller mit 32 Bit zu langweilen. Daher machten sich schon direkt nach Veröffentlichung des Raspberry Pi 3 erste Entwickler daran, den 64-Bit-Betrieb zu ermöglichen. Dazu mussten sie an der Firmware, am Kernel und am Userland Hand anlegen.

Die Firmware übernimmt die Aufgabe, den Controller des RasPi 3 direkt beim Booten in den 64-Bit-Modus zu schalten. Immerhin sieht die Onboard-Firmware das bereits vor. Dazu gilt es, in der Datei config.txt auf der Boot-Partition die Variable arm-control auf 0x200 zu setzen. Mittlerweile gibt es dem Vernehmen nach sogar eine neue Firmware, die in der Lage ist, aus eigener Kraft einen 64-Bit-Kernel zu laden. Das haben die Autoren jedoch nicht ausprobiert.

Die vorgeschlagene Alternative besteht im Einsatz der leistungsfähigen Boot-Software “Das U-Boot”, die anstelle eines Linux-Kernels die Standard-Firmware lädt. Dazu benötigen Sie die 64-Bit-Version von U-Boot, die das neue Boot-Kommando booti kennt: Der Befehl hilft dabei, einen 64-Bit-ARM-Kernel zu laden, der einen spezifischen Header aufweist. Die Details dazu lassen sich in der Kernel-Dokumentation Documentation/arm64/booting.txt nachlesen [1]. Mit diesem Header und einigen anderen von Linux festgelegten Randbedingungen muss der Bootloader entsprechend umgehen können.

Überbordende Vielfalt

Der Kernel selbst muss selbstredend ebenfalls für die 64-Bit-ARMv8-Architektur übersetzt werden. Er benötigt wiederum einen passenden Device Tree [2], also eine Datei, die alle Hardware-Details beschreibt. Der ARM-Hardware-Zoo wartet mit deutlich mehr Arten auf als die x86-Welt und verwendet für die Peripheriekomponenten unterschiedliche Adresslagen.

Während in den Anfangstagen von ARM-Linux die Entwickler für jede unterstützte Hardware einen eigenen Kernel mit den jeweils passenden Adressen programmieren und übersetzen mussten, lesen heutige Kernel beim Booten den im Hauptspeicher bereitliegenden Device Tree live ein. Treiber bringen bei der Aktivierung die Adresslagen über den Kernel in Erfahrung. Die Device-Tree-Unterstützung gilt mittlerweile als ausgereift und für ARM-Architekturen obligatorisch. Es fehlt nur noch das Root-Filesystem (mit dem Userland) selbst. Hier bietet Debian ein ARM64-System an, das sich beispielsweise per Debootstrap [3] installieren lässt.

Doch bevor Sie jetzt mühsam versuchen, alle Teile des Puzzles selbst zu generieren und zusammenzustellen, machen Sie die ersten ARM64-Schritte besser mit einem vorkonfektionierten und getesteten 64-Bit-System aus dem Internet. Abbildung 2 zeigt die Fundstelle des Artefakts, das hier Verwendung findet.

Abbildung 2: Bereits Mitte April 2016 stellte der User »xylnao« ein 64-Bit-Image für den Raspberry Pi 3 bereit.

Abbildung 2: Bereits Mitte April 2016 stellte der User »xylnao« ein 64-Bit-Image für den Raspberry Pi 3 bereit.

Dazu laden Sie die entsprechende Image-Datei [4] herunter, entpacken sie und schreiben sie unter Linux per Dd auf eine Micro-SD-Karte. Achten Sie dabei darauf, dass die Karte beim Beschreiben nicht eingehängt ist. Stecken Sie die so vorbereitete SD-Karte in den Raspberry Pi und das System startet, erscheint auf einem angeschlossenen Monitor bereits nach wenigen Sekunden das Login. Hier melden Sie sich als root mit dem Passwort raspberry an.

Tatsächlich: Breitbit

Es gibt diverse Möglichkeiten, um festzustellen, ob hier ein 64-Bit-Linux läuft: Dmesg beispielsweise gibt Bootmeldungen aus, gleich in den ersten vier Zeilen verrät Linux die Architektur. Das Kommando cat /proc/cpuinfo plaudert zumindest aus, dass es sich um den ARMv8-Befehlssatz handelt, und uname -a zeigt an, dass der Kernel 64-bittig ist.

Möchten Sie ganz sicher gehen, tippen Sie den C-Quellcode aus Listing 1 ab und speichern ihn als hello.c. Dafür steht auf dem Testsystem als Editor allerdings zunächst nur Vim bereit. Möchten Sie einen anderen Editor verwenden, wie etwa Nano oder Joe, müssen Sie erst das Netzwerk aktivieren und dann den Editor nachinstallieren:

# dhclient -i eth0
# apt-get install joe nano

Das modifizierte “Hello World” aus Listing 1 gibt nach dem Start die Bitbreite von Zeigervariablen, den Pointern, aus. Nur auf einem 64-Bit-System sind diese auch 64 Bit breit. Zum Kompilieren des Quellcodes genügt es, im Quellcodeverzeichnis make hello einzugeben; das Binary rufen Sie anschließend mit ./hello auf (Abbildung 3).

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland