Qemu – Raspbian emuleren

raspberry pi logo

Qemu logo

Je kan een Rapsberry Pi “Raspbian” image laden en te emuleren in Qemu, en je hebt een “kernel” bestand nodig: qemu-rpi-kernel, plaats deze in de folder waarin je Qemu geïnstalleerd hebt.

Plaats een IMG bestand in de folder van Qemu, het volgende commando kan worden gebruikt om een image op te starten:

qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1" -redir tcp:2222::22 -hda 2012-09-18-wheezy-raspbian.img

Ps. Bovenstaande commando werkt met:
2012-09-18-wheezy-raspbian.img
2012-12-16-wheezy-raspbian.img

-kernel kernel-qemu
de QEMU-ready kernel.
-cpu arm1176
De computer die we emuleren (ARM1176JZF-S @ 700 MHz).
-m 256
Hoeveel geheugen er beschikbaar moet zijn (in MB).
-M versatilepb
De machinetype om te emuleren.
-no-reboot
Afsluiten in plaats van rebooten.
-serial stdio
Verwijst de seriele poort naar de standaard I/O.
-append “root=/dev/sda2 panic=1”
De locatie van de root partitie, dit verschil per SD image.
-redir tcp:2222::22
Doorlinken van de SSH poort (22) naar poort 2222 op de host.
hda bestandsnaam.img
Wat er gebruik wordt als harde schijf (hda), in dit geval 2012-09-18-wheezy-raspbian.img.

Ter info: Meer geheugen werkt niet, met 512 MB wordt de emulatie niets eens gestart, dit waarschijnlijk door de limitatie van de qemu-rpi-kernel.

Nieuwere images:
Bij nieuwere images zoals 2015-01-31-raspbian.img moet Qemu gestart worden met -append “root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash”:

qemu-system-armw -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda 2015-01-31-raspbian.img

Ps. qemu_rpi_kernel 3.2.27 werkt met 2012-07-15-wheezy-raspbian.img

Patchen van de Raspbian image voor QEMU

1) Bewerk het bestand /etc/ld.so.preload met het commando:  nano /etc/ld.so.preload
2) Plaats een hekje voor de regel die je ziet:  #/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so
3) Sla het bestand op CTRL+O (kies voor wijzigingen opslaan)

Nu een symlink plaatsen voor de kernel:
4) Maak een nieuw bestand aan met NANO, met het volgende commando:  nano /etc/udev/rules.d/90-qemu.rules

Voeg de volgende tekst toe:

5) Sla het bestand op en sluit NANO af.

Meer geheugen toewijzen:
Je kan de image gebruiken zoals hij is, alleen heb je 200 MB aan vrije ruimte, dat is wat weinig! Je kan de image vergrootten met het commando:  qemu-img resize 2012-12-16-wheezy-raspbian.img +1G om zo 1GB extra ruimte toe te voegen, deze vrije ruimte is nog niet actief en wordt in de volgende stappen uitgelegd.

6) Start Qemu met een volledige boot als volgt:

qemu-system-armw -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda 2015-01-31-raspbian.img

Let op: het opstarten kan enige tijd (5 minuten) duren.

7) Log in met naam: pi, en wachtwoord: raspberry

8) Om de image wijs te maken dat het van een SD kaart leest moeten we een symlink aanmaken, met het volgende commando:  sudo ln -snf mmcblk0p2 /dev/root

9) Gebruik nu het commando  sudo raspi-config en kies voor de optie “Expand Filesystem” om daadwerkelijk de extra vrije ruimte te gebruiken.

raspbian expand filesystem

10) Nadat het klaar is, sluit Qemu af en herstart het weer, ja kan nu Raspbian gebruiken

Ps. gebruik het commando startx om de desktop te starten:

qemu raspbian desktop

Voorbeeld scherm na het opstarten van een image:
qemu raspbian emulatie

Raspbian Desktop op hogere resolutie

Met deze emulatie is de resolutie van de Raspbian desktop ongeveer 400×340 pixels, om dit aan te passen naar bijvoorbeeld 800×600, maak het volgende bestand aan /etc/X11/xorg.conf, met het volgende commando:  sudo nano /etc/X11/xorg.conf , met daarin de volgende inhoud:

Start de desktop weer met startx  om de wijzigingen te zien.

Bronnen:
sentryytech.blogspot.nl
cubik-tech.blogspot.nl