Open Source im professionellen Einsatz
Linux-Magazin 06/2013
© Joseasreyes, 123RF.com

© Joseasreyes, 123RF.com

Transparente Architektur-Emulation mit Qemu

Eigenbau

Kompakte Systeme wie der Raspberry Pi bieten preisgünstige Hardware für unzählige Verwendungszwecke. Doch wie entwickelt und portiert man Software auf diese Plattformen?

580

Die Entwicklung für kleine System-on-a-Chip-Geräte wie den Raspberry Pi stellt eine größere Herausforderung dar, als man zunächst annehmen mag. Diese Geräte sind in erster Linie darauf ausgerichtet, fertige Software auszuführen. Daher hat es sich bewährt, Betriebssystem-Images anzubieten, die ein Anwender lediglich auf den Speicherchip oder das Speichermedium des Geräts kopiert. Im Falle des Raspberry Pi genügt es, ein 1-zu-1-Abbild auf eine SD-Speicherkarte zu schreiben (etwa mit »dd« ), von der das Gerät bootet.

Doch wie erstellt man ein solches Image, das die eigenen Dienste oder Frameworks anbieten soll, möglichst effizient? Naheliegend ist, auf dem Gerät selbst die notwendige Software zu installieren und zu kompilieren. Hier ließen sich alle Einstellungen vornehmen, bevor man das Image auf umgekehrtem Wege wieder von der SD-Karte in eine Datei schreibt, um diese weiterzuverteilen. Das Problem: Die beschriebene Prozedur dauert sehr lange, da diese Geräte keine ausreichenden Ressourcen bieten, um darauf ernsthaft zu entwickeln. Auch geduldige Menschen spüren daher schon bald das Verlangen nach einer Lösung, die möglichst reproduzierbar und automatisiert solche Images generiert.

Draufsicht

Der logische erste Schritt besteht also darin, die eigene Perspektive auf den Prozess zu verändern und einen Schritt zurück zu tun. Um beim Raspberry Pi zu bleiben: Mit Hilfe von Skripten lässt sich etwa das von der Raspberry-Pi-Foundation bereitgestellte Raspbian-Image, das auf Debian basiert, direkt an die eigenen Bedürfnisse anpassen und weiterverteilen. Das spart nicht nur eine Menge Zeit, sondern lässt sich später auch automatisieren und mit einer Continuous-Integration-Umgebung kombinieren, etwa Jenkins CI [1].

Doch auf dem Weg dorthin liegen noch ein paar Stolpersteine. Der gewitzte Entwickler denkt natürlich sofort daran, das Image in eine Chroot-Umgebung einzubinden. So lässt sich darin agieren, als hätte man das System regulär gebootet. Allerdings macht die abweichende Prozessorarchitektur hier einen Strich durch die Rechnung, denn die Intel-CPU kann die binären ARM-Programme nicht ausführen. Besteht also die einzige Lösung darin, einen Raspberry Pi als virtuelle Maschine zu betreiben, mit all den Nachteilen in Sachen Automatisierung, die das mit sich bringt? Nicht zwangsläufig!

Schnell mal emulieren

Ein Übersetzer muss her, der direkt zur Laufzeit einspringt. Qemu [2], der Quick Emulator, dürfte in Verbindung mit Linux' Virtualisierungslösung KVM ein Begriff sein. Doch das Projekt weist noch deutlich mehr Facetten auf. Zusammen mit dem vom Kernel bereitgestellten »binftm_misc« -Mechanismus bietet die Qemu-User-Emulation die Möglichkeit, auch plattformfremden Binärcode auszuführen. Einzige Voraussetzung: Die Maschine selbst darf nicht als VM laufen, sonst wird es kompliziert (Stichwort: Nested Virtualization).

Unter Debian genügt für die Installation eine einzige Zeile:

sudo apt-get install qemu binfmt-support qemu-user-static

Im nächsten Schritt startet der Entwickler den Daemon »binfmt-support« und lässt sich über den Befehl »sudo update-binfmts --display« eine Liste aller unterstützten binären Formate anzeigen. Ruft er dabei ein Programm auf, das für eine andere Plattform kompiliert wurde, erkennt der Daemon das Binärformat automatisch und der passende Qemu-CPU-Emulator führt die Datei aus. Er übersetzt dabei simultan die fremden Prozessorbefehle in für die Intel-Plattform ausführbare Kommandos.

Das Ganze ist allerdings sehr rechenintensiv und zudem nicht auf mehrere CPU-Cores verteilbar, weshalb die Taktung eines einzelnen CPU-Kerns entscheidend für die Performance ist. Ein 2-GHz-Kern liegt nur leicht über der Performance des ARM-Prozessors im Raspberry Pi selbst, die Vorteile dieser Methode liegen also eher in der Flexibilität.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 2 Heftseiten

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

Linux-Magazin kaufen

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

Deutschland

Ähnliche Artikel

  • Qemu 2.6 veröffentlicht

    Der Emulator Qemu bringt in der nun erschienen Version 2.6 einige Neuerungen mit, etwa Support für den Raspberry Pi 2.

  • Qemu 1.7 verbessert HD Audio und USB 3.0

    Die neue Version der Virtualisierungssoftware Qemu bietet unter anderem verbesserte Emulation von HD Audio, unterstützt prinzipiell mehr als 1 TByte Hauptspeicher und kann ACPI-Tabellen für x86-Hardware erzeugen.

  • Raspberry Pi + Debian = Raspbian

    Ein ARM-Port der Linux-Distribution Debian ist nun das vom Hersteller empfohlene Betriebssystem für den Einplatinen-Computer Raspberry Pi.

  • Raspi-Images

    Wer sich nicht nur einen einzigen, sondern gleich einen ganzen Zoo an Raspberry Pis hält, muss Wege finden, um die Zwerge schnell zu betanken und geschickt zu aktualisieren. Ein Bash-Skript bewirkt hier Wunder: Es lädt die passenden Images herunter und automatisiert die Konfiguration.

  • Qemu 1.6.0 verbessert Live-Migration

    Version 1.6.0 des beliebten und freien Emulators Qemu verbessert unter anderem den Support für Live-Migrationen.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.