Raspberry Pi emulieren

© serezniy, 123rf.com

Konserviert

Wer viel am System bastelt, der kennt das Problem: Ein falscher Befehl, und das System startet womöglich nicht mehr. Abhilfe schafft eine virtuelle Umgebung wie Qemu: Hier stellen Sie den Zähler einfach wieder auf null und basteln weiter an Ihrem Raspbian.

README

Auch auf Desktop-Systemen haben sich virtuelle Maschinen längst durchgesetzt, nicht zuletzt dank des kostenfreien Virtualbox. Wer nicht nur Linux oder Windows in der künstlichen Umgebung starten möchte, sondern auch Images für den Raspberry Pi, der greift zum ebenfalls kostenfreien Qemu.

Auf Servern wie auf Desktop-Rechnern zählt das Virtualisieren beziehungsweise Emulieren von Rechnern längst zum Allgemeingut (siehe Kasten "Virtualisierung vs. Emulation"). Während es auf dem Server meist um bessere Ressourcenauslastung geht, nutzen Anwender mithilfe von Desktop-Virtualisierern mehrere Betriebssysteme parallel – sei es zum Starten selten genutzter Anwendungen einer anderen Betriebssystemwelt oder zum schnellen Ausprobieren einer speziellen Softwarekonfiguration.

Für den Raspberry Pi erschließt sich der Nutzen einer Emulation nicht sofort, denn das Steuern von Hardware lässt sich prinzipbedingt nur schlecht emulieren. Jedoch eignet sich der RasPi für vielfältige Einsatzzwecke. Daher dient er in vielen Projekten als quasi normaler Kleincomputer, oft sogar als Server, der außer der Netzwerkschnittstelle keinerlei Hardware anspricht [1]. Für solche Zwecke ist ein emulierter Pi ideal. Auch die Artikel des Autors entstehen regelmäßig in der S-Bahn mit einem emulierten RasPi als treuem Begleiter auf dem Notebook.

Virtualisierung vs. Emulation

Nutzen Gast und Wirt dieselbe CPU-Architektur, dann erlaubt die Virtualisierung das effiziente Durchreichen der CPU vom Host an den Gast. Der Host fängt dabei nur besonders kritische Befehle ab. Stimmt die CPU-Architektur nicht überein, dann spricht man von Emulation. Hier bildet ein spezieller Emulator alle CPU-Befehle in Software nach – mit den entsprechenden Geschwindigkeitseinbußen. Immerhin eröffnet dies das Nachstellen selbst völlig fremder Architekturen: So emuliert Hercules [2] auf einem Linux-PC IBMs Großrechnerarchitektur.

Die ARM-Architektur des RasPi ist freilich nicht kompatibel mit dem x86-Befehlssatz der gängigen Intel/AMD-Prozessoren. Die gute Nachricht: Die Emulation der entsprechenden ARM-Befehle bringt keine fühlbaren Geschwindigkeitseinbußen mit sich. Das liegt daran, dass heutige Prozessoren so schnell takten, dass sie den Performance-Verlust locker wettmachen.

Einschränkungen

Für unseren Zweck kommt der Emulator Qemu zum Einsatz [3]. Er stellt verschiedenste Hardware-Architekturen nach, darunter auch den Befehlssatz der im RasPi verbauten ARM-CPU. Damit alleine ist es aber nicht getan: So ahmt die PC-Emulation von Qemu eine Cirrus-Logic-Grafikkarte nach, womit zwar die normale Grafikausgabe funktioniert, jedoch keine modernen 3D-Effekte.

Im ARM-Bereich mit seinen integrierten Systemen gestaltet sich die Systememulation noch komplizierter. Daher wundert es nicht, dass es derzeit keine komplette RasPi-Emulation gibt. Dem Raspberry noch am nächsten kommt das Entwickler-Board Versatilepb [4], das zumindest denselben CPU-Befehlssatz verwendet. Es dient uns im Folgenden als Basis für die Emulation.

Allerdings bedeutet die Verwendung einer lediglich ähnlichen Plattform, dass eben nicht alles funktioniert. Die Einschränkung auf 256 MByte RAM stellt hier noch das geringste Übel dar – die Version A des RasPi verfügt auch nicht über mehr Speicher. Schon schwerer wiegt der Verzicht auf die Audioausgabe: Qemu unterstützt den entsprechenden Chip des Raspberry Pi nicht. Außerdem muss alles außen vor bleiben, was direkt die Hardware-Schnittstellen nutzt. Die Bildschirmausgabe erfolgt in der Vorgabe mit 800x600 Pixeln bei einer Farbtiefe von 16 Bit. Wie Sie das etwas erhöhen können, zeigt der Abschnitt "Optimierungen" weiter unten.

