Zukunftsträchtig: RISC-V macht x86 und ARM Konkurrenz

Aus LinuxUser 01/2022

Zukunftsträchtig: RISC-V macht x86 und ARM Konkurrenz

© Andrei Dzemidzenka / 123RF.com

Moderne Architektur

Ausgestattet mit Open-Source-Genen, mischt die neue CPU-Architektur RISC-V momentan den Prozessormarkt auf. Dank des Emulators Qemu machen Sie auch ohne echte Hardware erste Bekanntschaft mit der CPU.

RISC-V – ausgesprochen Risk Five – gilt als neuer Stern am Prozessorhimmel. Server, PCs und Notebooks vertrauten bislang das Verarbeiten von Daten einer CPU der Firma Intel oder AMD an, einer CPU also, die auf der sogenannten x86-Architektur beruht. Der Raspberry Pi, Smartphones und Tablets dagegen basieren überwiegend auf Prozessoren einer ARM-Architektur.

Noch vor zwei Jahrzehnten kämpften mit MIPS, PowerPC, Alpha und SPARC weitaus mehr Prozessorhersteller und Architekturen um den Markt, insbesondere um den der eingebetteten Systeme. Diesen Bereich konnte x86 trotz massiver Investitionen aufgrund seiner Komplexität und dem damit verbundenen Stromhunger nicht einmal ansatzweise für sich erschließen.

Advanced RISC Machine – dafür steht das Kürzel ARM – punktete hier mit einer simplen RISC-Architektur, ausreichender Rechenleistung, einem einfachen Lizenzschema und vor allem mit Effizienz. Ein Glück übrigens, denn sonst würden uns unsere Smartphones heute womöglich mit einem ständig surrenden Lüfter nerven. Dementsprechend konsolidierte sich der Markt in den letzten Jahren auf die beiden CPU-Architekturvarianten x86 und ARM.

Vor zehn Jahren entwickelte die University of California, Berkeley, einen neuen CPU-Befehlssatz (Instruction Set Architecture, ISA) namens RISC-V (Abbildung 1), der modern und sowohl für die Lehre und Forschung, aber auch für die tatsächliche Anwendung geeignet sein sollte [1]. Der besondere Clou war das Lizenzmodell, das auf BSD basierend dem Lizenznehmer die kostenfreie Nutzung der Architektur ermöglicht (siehe auch Tabelle “RISC-V: Merkmale”).

Abbildung 1: Das Logo von RISC-V.

Abbildung 1: Das Logo von RISC-V.

Die Cal, wie man die University of California auch liebevoll nennt, überträgt damit das Open-Source-Prinzip auf die Hardware und scheint damit ähnlichen Erfolg zu haben wie Linux. Große wie kleine Firmen springen auf den RISC-V-Zug auf, entwickeln, produzieren und vertreiben Hardware, die einen RISC-V-Kern enthält, und stellen ihre Designs kostenfrei zur Verfügung. Einen ersten Eindruck diesbezüglich vermittelt der Wikipedia-Eintrag zur Architektur [2].

Gegenstand

Befehlssatzdefinition (ISA)

Modularität

Basisbefehlssatz plus Erweiterungen

Registerbreite

32, 64, 128

Anzahl Register

16 (für Embedded), 32, 64

Architekturtyp

Load/Store

Dateiablageformat

Little Endian

Anzahl Befehle

40 (RV32I, Computational, Control Flow, Memory Access)

Privilege Level

3

Maschinentyp

Drei-Register-Maschine

Befehlstypen

6 (R, I, U, S, B, J)

Software

umfangreiches Software-Ökosystem mit populären Software-Stacks (Linux, FreeRTOS)

Lizenz

BSD-Lizenz

Sonstiges

Stabile Spezifikation, keine Änderungen mehr geplant

Der große chinesische Online-Handler Alibaba beispielsweise gibt den von ihm entwickelten RISC-V-Kern komplett frei, ebenso die Plattenschmiede Western Digital. Selbst Apple, das mit seinem M1-Chip eine sehr leistungsstarke und effiziente ARM-CPU in der Hinterhand hat, sucht seit neuestem RISC-V-Entwickler.

Stabiler Kern

Ähnlich wie ARM, aber ganz anders als x86 lässt sich die RISC-V-Architektur in weiten Bereichen skalieren. Neben Varianten, die eine ausgewachsene Memory Management Unit (MMU) mitbringen und sich demzufolge für Linux eignen, lassen sich auch simpelste Mikrocontroller herstellen, die man bare-metal – also ohne Zuhilfenahme irgendeiner Systemsoftware – programmieren oder mit dem Echtzeitbetriebsystem FreeRTOS bestücken kann.

