We nemen een kernel, een Raspberry Pi-besturingssysteem, een emulator en een distro (waarbij we voor het gemak Microsoft Windows ook maar als een closed source “distro” meetellen). Met de zoekengine voortdurend actief begint de puzzeltocht en een periode van trial-and-error. Het moet toch mogelijk zijn om Raspbian te draaien zonder een Raspberry Pi?

Qemu kennen we allemaal wel als virtual machine hypervisor voor het Intel-platform. Qemu wordt gebruikt door VirtualBox, Xen, KVM en (Citrix) XenServer en vormt de basis voor deze en andere type-2 en bare-metal servervirtualisatie producten. Maar Qemu is ook in staat andere processors te emuleren. Zo is het na wat puzzelen mogelijk om de ARMv6 processor te emuleren bovenop andere hardware en andere besturingssystemen om hier vervolgens Raspbian op te draaien.

Raspbian

Raspbian is het door de Raspberry Foundation aangeraden Linux-besturingssysteem voor de Raspberry Pi’s. Het is gemaakt voor de ARMv6 processor, en met de komst van de Raspberry Pi 2 model B, geschikt gemaakt (de kernel) voor de ARMv7 processor. Aangezien deze processor door Qemu kan worden geëmuleerd, moet het in theorie mogelijk zijn om Raspbian te draaien op een Windows 8.1 machine of een Linux-systeem met een Intel x64/x86 processor. Maar lukt het ook in de praktijk? Er zijn op internet tientallen beschrijvingen te vinden, met allemaal verschillende versies van hoe je Raspbian emuleert met Qemu. De meeste ervan werken niet (meer), want je moet exact de goede combinatie van versies van onderdelen bij elkaar sprokkelen en dat is nog een hele puzzel.

 

Download Qemu

Wij installeren Qemu op Windows 8.1 en op Linux Mint. Het effect van draaien van de ARM-code van Raspbian op een Microsoft-platform oogt indrukwekkender. Immers is niet alleen de processor anders, maar ook het besturingssysteem. We downloaden de Qemu-binary voor Windows van http://qemu.weilnetz.de en kiezen hier de 32-bit versie van 1-december 2014. De 64-bit versie lijkt op dit moment niet goed te werken in deze combinatie en ook nieuwere versies van Qemu haken soms af. Dubbelklik op qemu-w32-setup-20141210.exe om met een wizard qemu op je Windows-systeem te installeren. Alle bestanden worden naar C:\Program Files (x86)\qemu gekopieerd. Wil je Raspbian emuleren op Linux (bijvoorbeeld op Mint), dan volstaat de standaard qemu (installeren gaat eenvoudig met sudo apt-get install qemu-system-arm). De bestanden staan in /usr/share/qemu en de applicaties bevinden zich in /usr/bin.

 

Download een kernel

De tweede stap is dat we een werkende kernel voor de ARM moeten vinden. We downloaden deze op http://xecdesign.com/downloads/linux-qemu/kernel-qemu en plaatsen het bestand kernel-qemu in de Windows-installatiemap C:\Program Files (x86)\qemu of onder Linux in de directory /usr/share/qemu. De site is op het moment van schrijven (medio juni) uit de lucht, dus wellicht moet je de kernel op een andere plek zoeken (of ons even mailen) of hem zelf compileren vanuit de source.

 

Download Raspbian

Nu moeten we nog Linux Raspbian zelf hebben. De laatste versie van http://raspberrypi.org functioneert wel, maar de grafische X-omgeving werkt incorrect (de menubalk is verdwenen). We testen daarom met eerdere versies van Raspbian. De versie van 16-02-2015 functioneert bij ons. Dit zip-bestand pakken we op Windows uit met een dubbelklik of op Linux met Archive Manager. Het schijfimage wat je nu verkrijgt (een img-bestand) kopiëren we onder Windows naar C:\Program Files (x86)\qemu of onder Linux naar /usr/share/qemu, en geven het bestand daarna een handige naam, bijvoorbeeld raspbian.img

 