Die größte Einschränkung jedoch betrifft den Kernel: Der muss zu den im integrierten System verbauten Komponenten passen – in unserem Fall also zum Versatilepb-Board. Der Emulator bootet daher nicht mit einem normalen Raspbian-Kernel oder dem einer anderen RasPi-Distribution. Die allermeiste Software auf dem Pi merkt davon allerdings nichts, sodass dies kein absolutes K.o. für die Emulation darstellt. In Einzelfällen kommt es allerdings zu Problemen, weil die Kernel-Version des Versatilepb-Kernels nicht jener entspricht, die die RasPi-Software erwartet.

Installation und Start

Die Repositories der meisten gängigen Linux-Distributionen enthalten bereits die aktuelle Version von Qemu, alternativ binden Sie Zusatzrepositories ein. Je nach Distribution verteilt sich der Emulator auf verschiedene Pakete, wichtig ist die Unterstützung des ARM-Systems. Nach der Installation sollte also der Befehl qemu-system-arm bereitstehen – OpenSuse beispielsweise stellt ihn im Paket qemu-arm bereit. Für den Artikel haben wir Qemu 1.7.0 verwendet, brandaktuell ist derzeit Version 2.0.

Zusätzlich benötigen Sie den Versatilepb-Kernel, den Sie aus dem Netz [5] oder von der Heft-DVD dieser Ausgabe herunterladen. Als Betriebssystem-Image verwenden Sie ein unmodifiziertes Raspbian-Abbild, die NOOBS-Images eignen sich dafür nicht.

Sie starten dann den Emulator mit dem in Listing 1 gezeigten Skript, dem Sie beim Aufruf das zu verwendende Betriebssystem-Image als Parameter mitgeben. Die Option -hda übergibt Qemu dabei das Image als virtuelle Festplatte /dev/hda. Der Schalter -kernel sorgt dafür, dass die Emulation den Kernel aus dem Raspbian-Image ignoriert und stattdessen den als $KERNEL angegebenen verwendet. Das Ergebnis befriedigt allerdings erst einmal wenig: Der Bootprozess läuft zwar (mit vielen Fehlermeldungen) durch, ein Login klappt aber nicht.

Listing 1

 

#!/bin/bash
${KERNEL:="/data/qemu/raspbian-kernel.qemu"}
image="$1"
qemu-system-arm -kernel "$KERNEL" -cpu arm1176 -m 256 \
                -M versatilepb -no-reboot -daemonize\
                -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
                -hda "$image"

Damit das System mit der emulierten Hardware zusammenspielt, müssen Sie noch zwei Anpassungen vornehmen: Mit den Befehlen aus den ersten drei Zeilen von Listing 2 mounten Sie das Dateisystem des Gasts innerhalb des Hosts, die letzten drei Zeilen sorgen dann wieder für das saubere Aushängen.

Danach kommentieren Sie den einzigen Eintrag in /etc/ld.so.preload aus (Listing 3). Darüber hinaus erstellen Sie die Datei /etc/udev/rules.d/90-qemu.rules, deren Inhalt exakt jenem aus Listing 4 entsprechen muss. Dabei ist wichtig, das abschließende Komma nicht zu vergessen. Die Datei dient dazu, die Partitionsnamen der ersten Festplatte an die Konventionen des Raspberry Pi anzupassen.

Listing 2

 

$ modprobe loop
$ kpartx -a -s -v "/data/raspbian.img"
$ mount /dev/mapper/loop0p2 "/mnt"
[...]
$ sync
$ umount "/mnt"
$ kpartx -d "/data/raspbian.img"

Listing 3

 

#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so

Listing 4

 

KERNEL=="sda", SYMLINK+="mmcblk0"
KERNEL=="sda?", SYMLINK+="mmcblk0p%n",

Danach bootet das Standard-Raspbian und präsentiert das Menü für die Erstkonfiguration. Auf zwei Dinge sollten Sie hier verzichten: Bei einem emulierten System ist es absolut sinnlos, die Taktfrequenz des "Rechners" zu "optimieren". Genauso wenig Sinn ergibt das Erweitern des Dateisystems auf die ganze Größe der "SD-Karte" – deren virtuelle Repräsentation fällt ohnehin exakt so groß aus wie das Image selbst. Nach einem Neustart sehen Sie den Standardbildschirm von Raspbian (Abbildung 1).