Die einfachsten RISC-V-Varianten implementieren lediglich die Core-Befehle, auch I-Befehle genannt. Sie enthalten neben logischen Operationen gerade noch Addieren und Subtrahieren; Multiplizieren und Dividieren bleibt der sogenannten M-Erweiterung vorbehalten. Die Tabelle “RISC-V: Befehlssatzerweiterungen” listet übliche Extensions auf wie etwa die F-Erweiterung für Fließkomma oder die C-Erweiterung für komprimierte Instruktionen. Standardmäßig schlägt die Cal vor, zumindest die Erweiterungen I, M, F, D und A zu implementieren und kürzt eine solche Architektur mit dem Buchstaben G (für “general”) als RV32G ab.

RV32I

Base Instruction Set

RV32A

A-Extension (Atomic read-modify-write)

RV32B

B-Extension (Bit Manipulation)

RV32C

C-Extension (Compressed Instructions)

RV32D

D-Extension (Double Precision Floating Point)

RV32F

F-Extension (Single Precision Floating Point)

RV32M

M-Extension (Multiplication, Division)

RV32S

S-Extension (Supervisor Level Instructions)

RV32V

V-Extension (Vector Instructions)

RISC-V ist als 32-, 64- und sogar 128-Bit-Architektur definiert. Anders formuliert: Alle internen Register sind abhängig von der Architektur 32, 64 oder sogar 128 Bit breit. Von diesen Registern gibt es nicht weniger als 32 beziehungsweise 64 Stück, die man als X0 bis X31 respektive X63 bezeichnet. Sieht man vom Register X0 ab, das man nur lesen kann und bei dem alle Bits auf 0 stehen, lassen sich die Register universell einsetzen. Einen speziellen Stack Pointer gibt es beispielsweise nicht. Allerdings sieht die Architektur einen separaten Program Counter (PC) vor, also einen Befehlszähler, der die Adresse des Befehls enthält, den die CPU als Nächstes abarbeiten soll.

Während es sich bei der x86-Architektur um eine sogenannte Zwei-Register-Maschine handelt, sind bei RISC-V typischerweise drei Register an einer Operation beteiligt. Addiert eine Zwei-Register-Maschine die Inhalte zweier Register, muss sie das Ergebnis in eines der beiden beteiligten Register ablegen. Bei einer Drei-Register-Maschine hingegen landet das Ergebnis in einem dritten Register (X1 = X2 + X3).

Jungspund

Mit einem Alter von rund zehn Jahren darf die RISC-V-Architektur als vergleichsweise jung gelten. Das ist auch der Grund dafür, dass es noch keine wirklich preiswerte Bastelhardware gibt, auf der ein Linux liefe. Für einen Einstieg müssen Enthusiasten derzeit noch rund 600 Euro hinblättern. Das dürfte sich allerdings schon in naher Zukunft ändern. Sobald die Prozessoren in relevanten Stückzahlen produziert werden, fallen die Preise erfahrungsgemäß signifikant.

Wer übrigens auf Linux verzichtet und mit FreeRTOS vorliebnimmt, kann heute schon preiswert einsteigen und Erfahrungen sammeln. Das mit einem RISC-V-Kern ausgestattete Board ESP32-C3-DevKitC-02 findet man im Versandhandel schon zu Preisen ab rund 10 Euro (Abbildung 2). Hier hat der chinesische Hersteller Espressif seinem bekannten Erfolgsmodell ESP32 einen RISC-V-basierten ESP32-C3 zur Seite gestellt, der zwar etwas weniger Leistung bietet als das klassische Modell, dafür aber kleiner und vor allem preiswerter ist.

Abbildung 2: Espressif bietet sein RISC-V-Board ESP32-C3-DevKitC-02 schon für kleines Geld an.

Abbildung 2: Espressif bietet sein RISC-V-Board ESP32-C3-DevKitC-02 schon für kleines Geld an.

Wollen Sie RISC-V in Kombination mit Linux kennenlernen, kommen Sie sogar komplett ohne eigenständige Hardware aus. Nicht nur, dass sich unter Ubuntu ein RISC-V-Compiler installiert lässt: Auch der Hardwareemulator Qemu bildet schon seit einiger Zeit ein vollständiges RISC-V-System nach, sowohl in der 32- als auch in der 64-Bit-Variante. Die Distributionshersteller wiederum haben RISC-V-Varianten ihrer Softwaresammlungen im Programm, sodass Sie flugs zur Tat schreiten können.

RISC-V-Linux installieren

Mit einem unter Ubuntu aufgerufenen apt install ist es allerdings nicht getan. Tatsächlich benötigen wir für unseren emulierten RISC-V-Rechner ein BIOS, einen Bootloader und schließlich mit Linux das Betriebssystem selbst.