Initieel starten van Raspbian

We starten Qemu met Raspbian vanaf de opdrachtregel onder Windows vanuit de map C:\Program Files (x86)\qemu met de opdracht:

 

qemu-system-armw.exe -M versatilepb -cpu arm1176 -hda raspbian.img -kernel kernel-qemu -m 256 -no-reboot -append “root=/dev/sda2 panic=1 init=/bin/sh rootfstype=ext4 rw”

 

 

Onder Linux is dit bijna hetzelfde en tik je op de opdrachtregel vanaf de directory /usr/share/qemu:

 

 

qemu-system-arm  -M versatilepb -cpu arm1176 -hda raspbian.img -kernel kernel-qemu -m 256 -no-reboot -append “root=/dev/sda2 panic=1 init=/bin/sh  rootfstype=ext4 rw”

 

 

Je wilt dit niet elke keer inkloppen, dus maak je er bij voorkeur een script van. Op Windows doe je dat met Notepad en bewaar je dit als raspberry.bat in de map C:\Program Files (x86)\qemu. Het script op Linux maak je met vi of nano en bewaar je als raspberry bijvoorbeeld in de directory /usr/share/qemu. Wel even uitvoerbaar maken met chmod 700 raspberry.  Je start de geëmuleerde Raspberry Pi op Windows simpelweg met raspberry, of op Linux met ./raspberry als de current directory niet in je pad staat. Vanaf hier is het proces op Windows en Linux Mint identiek.

 

Reboot, reboot, reboot

Je Raspberry Pi in Qemu start nu op in een shell als root. Negeer opstartmeldingen, want Qemu kan niet elk onderdeel van de Raspberry Pi emuleren. We moeten nu enkele aanpassingen maken in Raspbian Linux. Open met een editor (vi, nano) het bestand /etc/ld.so.preload:

 

 

# vi /etc/ld.so.preload

 

 

Je ziet nu één regel: /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so maar deze moet uitgecommentarieerd worden. Zet dus een #-teken voor de regel en bewaar het bestand. Laat je dit achterwege, dan blijft Raspbian straks in een reboot-lus hangen zonder einde…

 

Vervolgens moeten we het bestand /etc/udev/rules.d/90-qemu.rules aanmaken om de namen van de schijven te koppelen aan degenen, die gebruikt worden op de Raspberry.

 

# vi /etc/udev/rules.d/90-qemu.rules

 

 

Voeg in dit lege bestand de volgende drie regels toe en bewaar het daarna:

 

 

KERNEL==”sda”, SYMLINK+=”mmcblk0″

KERNEL==”sda?”, SYMLINK+=”mmcblk0p%n”

KERNEL==”sda2?”, SYMLINK+=“root”

 

 

Sluit Raspbian nu af door eerst een sync te geven en dan uit te loggen met exit. De emulator stopt.

 

Bewerk het eerder gemaakte script op de host en haal hier de shell in weg. Met andere woorden: verwijder in de scriptregel init=/bin/sh  

Start het systeem op en je komt (eenmalig) automatisch in het raspi-config menu, net zoals op je Raspberry Pi hardware. Het zou natuurlijk grappig zijn om je geëmuleerde ARM-processor te overklokken of een virtuele camera aan te sturen, maar we stellen voor om raspi-config te verlaten door met de TAB-toets Finish te selecteren. 

 

Schijfruimte

Als je met df- h kijkt, zie je dat er minder dan 400MB vrije ruimte is op je virtuele SD-kaartje. Dat kunnen we uitbreiden. Verlaat de Raspbian Linux-omgeving door een sudo shutdown -h now te geven. We gaan op de Windows- of Linux-opdrachtregel de schijf verdubbelen met:

 

 

qemu-img resize raspbian.img +3G

 

