Kurzanleitungen/Howtos

Prozessorachitektur RISC-V schnell und einfach ausprobieren

10.08.2021

CPU

Die patentfreie und unter BSD-Lizenz stehende Prozessorachitektur RISC-V erfreut sich zunehmender Beliebtheit und ich denke, ich lehen mich nicht allzuweit aus dem Fenster, wenn ich prognostiziere, daß dieser Trend in Zukunft anhalten wird.
Einige Hersteller haben bereits Produkte, die auf RISC-V basieren, im Portfolio oder planen dieses. RISC-V ist hierbei allerdings nur als Überbegriff für verschiedene Prozessoren zu verstehen, bei denen die kleineren eher Mikrocontrollern gleichen und die großen für Serveranwendungen gedacht sind.
Neben echten (in Hardware gegossenen) Chips gibt es die Möglichkeit, eine RISC-V-CPU in einem FPGA oder als Softwareemulation auszuprobieren. Die einfachste (und langsamste) Variante ist die Softwareemulation mittels QEMU.
In dieser Kurzanleitung geht es um die QEMU-Softwareemulation einer Linux-fähigen RISC-V-CPU, in der eine Vorabversion von Debian (unstable/sid) installiert ist. Der Einfachheit halber und weil einige Pakete aus Debian unstable auf dem Gastgeberrechner benötigt werden, habe ich die QEMU in einer VirtualBox installiert. Diese VirtualBox-Appliance können Sie kostenlos herunterladen und für erste eigene Gehversuche in der RISC-V-Welt verwenden.

Herunterladen und installieren

Laden Sie D10-RISCV64-qemu.ova (1,3GB, SHA256: 20f31dff4fe83a1fb02644a5eacd3db905227da1c83456c02dbbbb2eccbfc7a3) herunter und importieren Sie diese anschließend in VirtualBox.
Hinweis: Die VM ist aus mehreren Gründen (z.B. basiert diese auf auf Debian unstable, evtl. unausgereifter Softwareemulation und verwendet unsichere bekannte Zugangsdaten) keinesfalls für den Produktivbetrieb bestimmt.

Anmelden

Nach dem Starten der VM, booten das x86-Debian-10 und die darin enthaltene RISC-V-QEMU-VM automatisch. Bis die RISC-V-QEMU-VM komplett hochgefahren ist, kann allerdings etwas Zeit vergehen. Auf den Terminals 1-4 (Hosttaste + F1-F4) können Sie sich am x86-Debian-10 anmelden. Auf Terminal 5 (Hosttaste + F5) an der RISC-V-QEMU-VM.
Sie können sich an allen Terminals anmelden. Es gibt jeweils die Benutzer "root" und "test". Das Paßwort ist immer "test".
Dank Portweiterleitung können Sie sich in der VirtualBox per SSH auf Port 8022 als Benutzer "test" anmelden:

ssh -p 8022 test@localhost
Um in der RISC-V-QEMU-VM zu landen, verwenden Sie stattdessen Port 5022:
ssh -p 5022 test@localhost
root-Rechte erlangen Sie mit:
su -

RISC-V-VM im Selbstbau

Natürlich können Sie sich auch Ihre eigene RISC-V-Testumgebung zusammenstellen. Mir hat beim Entwickeln meiner Appliance wiki.debian.org sehr geholfen. Zusätzlich finden Sie hier noch einige weitere Anpassungen, die ich vorgenommen habe.

QEMU-Pakete installieren

echo 'deb http://debian.tu-bs.de/debian/ sid main' > /etc/apt/sources.list.d/sid.list
apt-get update

apt-get install -y qemu-system-misc qemu-user-static binfmt-support opensbi u-boot-qemu libguestfs-tools

QEMU-Startskript

Bei Bedarf können Sie die RAM-Größe (Parameter "-m") der RISC-V-QEMU-VM erhöhen. Bedenken Sie aber, daß Sie dann auch den zur VirtualBox-VM zugewiesenen Arbeitsspeicher mit anpassen.
#!/bin/bash
cd /home/test

echo 'qemu-system-riscv64 -nographic -machine virt -m 1.9G -smp 4\
 -bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf \
 -kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf \
 -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-device,rng=rng0 \
 -append "console=ttyS0 rw root=/dev/vda1" \
 -device virtio-blk-device,drive=hd0 -drive file=riscv64-debian-unstable.img,format=raw,id=hd0\
 -device virtio-net-device,netdev=net0 -net nic,model=ne2k_pci\
 -netdev user,id=net0,hostfwd=tcp::5022-:22' > /home/test/riscv64-debian-unstable.sh

 chmod +x /home/test/riscv64-debian-unstable.sh

QEMU-RISCV-VM auf tty5 starten

Diese Befehle sorgen dafür, daß riscv64-debian-unstable.sh beim Booten auf Terminal 5 gestartet wird.

mkdir -p /etc/systemd/system/getty@tty5.service.d

echo '[Unit]
Description=top on tty5

[Service]
Type=simple
User=test
ExecStart=
ExecStart=-/home/test/riscv64-debian-unstable.sh
StandardInput=tty
StandardOutput=tty
TTYPath=/dev/tty5

[Install]
WantedBy=multi-user.target' > /etc/systemd/system/getty@tty5.service.d/override.conf

systemctl daemon-reload
systemctl restart getty@tty5

Viel Spaß beim Ausprobieren und mit freundlichen Grüßen,
Hauke Goos-Habermann

Achtung! Achtung! Die folgenden Anweisungen richten sich ausschließlich an fachkundige Personen. Bei jedem Schritt kann es zum kompletten Datenverlust kommen. Alle Angaben ohne Gewähr! Die Anweisungen, Skripte, etc. sind ausschließlich für Lernzwecke auf Lernsystemen und nicht für Produktivumgebungen bestimmt!