Damit steht am Anfang der RISC-V-Compiler, den Sie per apt install gcc-riscv64-linux-gnu installieren. Das quelloffene BIOS OpenSBI laden Sie in der aktuellsten Version herunter und generieren es. Als Bootloader dient das im Embedded-Bereich bekannte U-Boot, das Sie ebenfalls in der RISC-V-Version kompilieren.

Das bei Canonical gehostete RISC-V-Server-Image [3] schließlich zielt mit seinen 466 MByte Umfang auf einen kleinen Speicher-Footprint ab. Sie müssen es nach dem Herunterladen und Entpacken mithilfe der Qemu-Werkzeuge noch auf eine brauchbare Größe bringen. Ob das 20 GByte oder nur 5 GByte sein sollen, muss jeder für sich selbst entscheiden.

Qemu schließlich will mit einer Fülle an Parametern gestartet werden, insbesondere auch für die Netzwerkverbindung, falls Sie denn einen Internet-Zugang nutzen wollen. Der User Aaronfranke stellt ein Skript [4] bereit, das die wesentlichen Installationsschritte abbildet. Listing 1 zeigt eine von uns modifizierte und erweiterte Variante, die Optimierungen und Anpassungen vornimmt und quasi automatisch ein bootbares System zaubert.

Listing 1

RISC-V-Ubuntu für Qemu

#!/bin/bash
BASISDIR=~/risc-v
UBUNTU_IMG=ubuntu-20.04.3-preinstalled-server-riscv64+unmatched.img
if test ! -f `type -p riscv64-linux-gnu-gcc`; then
  echo "install compiler..."
  sudo apt install gcc-riscv64-linux-gnu
fi
if test ! -f `type -p qemu-system-riscv64`; then
  echo "install qemu..."
  sudo apt install qemu-system-misc qemu-utils
fi
if test ! -d ${BASISDIR}; then
  echo "mkdir ${BASISDIR}"
  mkdir ${BASISDIR}
fi
cd ${BASISDIR}
if test ! -f opensbi/build/platform/generic/firmware/fw_payload.bin; then
  wget https://cdimage.ubuntu.com/releases/20.04/release/${UBUNTU_IMG}.xz
  xz -dk ${UBUNTU_IMG}.xz
  qemu-img resize -f raw ${UBUNTU_IMG} +6G
  export CROSS_COMPILE=riscv64-linux-gnu-
  git clone https://source.denx.de/u-boot/u-boot.git
  cd u-boot/
  git reset --hard v2021.10-rc3
  make qemu-riscv64_smode_defconfig
  make -j$(nproc)
  cd ..
  git clone https://github.com/riscv/opensbi.git
  cd opensbi/
  make PLATFORM=generic FW_PAYLOAD_PATH=../u-boot/u-boot.bin
  cd ..
fi
qemu-system-riscv64 -machine virt -m 4G -nographic \
  -bios opensbi/build/platform/generic/firmware/fw_payload.bin \
  -smp cores=2 -gdb tcp::1234 \
  -device virtio-net-device,netdev=eth0 \
  -netdev user,id=eth0,hostfwd=tcp::2222-:22 \
  -drive if=none,file=${UBUNTU_IMG},format=raw,id=mydisk \
  -device ich9-ahci,id=ahci -device ide-hd,drive=mydisk,bus=ahci.0 \
  -device virtio-rng-pci

Dazu legt das Skript in Ihrem Home-Verzeichnis einen neuen Unterordner risc-v/ an, installiert die notwendige Software per apt install und lädt ansonsten benötigte Komponenten inklusive des vorgefertigten Ubuntu-Images aus dem Internet nach. Es generiert die Firmware und den Bootloader und startet schließlich das RISC-V-Linux. Der Download und die Installation erfolgen übrigens nur beim ersten Aufruf.

Speichern Sie das Skript beispielsweise in eine Datei risc-v-linux.sh ab, ändern Sie die Zugriffsrechte per chmod 755 risc-v-linux.sh auf Ausführen, und starten Sie schließlich die Installation beziehungsweise das Linux in der Konsole über den Aufruf ./risc-v-linux.sh. An dieser Stelle brauchen Sie allerdings etwas Geduld, denn im Gegensatz zur Virtualisierung wird die RISC-V-CPU hier in Software emuliert. Einige Minuten später sollte jedoch die Aufforderung zum Login erscheinen, der Sie mit dem Benutzernamen ubuntu und dem gleichlautenden Passwort nachkommen (Abbildung 3). Das System zwingt Sie dann aus Sicherheitsgründen als Erstes, das Passwort zu wechseln.