We booten nu de virtuele Raspberry weer door ons script aan te roepen op de Windows- of Linux Mint-opdrachtregel. Log na het booten van Raspbian op Linux in, met loginnaam pi en wachtwoord raspberry (de defaults). Zou je nu in raspi-config kiezen om de SD-kaart te vergroten, dan lukt dat niet, omdat /dev/root volgens Raspbian geen SD-kaart is. Het is niet mogelijk in deze combinatie van software met raspi-config de SD-kaart te vergroten (op oudere versies werkte dit wel).

 

Je doet dat nu gewoon met: fdisk /dev/sda

Verwijder hier partitie 2 door in het interactieve fdisk-programma te kiezen voor d en dan 2. Maak een nieuwe partitie aan met n, gevolgd door e en dan 2. Kies als start adres 122880 (default) en als eindadres het hoogste wat mogelijk is. In ons geval met 3GB extra is dat 12691455. Bewaar de instellingen met w en fdisk wordt gestopt. Reboot nu je geëmuleerde Raspbian systeem, log in en voer uit:

 

sudo resize2fs /dev/sda2

 

Je hebt nu meer dan 3GB vrije ruimte ter beschikking!

 

Schermresolutie

De geëmuleerde Raspberry Pi draait in een grafische schermresolutie van 640×480 pixels. Dit is wat aan de lage klant, dus we willen naar 800×600 overstappen (meer kan Qemu in deze combinatie van software niet aan, 16-bit kleur is eveneens het maximum). Met een editor maken we een nieuw bestand /etc/X11/xorg.conf en voegen hier aan toe:

 

 

Section “Screen”

  Identifier “Default Screen”

  SubSection “Display”

     Depth 16

     Modes “800×600” “640×480”

  EndSubSection

EndSection

 

 

We schakelen nu default over naar de GUI. Start raspi-config met sudo raspi-config. Kies in het menu Enable boot to Desktop en kies daarna Desktop login as user ‘pi’ at the graphical desktop.  Na een reboot start automatisch de grafische omgeving van de geëmuleerde Raspberry met ARM-processor met Raspbian bovenop Windows 8.1/Intel of bovenop Linux Mint/Intel. Je kunt meteen de browser starten en op internet gaan, want via de DHCP-server op je netwerk heeft Raspbian een IP-adres gekregen. Je hebt voldoende plek op de geëmuleerde SD-kaart gecreëerd om het besturingssysteem bij te werken: sudo apt-get update en sudo apt-get upgrade.

 

Er is overigens geen verbinding tussen Raspbian en de host waarop je het emuleert. Dit valt buiten de scope van dit artikel. In het artikel over virtual networking van Filip Vervloesem in dit magazine lees je meer over de manieren netwerken te maken tussen virtuele/geëmuleerde machines.

 

Snelheid

De vraag is nu: hoe snel is deze emulatie (op een supersnelle pc) in vergelijking met een hardwarematige Raspberry Pi? Het antwoord is simpel: traag. De Raspberry Pi zelf is al geen snelheidsmonster, maar op de geëmuleerde Raspberry Pi duurt het wel meer dan 90 seconden, voordat je de grafische schil van Raspbian ziet. Het starten van applicaties duurt eveneens een stuk langer. En je mist natuurlijk de fullcolour en HD-resolutie. Op sommige hosts gedraagt ook de muis zich wat vreemd. Het is dus Raspbian en een geëmuleerde Raspberry Pi, maar met beperkingen. Dus zeg maar een model RPi A minus. Er is geen noemenswaardig verschil in performance tussen een geëmuleerde Raspbian op Windows 8.1 en op Linux Mint 17.1 Rebecca. Maar waarom zou je dit willen, Raspbian ARM-code emuleren op een Intel processor? Nou, omdat het kan!

 

Gelukt?

Deel jouw ervaringen met andere Linux Magazine lezers. Op welke combinaties van kernel, Raspbian image, Qemu, Linux distro of Windows-versie werkt Raspbian goed? Heb je nog kans gezien één van de vele foutmeldingen en waarschuwingen op te lossen? Heb je NOOBS geprobeerd (ja, die werkt) en een andere distro aan de praat gekregen? Je kunt niks winnen, maar de top 3 zal worden vermeld in de volgende write root-lezersrubriek.