Abbildung 1: Qemu erlaubt mit einigen Umwegen auch den Start des beliebten Raspberry-Pi-Images Raspbian.

Mit der Tastenkombination [Strg]+[Alt]+[G] "fangen" Sie im Emulator den Mauszeiger, dieselbe Kombination gibt ihn wieder frei. In den Vollbildmodus wechseln Sie per [Strg]+[Alt]+[F]. Die Maus reagiert in der Emulation oft recht zäh, im Vollbildmodus ist das aber etwas besser. Hier spüren Sie den größten Unterschied zu einem Raspbian auf echter Hardware.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Teil 5: Mini-Farb-TFT ILI9341 ansteuern

    Über ein kleines Display behalten Sie Messdaten und andere Werte des ESP8266 jederzeit im Blick. Eine passende Bibliothek erleichtert das Verdrahten.

  • Renovierte GUI für Raspbian

    PIXEL wertet den LXDE-Desktop von Raspbian mit neuen Icons, Hintergrundbildern und Fensterdekorationen zu einem runderen Desktop-Gesamtbild auf.

  • Kindgerechter Audioplayer mit dem Raspberry Pi

    In Kombination mit einer Webcam und ein paar Skripts macht der RasPi eine gute Figur als kindgerechter Musikspieler.

  • Infrarotkamera im Eigenbau

    Das menschliche Auge nimmt nur einen Teil des Lichtspektrums war, das die Sonne abstrahlt – höhere Frequenzbereiche wie etwa Infrarot bleiben ihm verborgen. Der RasPi bietet mit dem passenden Kameramodul eine günstige Möglichkeit, diese abzulichten.

  • Editorial 01/2016

    Der Raspberry Pi ist mehr, als nur einer von vielen Bastelrechnern: In einer Zeit, in der immer mehr Firmen, Staaten und Behörden dem Bürger an die Daten wollen, glänzt er als ebenso preiswerter wie effizienter Baustein für ein persönliches Privacy- und Security-Konzept.

Aktuelle Ausgabe

06/2019
Home Improvement

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Extrem genau

    Mit einem A/D-Wandler messen Sie bei Bedarf Spannungen. Der MCP3424 macht dabei konstruktionsbedingt eine gute Figur.

  • Verbindungsaufnahme

  • Süßer Wecker

    Dem RasPi fehlen sowohl eine Echtzeituhr als auch ein BIOS, ein zeitgesteuertes Wecken erfordert also Zusatzkomponenten. Hier springt der Witty Pi Mini in die Bresche, ein µHAT von UUGear.

  • Windows to go

    Das Aufsetzen zuverlässiger und sicherer Remote-Desktop-Lösungen erfordert einiges Know-how. Die RasPi-basierte Pinbox von Pintexx reduziert den Konfigurationsaufwand auf ein Minimum.

  • Prima Klima

    In Museen ist es Pflicht, zu Hause nützlich: das permanente Prüfen und zentrale Erfassen der Feuchtigkeit und Temperatur in Räumen.

  • Auf einen Blick

    Ein maßgeschneiderter Infoscreen auf RasPi-Basis mit stromsparendem E-Ink-Display zeigt Termine, Bilder, Mitteilungen und Wetterinformationen an.

  • Sanft berührt

    Mit einem RasPi und dem Controllermodul PiXtend lassen sich mühelos Roboterarme ansteuern und deren Bewegung automatisieren.

  • Popcorn-Kino

    Mit Kodi 18.0 unterstützt LibreELEC 9.0 jetzt die von vielen Streaming-Diensten genutzte DRM-Verschlüsselung. Die Integration von Netflix, Amazon und Co. erfordert allerdings Handarbeit.

  • So nah und doch so fern

    Der RasPi kommt häufig als Server oder Steuerrechner für spezielle Zwecke zum Einsatz. Mit Anydesk erhalten Sie dazu eine Steuersoftware mit grafischer Oberfläche.

  • Eingebettet

    Funkmodule, Displays und Analysegeräte für den Raspberry Pi: Auf der Embedded World präsentieren sich zahlreiche Unternehmen interessierten Elektronikbastlern und Entwicklern.