Abbildung 3: Der Login-Screen des RISC-V-Ubuntu.

Abbildung 3: Der Login-Screen des RISC-V-Ubuntu.

Kein Konsolenspaß

Da die serielle Konsole einige Schwächen aufweist, loggen Sie sich am besten über ein anderes Terminalfenster per SSH auf dem neuen System ein. Qemu hat unser Skript dazu beim Aufrufen so konfiguriert, dass das per ssh -p 2222 ubuntu@localhost klappt.

Geben Sie jetzt das Kommando uname -a ein, dann sehen Sie, dass Sie auf einer RISC-V-Maschine arbeiten. Ein cat /proc/cpuinfo zeigt ebenfalls die Architektur inklusive der implementierten Erweiterungen an, gibt sich aber sonst überraschend schmallippig. Bei einem cat /proc/interrupts, einem dmesg oder einem file /usr/bin/bash zeigen sich weitere Spuren der RISC-V-Architektur (Abbildung 4). Insgesamt aber macht Linux seinem Ruf eines plattformunabhängigen Betriebssystems alle Ehre, indem es die neuartige CPU-Architektur unter der Haube gut versteckt.

Abbildung 4: Spuren der RISC-V_Architektur lassen sich leicht finden.

Abbildung 4: Spuren der RISC-V_Architektur lassen sich leicht finden.

Per apt update aktualisieren Sie wie gewohnt die Paketliste. Vermeiden Sie aber ein apt upgrade – das könnte Kernel und Bootloader austauschen und zu Problemen führen. Generell gilt: Die Software läuft noch nicht in allen Teilen hundertprozentig stabil. Haben Sie erst einmal per apt install build-essential gdb vim einen Compiler und Entwicklungswerkzeuge installiert, können Sie ein kleines Hello-RISC-V-Programm eingeben und kompilieren. Sehen Sie sich dann CPU-Register und Assembler-Code einmal im GNU-Debugger an (Abbildung 5).

Abbildung 5: Ein kleines "Hello, RISC-V", in GDB disassembliert.

Abbildung 5: Ein kleines “Hello, RISC-V”, in GDB disassembliert.

Die CPU-Register tragen übrigens sowohl im Debugger als auch bei der Ausgabe des Kommandos dmesg --kernel nicht die oben erwähnte Bezeichnung X0 bis X31. Vielmehr tauchen dort die Namen ra, sp, t0, s6 und so weiter auf. Die RISC-V Foundation hat eine Konvention zur Verwendung der Register vorgeschlagen respektive festgelegt, an die sich die Programmiererinnen und Programmierer beziehungsweise die Hersteller der Entwicklungswerkzeuge auch halten. Demnach fungiert beispielsweise das Register X2 als Stack Pointer (sp); X1 enthält bei einem Unterprogrammaufruf die Rücksprungadresse (ra). Die Register mit einem T im Namen dienen dem temporären Zwischenspeichern von Daten, die mit einem A als ersten Buchstaben enthalten bei einem Funktionsaufruf die Aufrufparameter.

Aber mit diesen Details müssen sich Entwicklerinnen und Entwickler in den meisten Fällen nicht herumschlagen, sie sind vor allem für Kernel-Programmierer bei der Fehlersuche relevant.

Qemu verlassen

Am Ende des Tages fahren Sie das RISC-V Ubuntu beispielsweise im Terminal mit sudo poweroff sauber herunter. Um danach Qemu zu verlassen, benutzen Sie die Tastenkombination [Strg]+[A][X].

Topf und Deckel

Neben Ubuntu stellen auch Fedora [5] und Debian [6] vorgefertigte RISC-V-Images zur Verfügung. Die von uns getestete Debian-Variante zickte allerdings etwas herum und ließ die Installation des Lieblingseditors Vim nicht zu. Es ist ohnehin spannender, auf einen Selbstbau statt auf ein vorgefertigtes System-Image zu setzen. Das klappt mit dem System-Builder Buildroot und einer kurzen Anleitung [7].

Wie Sie sehen, gibt es keinen Grund, sich über mangelnde Linux-Unterstützung für die neue Befehlssatzarchitektur zu beschweren. Das ist auch kein Wunder: Ein pfiffiges, modulares, quelloffenes Design, dazu eine freie Lizenz – Linux und RISC-V passen einfach perfekt zusammen. (jlu)

Die Autoren

Eva-Katharina Kunst ist seit den Anfängen von Linux Fan von Open Source. Jürgen Quade, Professor an der Hochschule Niederrhein, führt auch für Unternehmen Schulungen zu den Themen Treiberprogrammierung und Embedded Linux durch.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 01/2022 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben